is_training = False if is_training: model.fit(X_train, Y_train, validation_data=( X_test, Y_test), epochs=20, batch_size=64) # Evaluate the model scores = model.evaluate(X_test, Y_test, verbose=0) print("Evaluation Accuracy: %.2f%%" % (scores[1]*100)) model.save(filename, save_format='tf') else: model.load_weights(filename) t1 = time.time() lstm_upstream = tf.keras.Model( inputs=model.input, outputs=model.get_layer('max_pooling1d').output) lstm_input = lstm_upstream.predict(X_test, batch_size=8) # print(lstm_input.shape) num_records = lstm_input.shape[0] quantized_lstm_input = quanti_convert_float_to_int16( lstm_input.reshape(num_records * 25*32), in_pos).reshape((num_records, 25*32)) lstm_output = np.zeros((num_records, 25*100), dtype=np.int16) runner_idx = count = 0 outputTensors = runners[0].get_output_tensors() _, _, runner_out_seq_len = tuple(outputTensors[0].dims) quantized_input = quantized_lstm_input.view()
lstm_upstream = K.function([model.layers[0].input], [model.layers[2].output]) lstm_input = lstm_upstream([X_test])[0] batches = lstm_input.shape[0] lstm_output = np.zeros((batches, 100)) lstm_tmp = np.zeros((1, 100)) lstm = K.function([model.layers[3].input], [model.layers[3].output]) t1 = time.time() for index, x in enumerate(lstm_input): lstm_input_batch1 = x.reshape(1, 25, 32) lstm_output[index] = lstm(lstm_input_batch1)[0] #lstm = K.function([model.layers[3].input], [model.layers[3].output]) #lstm_start = dt.datetime.now() #lstm_output = lstm([lstm_input])[0] #lstm_finish = dt.datetime.now() #print('lstm foward time(secs):', (lstm_finish - lstm_start).total_seconds()) #lstm_out = lstm_output_batch1.reshape((batches, 25, 100)) lstm_downstream = Sequential() lstm_downstream.add(layers.Dense(1, activation='sigmoid')) lstm_downstream.compile(loss='binary_crossentropy', optimizer='adam', metrics=['accuracy']) lstm_downstream.build((1, 100)) lstm_downstream.layers[0].set_weights(model.get_layer('dense').get_weights()) score = lstm_downstream.evaluate(lstm_output, Y_test, verbose=0) t2 = time.time() print('Accuracy:', score[1]) print('E2E Time:', t2 - t1) #print(tf.__version__)