knuckletouch/python/Step_13_LSTM-Report.ipynb

39 KiB

In [1]:
## USE for Multi GPU Systems
#import os
#os.environ["CUDA_VISIBLE_DEVICES"]="0"

import numpy as np
import matplotlib.pyplot as plt
import pandas as pd
import math

import tensorflow as tf

%matplotlib inline

# Importing SK-learn to calculate precision and recall
import sklearn
from sklearn import metrics 

# Used for graph export
from tensorflow.python.framework import graph_util
from tensorflow.python.framework import graph_io
from keras import backend as K


target_names = ["tap", "twotap", "swipeleft", "swiperight", "swipeup", "swipedown", "twoswipeup", "twoswipedown", "circle", "arrowheadleft", "arrowheadright", "checkmark", "flashlight", "l", "lmirrored", "screenshot", "rotate"]
Using TensorFlow backend.
In [2]:
df = pd.read_pickle("DataStudyCollection/df_lstm_norm50.pkl")

lst = df.userID.unique()
np.random.seed(42)
np.random.shuffle(lst)
test_ids = lst[-5:]
train_ids = lst[:-5]
print(train_ids, test_ids)
df.TaskID = df.TaskID % 17

x = np.concatenate(df.Blobs.values).reshape(-1,50,27,15,1)
x = x / 255.0

# convert class vectors to binary class matrices (one-hot notation)
num_classes = len(df.TaskID.unique())
y = utils.to_categorical(df.TaskID, num_classes)

labels = sorted(df.TaskID.unique())
[ 1  2  9  6  4 14 17 16 12  3 10 18  5] [13  8 11 15  7]
In [3]:
# If GPU is not available: 
# GPU_USE = '/cpu:0'
#config = tf.ConfigProto(device_count = {"GPU": 1})


# If GPU is available: 
config = tf.ConfigProto()
config.log_device_placement = True
config.allow_soft_placement = True
config.gpu_options.allow_growth=True
config.gpu_options.allocator_type = 'BFC'

# Limit the maximum memory used
config.gpu_options.per_process_gpu_memory_fraction = 0.3

# set session config
sess = tf.Session(config=config)
tf.keras.backend.set_session(sess)
In [4]:
model = tf.keras.models.load_model('./ModelSnapshots/LSTM-v2-00398.h5')
In [5]:
%%time
lst = []
batch = 100
for i in range(0, len(x), batch):
    _x = x[i : i+batch]
    lst.extend(model.predict(_x))
CPU times: user 47.2 s, sys: 6.47 s, total: 53.6 s
Wall time: 30.9 s
In [6]:
len(df)
Out[6]:
9193
In [7]:
df["TaskIDPred"] = lst
df.TaskIDPred = df.TaskIDPred.apply(lambda x: np.argmax(x))
In [8]:
df_train = df[df.userID.isin(train_ids)]
df_test = df[df.userID.isin(test_ids)]
In [9]:
print(sklearn.metrics.confusion_matrix(df_train.TaskID.values, df_train.TaskIDPred.values, labels=labels))
cm = sklearn.metrics.confusion_matrix(df_train.TaskID.values, df_train.TaskIDPred.values, labels=labels)
cm = cm.astype('float') / cm.sum(axis=1)[:, np.newaxis]
print(np.round(cm,1))
print("Accuray: %.3f" % sklearn.metrics.accuracy_score(df_train.TaskID.values, df_train.TaskIDPred.values))
print("Recall: %.3f" % metrics.recall_score(df_train.TaskID.values, df_train.TaskIDPred.values, average='macro'))
#print("Precision: %.2f" % metrics.average_precision_score(df_train.TaskID.values, df_train.TaskIDPred.values))
print("F1-Score: %.3f" % metrics.f1_score(df_train.TaskID.values, df_train.TaskIDPred.values, average='macro'))
print(sklearn.metrics.classification_report(df_train.TaskID.values, df_train.TaskIDPred.values, target_names=target_names))
[[323   0   0   0   0   0   0   0   0   0   1   0   1   0   0   0  11]
 [  1 443   0   0   0   0   1   0   0   0   0   0   0   0   0   0   0]
 [  1   0 333   1   0   0   0   0   0   0   0   0   0   0   2   0   0]
 [  3   0   0 317   0   0   0   0   0   0   0   0   0   1   0   0   0]
 [  1   0   0   0 321   1   0   1   0   0   0   0   1   0   0   0   0]
 [  1   0   0   0   0 327   0   0   0   0   0   0   1   1   0   1   3]
 [  0   0   0   0   0   0 431   2   0   0   0   0   0   0   1   0   0]
 [  0   0   0   0   0   1   1 436   0   0   0   0   0   0   0   0   0]
 [  0   0   0   1   0   0   0   0 396   1   0   3   0   1   2   0   0]
 [  1   1   6   1   0   0   0   0   0 374   0   3   0   2   0   0   0]
 [  0   0   0   4   0   1   0   0   0   0 380   0   0   0   1   2   0]
 [  0   0   0   0   0   0   0   0   0   0   0 364   0   0   0   0   0]
 [  0   0   0   2   4   2   0   0   0   0   0   0 394   0   0   0   1]
 [  0   0   0   6   0   3   0   0   1   3   0   4   1 383   0   0   0]
 [  0   0   2   0   0   2   0   0   0   0   1   0   2   0 407   0   0]
 [  0   0   0   0   0   0   0   0   1   0   5   0   0   0  20 376   0]
 [ 12   0   0   0   0   0   0   0   0   0   0   0   1   0   0   0 477]]
