@@ -362,7 +362,6 @@ def simple_cell_step(inputs, state, kernel, recurrent_kernel, bias, activation):
362
362
kernel = layer .get_weights ()[0 ]
363
363
recurrent_kernel = layer .get_weights ()[1 ]
364
364
bias = layer .get_weights ()[2 ]
365
-
366
365
def lstm_cell_step (cell_inputs , cell_states , kernel , recurrent_kernel , bias ):
367
366
h_tm1 = cell_states [0 ] # previous memory state
368
367
c_tm1 = cell_states [1 ] # previous carry state
@@ -424,11 +423,11 @@ def lstm_cell_step(cell_inputs, cell_states, kernel, recurrent_kernel, bias):
424
423
q_z1 = find_dec_bits_max_min (z1_array )
425
424
q_z2 = find_dec_bits_max_min (z2_array )
426
425
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 ]
428
427
429
428
elif (type (layer .cell ) is GRUCell or 'gru' in layer .cell .name ):
430
429
cfg = layer .cell .get_config ()
431
- state = np .zeros (cfg ['units' ]* 2 )
430
+ state = np .zeros (cfg ['units' ])
432
431
k = layer .get_weights ()[0 ]
433
432
rk = layer .get_weights ()[1 ]
434
433
bias = layer .get_weights ()[2 ]
@@ -451,13 +450,12 @@ def gru_cell_step(cell_inputs, cell_states, kernel, recurrent_kernel, input_bias
451
450
h3 = h2 * hh
452
451
h = h1 + h3
453
452
return h , [h ], matrix_x , matrix_inner
454
-
455
453
h_array = []
456
454
z_array = []
457
455
i_array = []
458
456
for feature in features :
459
457
if (not layer .stateful ):
460
- # state = [np.zeros(cfg['units']), np.zeros(cfg['units']) ] # for test
458
+ # state = [np.zeros(cfg['units']) ] # for test
461
459
# for fe in feature:
462
460
# fe = np.zeros(32)
463
461
# fe.fill(5)
@@ -706,9 +704,11 @@ def quantize_weights(model, name='weights.h', format='hwc', per_channel_quant=Tr
706
704
else :
707
705
transposed_wts = np .transpose (var_values , (3 , 0 , 1 , 2 ))
708
706
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
712
712
else : # fully connected layer weights or biases of any layer
713
713
# test, use opt weight reorder
714
714
transposed_wts = np .transpose (var_values )
0 commit comments