Skip to content

Commit 5e7bc13

Browse files
authored
Merge pull request #82 from majianjia/dev-0.4.x
Fix GRU bias shape conversion bug
2 parents 3690a9e + 01d518f commit 5e7bc13

File tree

1 file changed

+8
-8
lines changed

1 file changed

+8
-8
lines changed

scripts/nnom.py

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -362,7 +362,6 @@ def simple_cell_step(inputs, state, kernel, recurrent_kernel, bias, activation):
362362
kernel = layer.get_weights()[0]
363363
recurrent_kernel = layer.get_weights()[1]
364364
bias = layer.get_weights()[2]
365-
366365
def lstm_cell_step(cell_inputs, cell_states, kernel, recurrent_kernel, bias):
367366
h_tm1 = cell_states[0] # previous memory state
368367
c_tm1 = cell_states[1] # previous carry state
@@ -424,11 +423,11 @@ def lstm_cell_step(cell_inputs, cell_states, kernel, recurrent_kernel, bias):
424423
q_z1 = find_dec_bits_max_min(z1_array)
425424
q_z2 = find_dec_bits_max_min(z2_array)
426425
q_z3 = find_dec_bits_max_min(z3_array)
427-
return [q_h, q_c, q_z]
426+
return [q_h, q_c-1, q_z-1]
428427

429428
elif (type(layer.cell) is GRUCell or 'gru' in layer.cell.name):
430429
cfg = layer.cell.get_config()
431-
state = np.zeros(cfg['units']*2)
430+
state = np.zeros(cfg['units'])
432431
k = layer.get_weights()[0]
433432
rk = layer.get_weights()[1]
434433
bias = layer.get_weights()[2]
@@ -451,13 +450,12 @@ def gru_cell_step(cell_inputs, cell_states, kernel, recurrent_kernel, input_bias
451450
h3 = h2 * hh
452451
h = h1 + h3
453452
return h, [h], matrix_x, matrix_inner
454-
455453
h_array = []
456454
z_array = []
457455
i_array=[]
458456
for feature in features:
459457
if (not layer.stateful):
460-
# state = [np.zeros(cfg['units']), np.zeros(cfg['units']) ] # for test
458+
# state = [np.zeros(cfg['units']) ] # for test
461459
# for fe in feature:
462460
# fe = np.zeros(32)
463461
# fe.fill(5)
@@ -706,9 +704,11 @@ def quantize_weights(model, name='weights.h', format='hwc', per_channel_quant=Tr
706704
else:
707705
transposed_wts = np.transpose(var_values, (3, 0, 1, 2))
708706
elif(is_lstm_layer(layer) or is_gru_layer(layer)): # currently we use 16 bit intermediate, use reorder optimation
709-
transposed_wts = np.transpose(var_values)
710-
if('kernel' in var_name): # not working yet
711-
transposed_wts = convert_q7_q15_weights(np.reshape(transposed_wts ,(transposed_wts.shape[0], transposed_wts.shape[1], 1, 1)))
707+
if('kernel' in var_name):
708+
transposed_wts = np.transpose(var_values)
709+
transposed_wts = convert_q7_q15_weights(np.reshape(transposed_wts ,(transposed_wts.shape[0], transposed_wts.shape[1], 1, 1)))
710+
else: # bias will not need to be transposed (for GRU which has 2d bias)
711+
transposed_wts = var_values
712712
else: # fully connected layer weights or biases of any layer
713713
# test, use opt weight reorder
714714
transposed_wts = np.transpose(var_values)

0 commit comments

Comments
 (0)