[[1.  0.  0.  0.  0.  0.  0.  0.  0.  0.  0.  0.  0.  0.  0.  0.  0. ]
 [0.  1.  0.  0.  0.  0.  0.  0.  0.  0.  0.  0.  0.  0.  0.  0.  0. ]
 [0.  0.  1.  0.  0.  0.  0.  0.  0.  0.  0.  0.  0.  0.  0.  0.  0. ]
 [0.  0.  0.  1.  0.  0.  0.  0.  0.  0.  0.  0.  0.  0.  0.  0.  0. ]
 [0.  0.  0.  0.  1.  0.  0.  0.  0.  0.  0.  0.  0.  0.  0.  0.  0. ]
 [0.  0.  0.  0.  0.  1.  0.  0.  0.  0.  0.  0.  0.  0.  0.  0.  0. ]
 [0.  0.  0.  0.  0.  0.  1.  0.  0.  0.  0.  0.  0.  0.  0.  0.  0. ]
 [0.  0.  0.  0.  0.  0.  0.  1.  0.  0.  0.  0.  0.  0.  0.  0.  0. ]
 [0.  0.  0.  0.  0.  0.  0.  0.  1.  0.  0.  0.  0.  0.  0.  0.  0. ]
 [0.  0.  0.  0.  0.  0.  0.  0.  0.  1.  0.  0.  0.  0.  0.  0.  0. ]
 [0.  0.  0.  0.  0.  0.  0.  0.  0.  0.  1.  0.  0.  0.  0.  0.  0. ]
 [0.  0.  0.  0.  0.  0.  0.  0.  0.  0.  0.  1.  0.  0.  0.  0.  0. ]
 [0.  0.  0.  0.  0.  0.  0.  0.  0.  0.  0.  0.  1.  0.  0.  0.  0. ]
 [0.  0.  0.  0.  0.  0.  0.  0.  0.  0.  0.  0.  0.  1.  0.  0.  0. ]
 [0.  0.  0.  0.  0.  0.  0.  0.  0.  0.  0.  0.  0.  0.  1.  0.  0. ]
 [0.  0.  0.  0.  0.  0.  0.  0.  0.  0.  0.  0.  0.  0.  0.  0.9 0. ]
 [0.  0.  0.  0.  0.  0.  0.  0.  0.  0.  0.  0.  0.  0.  0.  0.  1. ]]
Accuray: 0.979
Recall: 0.979
F1-Score: 0.978
                precision    recall  f1-score   support

           tap       0.94      0.96      0.95       336
        twotap       1.00      1.00      1.00       445
     swipeleft       0.98      0.99      0.98       337
    swiperight       0.95      0.99      0.97       321
       swipeup       0.99      0.99      0.99       325
     swipedown       0.97      0.98      0.97       334
    twoswipeup       1.00      0.99      0.99       434
  twoswipedown       0.99      1.00      0.99       438
        circle       0.99      0.98      0.99       404
 arrowheadleft       0.99      0.96      0.98       388
arrowheadright       0.98      0.98      0.98       388
     checkmark       0.97      1.00      0.99       364
    flashlight       0.98      0.98      0.98       403
             l       0.99      0.96      0.97       401
     lmirrored       0.94      0.98      0.96       414
    screenshot       0.99      0.94      0.96       402
        rotate       0.97      0.97      0.97       490

     micro avg       0.98      0.98      0.98      6624
     macro avg       0.98      0.98      0.98      6624
  weighted avg       0.98      0.98      0.98      6624

In [10]:
print(sklearn.metrics.confusion_matrix(df_test.TaskID.values, df_test.TaskIDPred.values, labels=labels))
cm = sklearn.metrics.confusion_matrix(df_test.TaskID.values, df_test.TaskIDPred.values, labels=labels)
cm = cm.astype('float') / cm.sum(axis=1)[:, np.newaxis]
print(np.round(cm,1))
print("Accuray: %.3f" % sklearn.metrics.accuracy_score(df_test.TaskID.values, df_test.TaskIDPred.values))
print("Recall: %.3f" % metrics.recall_score(df_test.TaskID.values, df_test.TaskIDPred.values, average='macro'))
#print("Precision: %.2f" % metrics.average_precision_score(df_test.TaskID.values, df_test.TaskIDPred.values))
print("F1-Score: %.3f" % metrics.f1_score(df_test.TaskID.values, df_test.TaskIDPred.values, average='macro'))
print(sklearn.metrics.classification_report(df_test.TaskID.values, df_test.TaskIDPred.values, target_names=target_names))
[[ 98   5   1   1   0   7   0   5   0   0   0   0   5   0   0   0   4]
 [  2 130   0   0   4   0   6   1   0   0   0   0   4   0   0   0   1]
 [  0   0 103   0   0   0   0   0   0   0   0   0   0   0  27   0   0]
 [  0   0   0 106   0   0   0   0   0   2   0   1   1  17   0   0   0]
 [  0   0   0   0 116   0   0   0   2   0   0   0  10   0   0   0   0]
 [  0   0   0   0   1 124   0   0   0   0   0   1   2   0   6   0   1]
 [  0   0   0   0  17   0 144   0   0   0   0   0   3   0   0   0   0]
 [  0   0   0   0   0  18   0 151   0   0   0   0   0   0   0   0   0]
 [  0   3   1   0   0   0   1   0 130   8   0   4   0   4  14   1   0]
 [  0   0   1   0   0   0   0   0   0 136   0   3   1  11   0   2   0]
 [  0   0   0   0   0   1   0   0   0   1 124   0   0   0   4  22   0]
 [  0   0   0   2   1   0   0   0   2   1   0 140   1   0   0   0   0]
 [  0   0   1   0   6  15   0   0   1   0   0   0 139   2   0   0   0]
 [  0   0   0   0   0   3   0   0   0   2   0   2   2 149   1   0   0]
 [  1   0   0   0   0   2   0   0   0   0   7   0   1   1 151   0   0]
 [  0   0   0   1   0   0   0   0   2   3   2   0   0   0   6 146   0]
 [ 31   0   0   0   0   1   0   0   0   0   0   2   1   0   0   0 142]]
[[0.8 0.  0.  0.  0.  0.1 0.  0.  0.  0.  0.  0.  0.  0.  0.  0.  0. ]
 [0.  0.9 0.  0.  0.  0.  0.  0.  0.  0.  0.  0.  0.  0.  0.  0.  0. ]
 [0.  0.  0.8 0.  0.  0.  0.  0.  0.  0.  0.  0.  0.  0.  0.2 0.  0. ]
 [0.  0.  0.  0.8 0.  0.  0.  0.  0.  0.  0.  0.  0.  0.1 0.  0.  0. ]
 [0.  0.  0.  0.  0.9 0.  0.  0.  0.  0.  0.  0.  0.1 0.  0.  0.  0. ]
 [0.  0.  0.  0.  0.  0.9 0.  0.  0.  0.  0.  0.  0.  0.  0.  0.  0. ]
 [0.  0.  0.  0.  0.1 0.  0.9 0.  0.  0.  0.  0.  0.  0.  0.  0.  0. ]
 [0.  0.  0.  0.  0.  0.1 0.  0.9 0.  0.  0.  0.  0.  0.  0.  0.  0. ]
 [0.  0.  0.  0.  0.  0.  0.  0.  0.8 0.  0.  0.  0.  0.  0.1 0.  0. ]
 [0.  0.  0.  0.  0.  0.  0.  0.  0.  0.9 0.  0.  0.  0.1 0.  0.  0. ]
 [0.  0.  0.  0.  0.  0.  0.  0.  0.  0.  0.8 0.  0.  0.  0.  0.1 0. ]
 [0.  0.  0.  0.  0.  0.  0.  0.  0.  0.  0.  1.  0.  0.  0.  0.  0. ]
 [0.  0.  0.  0.  0.  0.1 0.  0.  0.  0.  0.  0.  0.8 0.  0.  0.  0. ]
 [0.  0.  0.  0.  0.  0.  0.  0.  0.  0.  0.  0.  0.  0.9 0.  0.  0. ]
 [0.  0.  0.  0.  0.  0.  0.  0.  0.  0.  0.  0.  0.  0.  0.9 0.  0. ]
 [0.  0.  0.  0.  0.  0.  0.  0.  0.  0.  0.  0.  0.  0.  0.  0.9 0. ]
 [0.2 0.  0.  0.  0.  0.  0.  0.  0.  0.  0.  0.  0.  0.  0.  0.  0.8]]
Accuray: 0.868
Recall: 0.867
F1-Score: 0.868
                precision    recall  f1-score   support

           tap       0.74      0.78      0.76       126
        twotap       0.94      0.88      0.91       148
     swipeleft       0.96      0.79      0.87       130
    swiperight       0.96      0.83      0.89       127
       swipeup       0.80      0.91      0.85       128
     swipedown       0.73      0.92      0.81       135
    twoswipeup       0.95      0.88      0.91       164
  twoswipedown       0.96      0.89      0.93       169
        circle       0.95      0.78      0.86       166
 arrowheadleft       0.89      0.88      0.89       154
arrowheadright       0.93      0.82      0.87       152
     checkmark       0.92      0.95      0.93       147
    flashlight       0.82      0.85      0.83       164
             l       0.81      0.94      0.87       159
     lmirrored       0.72      0.93      0.81       163
    screenshot       0.85      0.91      0.88       160
        rotate       0.96      0.80      0.87       177

     micro avg       0.87      0.87      0.87      2569
     macro avg       0.88      0.87      0.87      2569
  weighted avg       0.88      0.87      0.87      2569

In [ ]:

Export

In [11]:
output_node_prefix = "output_node"
num_output = 1
pred = [None]*num_output
pred_node_names = [None]*num_output
for i in range(num_output):
    pred_node_names[i] = output_node_prefix+str(i)
    pred[i] = tf.identity(model.outputs[i], name=pred_node_names[i])
print('output nodes names are: ', pred_node_names)
output_node_prefix = pred_node_names[0]
output nodes names are:  ['output_node0']
In [12]:
model.inputs[0]
Out[12]:
<tf.Tensor 'time_distributed_10_input:0' shape=(?, 50, 27, 15, 1) dtype=float32>
In [13]:
#sess = K.get_session()
In [14]:
output_path = "./Models/"
output_file = "LSTM.pb"
In [15]:
g = tf.GraphDef()
g.ParseFromString(open(output_path + output_file, "rb").read())
s = ""
for n in g.node:
    s =s + str(n.name) + "\n"

print(s)
time_distributed_10_input
time_distributed_10/kernel
time_distributed_10/kernel/read
time_distributed_10/bias
time_distributed_10/bias/read
time_distributed_10/Reshape/shape
time_distributed_10/Reshape
time_distributed_10/convolution
time_distributed_10/BiasAdd
time_distributed_10/Relu
time_distributed_10/Reshape_1/shape
time_distributed_10/Reshape_1
time_distributed_11/kernel
time_distributed_11/kernel/read
time_distributed_11/bias
time_distributed_11/bias/read
time_distributed_11/Reshape/shape
time_distributed_11/Reshape
time_distributed_11/convolution
time_distributed_11/BiasAdd
time_distributed_11/Relu
time_distributed_11/Reshape_1/shape
time_distributed_11/Reshape_1
time_distributed_12/Reshape/shape
time_distributed_12/Reshape
time_distributed_12/MaxPool
time_distributed_12/Reshape_1/shape
time_distributed_12/Reshape_1
time_distributed_13/Reshape/shape
time_distributed_13/Reshape
time_distributed_13/keras_learning_phase/input
time_distributed_13/keras_learning_phase
time_distributed_13/cond/Switch
time_distributed_13/cond/switch_t
time_distributed_13/cond/pred_id
time_distributed_13/cond/mul/y
time_distributed_13/cond/mul
time_distributed_13/cond/mul/Switch
time_distributed_13/cond/dropout/keep_prob
time_distributed_13/cond/dropout/Shape
time_distributed_13/cond/dropout/random_uniform/min
time_distributed_13/cond/dropout/random_uniform/max
time_distributed_13/cond/dropout/random_uniform/RandomUniform
time_distributed_13/cond/dropout/random_uniform/sub
time_distributed_13/cond/dropout/random_uniform/mul
time_distributed_13/cond/dropout/random_uniform
time_distributed_13/cond/dropout/add
time_distributed_13/cond/dropout/Floor
time_distributed_13/cond/dropout/div
time_distributed_13/cond/dropout/mul
time_distributed_13/cond/Switch_1
time_distributed_13/cond/Merge
time_distributed_13/Reshape_1/shape
time_distributed_13/Reshape_1
time_distributed_14/kernel
time_distributed_14/kernel/read
time_distributed_14/bias
time_distributed_14/bias/read
time_distributed_14/Reshape/shape
time_distributed_14/Reshape
time_distributed_14/convolution
time_distributed_14/BiasAdd
time_distributed_14/Relu
time_distributed_14/Reshape_1/shape
time_distributed_14/Reshape_1
time_distributed_15/kernel
time_distributed_15/kernel/read
time_distributed_15/bias
time_distributed_15/bias/read
time_distributed_15/Reshape/shape
time_distributed_15/Reshape
time_distributed_15/convolution
time_distributed_15/BiasAdd
time_distributed_15/Relu
time_distributed_15/Reshape_1/shape
time_distributed_15/Reshape_1
time_distributed_16/Reshape/shape
time_distributed_16/Reshape
time_distributed_16/MaxPool
time_distributed_16/Reshape_1/shape
time_distributed_16/Reshape_1
time_distributed_17/Reshape/shape
time_distributed_17/Reshape
time_distributed_17/cond/Switch
time_distributed_17/cond/switch_t
time_distributed_17/cond/pred_id
time_distributed_17/cond/mul/y
time_distributed_17/cond/mul
time_distributed_17/cond/mul/Switch
time_distributed_17/cond/dropout/keep_prob
time_distributed_17/cond/dropout/Shape
time_distributed_17/cond/dropout/random_uniform/min
time_distributed_17/cond/dropout/random_uniform/max
time_distributed_17/cond/dropout/random_uniform/RandomUniform
time_distributed_17/cond/dropout/random_uniform/sub
time_distributed_17/cond/dropout/random_uniform/mul
time_distributed_17/cond/dropout/random_uniform
time_distributed_17/cond/dropout/add
time_distributed_17/cond/dropout/Floor
time_distributed_17/cond/dropout/div
time_distributed_17/cond/dropout/mul
time_distributed_17/cond/Switch_1
time_distributed_17/cond/Merge
time_distributed_17/Reshape_1/shape
time_distributed_17/Reshape_1
time_distributed_18/Reshape/shape
time_distributed_18/Reshape
time_distributed_18/Shape
time_distributed_18/strided_slice/stack
time_distributed_18/strided_slice/stack_1
time_distributed_18/strided_slice/stack_2
time_distributed_18/strided_slice
time_distributed_18/Const
time_distributed_18/Prod
time_distributed_18/stack/0
time_distributed_18/stack
time_distributed_18/Reshape_1
time_distributed_18/Reshape_2/shape
time_distributed_18/Reshape_2
lstm_3/kernel
lstm_3/kernel/read
lstm_3/recurrent_kernel
lstm_3/recurrent_kernel/read
lstm_3/bias
lstm_3/bias/read
lstm_3/strided_slice/stack
lstm_3/strided_slice/stack_1
lstm_3/strided_slice/stack_2
lstm_3/strided_slice
lstm_3/strided_slice_1/stack
lstm_3/strided_slice_1/stack_1
lstm_3/strided_slice_1/stack_2
lstm_3/strided_slice_1
lstm_3/strided_slice_2/stack
lstm_3/strided_slice_2/stack_1
lstm_3/strided_slice_2/stack_2
lstm_3/strided_slice_2
lstm_3/strided_slice_3/stack
lstm_3/strided_slice_3/stack_1
lstm_3/strided_slice_3/stack_2
lstm_3/strided_slice_3
lstm_3/strided_slice_4/stack
lstm_3/strided_slice_4/stack_1
lstm_3/strided_slice_4/stack_2
lstm_3/strided_slice_4
lstm_3/strided_slice_5/stack
lstm_3/strided_slice_5/stack_1
lstm_3/strided_slice_5/stack_2
lstm_3/strided_slice_5
lstm_3/strided_slice_6/stack
lstm_3/strided_slice_6/stack_1
lstm_3/strided_slice_6/stack_2
lstm_3/strided_slice_6
lstm_3/strided_slice_7/stack
lstm_3/strided_slice_7/stack_1
lstm_3/strided_slice_7/stack_2
lstm_3/strided_slice_7
lstm_3/strided_slice_8/stack
lstm_3/strided_slice_8/stack_1
lstm_3/strided_slice_8/stack_2
lstm_3/strided_slice_8
lstm_3/strided_slice_9/stack
lstm_3/strided_slice_9/stack_1
lstm_3/strided_slice_9/stack_2
lstm_3/strided_slice_9
lstm_3/strided_slice_10/stack
lstm_3/strided_slice_10/stack_1
lstm_3/strided_slice_10/stack_2
lstm_3/strided_slice_10
lstm_3/strided_slice_11/stack
lstm_3/strided_slice_11/stack_1
lstm_3/strided_slice_11/stack_2
lstm_3/strided_slice_11
lstm_3/zeros_like
lstm_3/Sum/reduction_indices
lstm_3/Sum
lstm_3/ExpandDims/dim
lstm_3/ExpandDims
lstm_3/Tile/multiples
lstm_3/Tile
lstm_3/Tile_1/multiples
lstm_3/Tile_1
lstm_3/transpose/perm
lstm_3/transpose
lstm_3/Shape
lstm_3/strided_slice_12/stack
lstm_3/strided_slice_12/stack_1
lstm_3/strided_slice_12/stack_2
lstm_3/strided_slice_12
lstm_3/TensorArray
lstm_3/TensorArray_1
lstm_3/TensorArrayUnstack/Shape
lstm_3/TensorArrayUnstack/strided_slice/stack
lstm_3/TensorArrayUnstack/strided_slice/stack_1
lstm_3/TensorArrayUnstack/strided_slice/stack_2
lstm_3/TensorArrayUnstack/strided_slice
lstm_3/TensorArrayUnstack/range/start
lstm_3/TensorArrayUnstack/range/delta
lstm_3/TensorArrayUnstack/range
lstm_3/TensorArrayUnstack/TensorArrayScatter/TensorArrayScatterV3
lstm_3/time
lstm_3/while/maximum_iterations
lstm_3/while/iteration_counter
lstm_3/while/Enter
lstm_3/while/Enter_1
lstm_3/while/Enter_2
lstm_3/while/Enter_3
lstm_3/while/Enter_4
lstm_3/while/Merge
lstm_3/while/Merge_1
lstm_3/while/Merge_2
lstm_3/while/Merge_3
lstm_3/while/Merge_4
lstm_3/while/Less
lstm_3/while/Less/Enter
lstm_3/while/Less_1
lstm_3/while/Less_1/Enter
lstm_3/while/LogicalAnd
lstm_3/while/LoopCond
lstm_3/while/Switch
lstm_3/while/Switch_1
lstm_3/while/Switch_2
lstm_3/while/Switch_3
lstm_3/while/Switch_4
lstm_3/while/Identity
lstm_3/while/Identity_1
lstm_3/while/Identity_2
lstm_3/while/Identity_3
lstm_3/while/Identity_4
lstm_3/while/add/y
lstm_3/while/add
lstm_3/while/TensorArrayReadV3
lstm_3/while/TensorArrayReadV3/Enter
lstm_3/while/TensorArrayReadV3/Enter_1
lstm_3/while/MatMul
lstm_3/while/MatMul/Enter
lstm_3/while/MatMul_1
lstm_3/while/MatMul_1/Enter
lstm_3/while/MatMul_2
lstm_3/while/MatMul_2/Enter
lstm_3/while/MatMul_3
lstm_3/while/MatMul_3/Enter
lstm_3/while/BiasAdd
lstm_3/while/BiasAdd/Enter
lstm_3/while/BiasAdd_1
lstm_3/while/BiasAdd_1/Enter
lstm_3/while/BiasAdd_2
lstm_3/while/BiasAdd_2/Enter
lstm_3/while/BiasAdd_3
lstm_3/while/BiasAdd_3/Enter
lstm_3/while/MatMul_4
lstm_3/while/MatMul_4/Enter
lstm_3/while/add_1
lstm_3/while/mul/x
lstm_3/while/mul
lstm_3/while/add_2/y
lstm_3/while/add_2
lstm_3/while/Const
lstm_3/while/Const_1
lstm_3/while/clip_by_value/Minimum
lstm_3/while/clip_by_value
lstm_3/while/MatMul_5
lstm_3/while/MatMul_5/Enter
lstm_3/while/add_3
lstm_3/while/mul_1/x
lstm_3/while/mul_1
lstm_3/while/add_4/y
lstm_3/while/add_4
lstm_3/while/Const_2
lstm_3/while/Const_3
lstm_3/while/clip_by_value_1/Minimum
lstm_3/while/clip_by_value_1
lstm_3/while/mul_2
lstm_3/while/MatMul_6
lstm_3/while/MatMul_6/Enter
lstm_3/while/add_5
lstm_3/while/Tanh
lstm_3/while/mul_3
lstm_3/while/add_6
lstm_3/while/MatMul_7
lstm_3/while/MatMul_7/Enter
lstm_3/while/add_7
lstm_3/while/mul_4/x
lstm_3/while/mul_4
lstm_3/while/add_8/y
lstm_3/while/add_8
lstm_3/while/Const_4
lstm_3/while/Const_5
lstm_3/while/clip_by_value_2/Minimum
lstm_3/while/clip_by_value_2
lstm_3/while/Tanh_1
lstm_3/while/mul_5
lstm_3/while/TensorArrayWrite/TensorArrayWriteV3
lstm_3/while/TensorArrayWrite/TensorArrayWriteV3/Enter
lstm_3/while/add_9/y
lstm_3/while/add_9
lstm_3/while/NextIteration
lstm_3/while/NextIteration_1
lstm_3/while/NextIteration_2
lstm_3/while/NextIteration_3
lstm_3/while/NextIteration_4
lstm_3/while/Exit_2
lstm_3/TensorArrayStack/TensorArraySizeV3
lstm_3/TensorArrayStack/range/start
lstm_3/TensorArrayStack/range/delta
lstm_3/TensorArrayStack/range
lstm_3/TensorArrayStack/TensorArrayGatherV3
lstm_3/transpose_1/perm
lstm_3/transpose_1
dropout_7/cond/Switch
dropout_7/cond/switch_t
dropout_7/cond/pred_id
dropout_7/cond/mul/y
dropout_7/cond/mul
dropout_7/cond/mul/Switch
dropout_7/cond/dropout/keep_prob
dropout_7/cond/dropout/Shape
dropout_7/cond/dropout/random_uniform/min
dropout_7/cond/dropout/random_uniform/max
dropout_7/cond/dropout/random_uniform/RandomUniform
dropout_7/cond/dropout/random_uniform/sub
dropout_7/cond/dropout/random_uniform/mul
dropout_7/cond/dropout/random_uniform
dropout_7/cond/dropout/add
dropout_7/cond/dropout/Floor
dropout_7/cond/dropout/div
dropout_7/cond/dropout/mul
dropout_7/cond/Switch_1
dropout_7/cond/Merge
lstm_4/kernel
lstm_4/kernel/read
lstm_4/recurrent_kernel
lstm_4/recurrent_kernel/read
lstm_4/bias
lstm_4/bias/read
lstm_4/strided_slice/stack
lstm_4/strided_slice/stack_1
lstm_4/strided_slice/stack_2
lstm_4/strided_slice
lstm_4/strided_slice_1/stack
lstm_4/strided_slice_1/stack_1
lstm_4/strided_slice_1/stack_2
lstm_4/strided_slice_1
lstm_4/strided_slice_2/stack
lstm_4/strided_slice_2/stack_1
lstm_4/strided_slice_2/stack_2
lstm_4/strided_slice_2
lstm_4/strided_slice_3/stack
lstm_4/strided_slice_3/stack_1
lstm_4/strided_slice_3/stack_2
lstm_4/strided_slice_3
lstm_4/strided_slice_4/stack
lstm_4/strided_slice_4/stack_1
lstm_4/strided_slice_4/stack_2
lstm_4/strided_slice_4
lstm_4/strided_slice_5/stack
lstm_4/strided_slice_5/stack_1
lstm_4/strided_slice_5/stack_2
lstm_4/strided_slice_5
lstm_4/strided_slice_6/stack
lstm_4/strided_slice_6/stack_1
lstm_4/strided_slice_6/stack_2
lstm_4/strided_slice_6
lstm_4/strided_slice_7/stack
lstm_4/strided_slice_7/stack_1
lstm_4/strided_slice_7/stack_2
lstm_4/strided_slice_7
lstm_4/strided_slice_8/stack
lstm_4/strided_slice_8/stack_1
lstm_4/strided_slice_8/stack_2
lstm_4/strided_slice_8
lstm_4/strided_slice_9/stack
lstm_4/strided_slice_9/stack_1
lstm_4/strided_slice_9/stack_2
lstm_4/strided_slice_9
lstm_4/strided_slice_10/stack
lstm_4/strided_slice_10/stack_1
lstm_4/strided_slice_10/stack_2
lstm_4/strided_slice_10
lstm_4/strided_slice_11/stack
lstm_4/strided_slice_11/stack_1
lstm_4/strided_slice_11/stack_2
lstm_4/strided_slice_11
lstm_4/zeros_like
lstm_4/Sum/reduction_indices
lstm_4/Sum
lstm_4/ExpandDims/dim
lstm_4/ExpandDims
lstm_4/Tile/multiples
lstm_4/Tile
lstm_4/Tile_1/multiples
lstm_4/Tile_1
lstm_4/transpose/perm
lstm_4/transpose
lstm_4/Shape
lstm_4/strided_slice_12/stack
lstm_4/strided_slice_12/stack_1
lstm_4/strided_slice_12/stack_2
lstm_4/strided_slice_12
lstm_4/TensorArray
lstm_4/TensorArray_1
lstm_4/TensorArrayUnstack/Shape
lstm_4/TensorArrayUnstack/strided_slice/stack
lstm_4/TensorArrayUnstack/strided_slice/stack_1
lstm_4/TensorArrayUnstack/strided_slice/stack_2
lstm_4/TensorArrayUnstack/strided_slice
lstm_4/TensorArrayUnstack/range/start
lstm_4/TensorArrayUnstack/range/delta
lstm_4/TensorArrayUnstack/range
lstm_4/TensorArrayUnstack/TensorArrayScatter/TensorArrayScatterV3
lstm_4/time
lstm_4/while/maximum_iterations
lstm_4/while/iteration_counter
lstm_4/while/Enter
lstm_4/while/Enter_1
lstm_4/while/Enter_2
lstm_4/while/Enter_3
lstm_4/while/Enter_4
lstm_4/while/Merge
lstm_4/while/Merge_1
lstm_4/while/Merge_2
lstm_4/while/Merge_3
lstm_4/while/Merge_4
lstm_4/while/Less
lstm_4/while/Less/Enter
lstm_4/while/Less_1
lstm_4/while/Less_1/Enter
lstm_4/while/LogicalAnd
lstm_4/while/LoopCond
lstm_4/while/Switch
lstm_4/while/Switch_1
lstm_4/while/Switch_2
lstm_4/while/Switch_3
lstm_4/while/Switch_4
lstm_4/while/Identity
lstm_4/while/Identity_1
lstm_4/while/Identity_2
lstm_4/while/Identity_3
lstm_4/while/Identity_4
lstm_4/while/add/y
lstm_4/while/add
lstm_4/while/TensorArrayReadV3
lstm_4/while/TensorArrayReadV3/Enter
lstm_4/while/TensorArrayReadV3/Enter_1
lstm_4/while/MatMul
lstm_4/while/MatMul/Enter
lstm_4/while/MatMul_1
lstm_4/while/MatMul_1/Enter
lstm_4/while/MatMul_2
lstm_4/while/MatMul_2/Enter
lstm_4/while/MatMul_3
lstm_4/while/MatMul_3/Enter
lstm_4/while/BiasAdd
lstm_4/while/BiasAdd/Enter
lstm_4/while/BiasAdd_1
lstm_4/while/BiasAdd_1/Enter
lstm_4/while/BiasAdd_2
lstm_4/while/BiasAdd_2/Enter
lstm_4/while/BiasAdd_3
lstm_4/while/BiasAdd_3/Enter
lstm_4/while/MatMul_4
lstm_4/while/MatMul_4/Enter
lstm_4/while/add_1
lstm_4/while/mul/x
lstm_4/while/mul
lstm_4/while/add_2/y
lstm_4/while/add_2
lstm_4/while/Const
lstm_4/while/Const_1
lstm_4/while/clip_by_value/Minimum
lstm_4/while/clip_by_value
lstm_4/while/MatMul_5
lstm_4/while/MatMul_5/Enter
lstm_4/while/add_3
lstm_4/while/mul_1/x
lstm_4/while/mul_1
lstm_4/while/add_4/y
lstm_4/while/add_4
lstm_4/while/Const_2
lstm_4/while/Const_3
lstm_4/while/clip_by_value_1/Minimum
lstm_4/while/clip_by_value_1
lstm_4/while/mul_2
lstm_4/while/MatMul_6
lstm_4/while/MatMul_6/Enter
lstm_4/while/add_5
lstm_4/while/Tanh
lstm_4/while/mul_3
lstm_4/while/add_6
lstm_4/while/MatMul_7
lstm_4/while/MatMul_7/Enter
lstm_4/while/add_7
lstm_4/while/mul_4/x
lstm_4/while/mul_4
lstm_4/while/add_8/y
lstm_4/while/add_8
lstm_4/while/Const_4
lstm_4/while/Const_5
lstm_4/while/clip_by_value_2/Minimum
lstm_4/while/clip_by_value_2
lstm_4/while/Tanh_1
lstm_4/while/mul_5
lstm_4/while/TensorArrayWrite/TensorArrayWriteV3
lstm_4/while/TensorArrayWrite/TensorArrayWriteV3/Enter
lstm_4/while/add_9/y
lstm_4/while/add_9
lstm_4/while/NextIteration
lstm_4/while/NextIteration_1
lstm_4/while/NextIteration_2
lstm_4/while/NextIteration_3
lstm_4/while/NextIteration_4
lstm_4/while/Exit_1
lstm_4/while/Exit_2
lstm_4/sub/y
lstm_4/sub
lstm_4/TensorArrayReadV3
dropout_8/cond/Switch
dropout_8/cond/switch_t
dropout_8/cond/pred_id
dropout_8/cond/mul/y
dropout_8/cond/mul
dropout_8/cond/mul/Switch
dropout_8/cond/dropout/keep_prob
dropout_8/cond/dropout/Shape
dropout_8/cond/dropout/random_uniform/min
dropout_8/cond/dropout/random_uniform/max
dropout_8/cond/dropout/random_uniform/RandomUniform
dropout_8/cond/dropout/random_uniform/sub
dropout_8/cond/dropout/random_uniform/mul
dropout_8/cond/dropout/random_uniform
dropout_8/cond/dropout/add
dropout_8/cond/dropout/Floor
dropout_8/cond/dropout/div
dropout_8/cond/dropout/mul
dropout_8/cond/Switch_1
dropout_8/cond/Merge
dense_2/kernel
dense_2/kernel/read
dense_2/bias
dense_2/bias/read
dense_2/MatMul
dense_2/BiasAdd
dense_2/Softmax
output_node0

In [16]:
from tensorflow.python.framework import graph_util
from tensorflow.python.framework import graph_io
constant_graph = graph_util.convert_variables_to_constants(sess, sess.graph.as_graph_def(), pred_node_names)

graph_io.write_graph(constant_graph, output_path, output_file, as_text=False)

print('Saved the freezed graph at: ', (output_path + output_file))
INFO:tensorflow:Froze 16 variables.
INFO:tensorflow:Converted 16 variables to const ops.
Saved the freezed graph at:  ./Models/LSTM.pb
In [ ]:

In [ ]: