{ "cells": [ { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "Using TensorFlow backend.\n" ] } ], "source": [ "## USE for Multi GPU Systems\n", "#import os\n", "#os.environ[\"CUDA_VISIBLE_DEVICES\"]=\"0\"\n", "\n", "import numpy as np\n", "import matplotlib.pyplot as plt\n", "import pandas as pd\n", "import math\n", "\n", "import tensorflow as tf\n", "\n", "%matplotlib inline\n", "\n", "# Importing SK-learn to calculate precision and recall\n", "import sklearn\n", "from sklearn import metrics \n", "\n", "# Used for graph export\n", "from tensorflow.python.framework import graph_util\n", "from tensorflow.python.framework import graph_io\n", "from keras import backend as K\n", "\n", "\n", "target_names = [\"tap\", \"twotap\", \"swipeleft\", \"swiperight\", \"swipeup\", \"swipedown\", \"twoswipeup\", \"twoswipedown\", \"circle\", \"arrowheadleft\", \"arrowheadright\", \"checkmark\", \"flashlight\", \"l\", \"lmirrored\", \"screenshot\", \"rotate\"]" ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "[ 1 2 9 6 4 14 17 16 12 3 10 18 5] [13 8 11 15 7]\n" ] } ], "source": [ "df = pd.read_pickle(\"DataStudyCollection/df_lstm_norm50.pkl\")\n", "\n", "lst = df.userID.unique()\n", "np.random.seed(42)\n", "np.random.shuffle(lst)\n", "test_ids = lst[-5:]\n", "train_ids = lst[:-5]\n", "print(train_ids, test_ids)\n", "df.TaskID = df.TaskID % 17\n", "\n", "x = np.concatenate(df.Blobs.values).reshape(-1,50,27,15,1)\n", "x = x / 255.0\n", "\n", "# convert class vectors to binary class matrices (one-hot notation)\n", "num_classes = len(df.TaskID.unique())\n", "y = utils.to_categorical(df.TaskID, num_classes)\n", "\n", "labels = sorted(df.TaskID.unique())" ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [], "source": [ "# If GPU is not available: \n", "# GPU_USE = '/cpu:0'\n", "#config = tf.ConfigProto(device_count = {\"GPU\": 1})\n", "\n", "\n", "# If GPU is available: \n", "config = tf.ConfigProto()\n", "config.log_device_placement = True\n", "config.allow_soft_placement = True\n", "config.gpu_options.allow_growth=True\n", "config.gpu_options.allocator_type = 'BFC'\n", "\n", "# Limit the maximum memory used\n", "config.gpu_options.per_process_gpu_memory_fraction = 0.3\n", "\n", "# set session config\n", "sess = tf.Session(config=config)\n", "tf.keras.backend.set_session(sess)" ] }, { "cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [], "source": [ "model = tf.keras.models.load_model('./ModelSnapshots/LSTM-v2-00398.h5')" ] }, { "cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "CPU times: user 47.2 s, sys: 6.47 s, total: 53.6 s\n", "Wall time: 30.9 s\n" ] } ], "source": [ "%%time\n", "lst = []\n", "batch = 100\n", "for i in range(0, len(x), batch):\n", " _x = x[i : i+batch]\n", " lst.extend(model.predict(_x))" ] }, { "cell_type": "code", "execution_count": 6, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "9193" ] }, "execution_count": 6, "metadata": {}, "output_type": "execute_result" } ], "source": [ "len(df)" ] }, { "cell_type": "code", "execution_count": 7, "metadata": {}, "outputs": [], "source": [ "df[\"TaskIDPred\"] = lst\n", "df.TaskIDPred = df.TaskIDPred.apply(lambda x: np.argmax(x))" ] }, { "cell_type": "code", "execution_count": 8, "metadata": {}, "outputs": [], "source": [ "df_train = df[df.userID.isin(train_ids)]\n", "df_test = df[df.userID.isin(test_ids)]" ] }, { "cell_type": "code", "execution_count": 9, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "[[323 0 0 0 0 0 0 0 0 0 1 0 1 0 0 0 11]\n", " [ 1 443 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0]\n", " [ 1 0 333 1 0 0 0 0 0 0 0 0 0 0 2 0 0]\n", " [ 3 0 0 317 0 0 0 0 0 0 0 0 0 1 0 0 0]\n", " [ 1 0 0 0 321 1 0 1 0 0 0 0 1 0 0 0 0]\n", " [ 1 0 0 0 0 327 0 0 0 0 0 0 1 1 0 1 3]\n", " [ 0 0 0 0 0 0 431 2 0 0 0 0 0 0 1 0 0]\n", " [ 0 0 0 0 0 1 1 436 0 0 0 0 0 0 0 0 0]\n", " [ 0 0 0 1 0 0 0 0 396 1 0 3 0 1 2 0 0]\n", " [ 1 1 6 1 0 0 0 0 0 374 0 3 0 2 0 0 0]\n", " [ 0 0 0 4 0 1 0 0 0 0 380 0 0 0 1 2 0]\n", " [ 0 0 0 0 0 0 0 0 0 0 0 364 0 0 0 0 0]\n", " [ 0 0 0 2 4 2 0 0 0 0 0 0 394 0 0 0 1]\n", " [ 0 0 0 6 0 3 0 0 1 3 0 4 1 383 0 0 0]\n", " [ 0 0 2 0 0 2 0 0 0 0 1 0 2 0 407 0 0]\n", " [ 0 0 0 0 0 0 0 0 1 0 5 0 0 0 20 376 0]\n", " [ 12 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 477]]\n", "[[1. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. ]\n", " [0. 1. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. ]\n", " [0. 0. 1. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. ]\n", " [0. 0. 0. 1. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. ]\n", " [0. 0. 0. 0. 1. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. ]\n", " [0. 0. 0. 0. 0. 1. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. ]\n", " [0. 0. 0. 0. 0. 0. 1. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. ]\n", " [0. 0. 0. 0. 0. 0. 0. 1. 0. 0. 0. 0. 0. 0. 0. 0. 0. ]\n", " [0. 0. 0. 0. 0. 0. 0. 0. 1. 0. 0. 0. 0. 0. 0. 0. 0. ]\n", " [0. 0. 0. 0. 0. 0. 0. 0. 0. 1. 0. 0. 0. 0. 0. 0. 0. ]\n", " [0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 1. 0. 0. 0. 0. 0. 0. ]\n", " [0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 1. 0. 0. 0. 0. 0. ]\n", " [0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 1. 0. 0. 0. 0. ]\n", " [0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 1. 0. 0. 0. ]\n", " [0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 1. 0. 0. ]\n", " [0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.9 0. ]\n", " [0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 1. ]]\n", "Accuray: 0.979\n", "Recall: 0.979\n", "F1-Score: 0.978\n", " precision recall f1-score support\n", "\n", " tap 0.94 0.96 0.95 336\n", " twotap 1.00 1.00 1.00 445\n", " swipeleft 0.98 0.99 0.98 337\n", " swiperight 0.95 0.99 0.97 321\n", " swipeup 0.99 0.99 0.99 325\n", " swipedown 0.97 0.98 0.97 334\n", " twoswipeup 1.00 0.99 0.99 434\n", " twoswipedown 0.99 1.00 0.99 438\n", " circle 0.99 0.98 0.99 404\n", " arrowheadleft 0.99 0.96 0.98 388\n", "arrowheadright 0.98 0.98 0.98 388\n", " checkmark 0.97 1.00 0.99 364\n", " flashlight 0.98 0.98 0.98 403\n", " l 0.99 0.96 0.97 401\n", " lmirrored 0.94 0.98 0.96 414\n", " screenshot 0.99 0.94 0.96 402\n", " rotate 0.97 0.97 0.97 490\n", "\n", " micro avg 0.98 0.98 0.98 6624\n", " macro avg 0.98 0.98 0.98 6624\n", " weighted avg 0.98 0.98 0.98 6624\n", "\n" ] } ], "source": [ "\n", "print(sklearn.metrics.confusion_matrix(df_train.TaskID.values, df_train.TaskIDPred.values, labels=labels))\n", "cm = sklearn.metrics.confusion_matrix(df_train.TaskID.values, df_train.TaskIDPred.values, labels=labels)\n", "cm = cm.astype('float') / cm.sum(axis=1)[:, np.newaxis]\n", "print(np.round(cm,1))\n", "print(\"Accuray: %.3f\" % sklearn.metrics.accuracy_score(df_train.TaskID.values, df_train.TaskIDPred.values))\n", "print(\"Recall: %.3f\" % metrics.recall_score(df_train.TaskID.values, df_train.TaskIDPred.values, average='macro'))\n", "#print(\"Precision: %.2f\" % metrics.average_precision_score(df_train.TaskID.values, df_train.TaskIDPred.values))\n", "print(\"F1-Score: %.3f\" % metrics.f1_score(df_train.TaskID.values, df_train.TaskIDPred.values, average='macro'))\n", "print(sklearn.metrics.classification_report(df_train.TaskID.values, df_train.TaskIDPred.values, target_names=target_names))" ] }, { "cell_type": "code", "execution_count": 10, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "[[ 98 5 1 1 0 7 0 5 0 0 0 0 5 0 0 0 4]\n", " [ 2 130 0 0 4 0 6 1 0 0 0 0 4 0 0 0 1]\n", " [ 0 0 103 0 0 0 0 0 0 0 0 0 0 0 27 0 0]\n", " [ 0 0 0 106 0 0 0 0 0 2 0 1 1 17 0 0 0]\n", " [ 0 0 0 0 116 0 0 0 2 0 0 0 10 0 0 0 0]\n", " [ 0 0 0 0 1 124 0 0 0 0 0 1 2 0 6 0 1]\n", " [ 0 0 0 0 17 0 144 0 0 0 0 0 3 0 0 0 0]\n", " [ 0 0 0 0 0 18 0 151 0 0 0 0 0 0 0 0 0]\n", " [ 0 3 1 0 0 0 1 0 130 8 0 4 0 4 14 1 0]\n", " [ 0 0 1 0 0 0 0 0 0 136 0 3 1 11 0 2 0]\n", " [ 0 0 0 0 0 1 0 0 0 1 124 0 0 0 4 22 0]\n", " [ 0 0 0 2 1 0 0 0 2 1 0 140 1 0 0 0 0]\n", " [ 0 0 1 0 6 15 0 0 1 0 0 0 139 2 0 0 0]\n", " [ 0 0 0 0 0 3 0 0 0 2 0 2 2 149 1 0 0]\n", " [ 1 0 0 0 0 2 0 0 0 0 7 0 1 1 151 0 0]\n", " [ 0 0 0 1 0 0 0 0 2 3 2 0 0 0 6 146 0]\n", " [ 31 0 0 0 0 1 0 0 0 0 0 2 1 0 0 0 142]]\n", "[[0.8 0. 0. 0. 0. 0.1 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. ]\n", " [0. 0.9 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. ]\n", " [0. 0. 0.8 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.2 0. 0. ]\n", " [0. 0. 0. 0.8 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.1 0. 0. 0. ]\n", " [0. 0. 0. 0. 0.9 0. 0. 0. 0. 0. 0. 0. 0.1 0. 0. 0. 0. ]\n", " [0. 0. 0. 0. 0. 0.9 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. ]\n", " [0. 0. 0. 0. 0.1 0. 0.9 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. ]\n", " [0. 0. 0. 0. 0. 0.1 0. 0.9 0. 0. 0. 0. 0. 0. 0. 0. 0. ]\n", " [0. 0. 0. 0. 0. 0. 0. 0. 0.8 0. 0. 0. 0. 0. 0.1 0. 0. ]\n", " [0. 0. 0. 0. 0. 0. 0. 0. 0. 0.9 0. 0. 0. 0.1 0. 0. 0. ]\n", " [0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.8 0. 0. 0. 0. 0.1 0. ]\n", " [0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 1. 0. 0. 0. 0. 0. ]\n", " [0. 0. 0. 0. 0. 0.1 0. 0. 0. 0. 0. 0. 0.8 0. 0. 0. 0. ]\n", " [0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.9 0. 0. 0. ]\n", " [0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.9 0. 0. ]\n", " [0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.9 0. ]\n", " [0.2 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.8]]\n", "Accuray: 0.868\n", "Recall: 0.867\n", "F1-Score: 0.868\n", " precision recall f1-score support\n", "\n", " tap 0.74 0.78 0.76 126\n", " twotap 0.94 0.88 0.91 148\n", " swipeleft 0.96 0.79 0.87 130\n", " swiperight 0.96 0.83 0.89 127\n", " swipeup 0.80 0.91 0.85 128\n", " swipedown 0.73 0.92 0.81 135\n", " twoswipeup 0.95 0.88 0.91 164\n", " twoswipedown 0.96 0.89 0.93 169\n", " circle 0.95 0.78 0.86 166\n", " arrowheadleft 0.89 0.88 0.89 154\n", "arrowheadright 0.93 0.82 0.87 152\n", " checkmark 0.92 0.95 0.93 147\n", " flashlight 0.82 0.85 0.83 164\n", " l 0.81 0.94 0.87 159\n", " lmirrored 0.72 0.93 0.81 163\n", " screenshot 0.85 0.91 0.88 160\n", " rotate 0.96 0.80 0.87 177\n", "\n", " micro avg 0.87 0.87 0.87 2569\n", " macro avg 0.88 0.87 0.87 2569\n", " weighted avg 0.88 0.87 0.87 2569\n", "\n" ] } ], "source": [ "print(sklearn.metrics.confusion_matrix(df_test.TaskID.values, df_test.TaskIDPred.values, labels=labels))\n", "cm = sklearn.metrics.confusion_matrix(df_test.TaskID.values, df_test.TaskIDPred.values, labels=labels)\n", "cm = cm.astype('float') / cm.sum(axis=1)[:, np.newaxis]\n", "print(np.round(cm,1))\n", "print(\"Accuray: %.3f\" % sklearn.metrics.accuracy_score(df_test.TaskID.values, df_test.TaskIDPred.values))\n", "print(\"Recall: %.3f\" % metrics.recall_score(df_test.TaskID.values, df_test.TaskIDPred.values, average='macro'))\n", "#print(\"Precision: %.2f\" % metrics.average_precision_score(df_test.TaskID.values, df_test.TaskIDPred.values))\n", "print(\"F1-Score: %.3f\" % metrics.f1_score(df_test.TaskID.values, df_test.TaskIDPred.values, average='macro'))\n", "print(sklearn.metrics.classification_report(df_test.TaskID.values, df_test.TaskIDPred.values, target_names=target_names))" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# Export " ] }, { "cell_type": "code", "execution_count": 11, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "output nodes names are: ['output_node0']\n" ] } ], "source": [ "output_node_prefix = \"output_node\"\n", "num_output = 1\n", "pred = [None]*num_output\n", "pred_node_names = [None]*num_output\n", "for i in range(num_output):\n", " pred_node_names[i] = output_node_prefix+str(i)\n", " pred[i] = tf.identity(model.outputs[i], name=pred_node_names[i])\n", "print('output nodes names are: ', pred_node_names)\n", "output_node_prefix = pred_node_names[0]" ] }, { "cell_type": "code", "execution_count": 12, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 12, "metadata": {}, "output_type": "execute_result" } ], "source": [ "model.inputs[0]" ] }, { "cell_type": "code", "execution_count": 13, "metadata": {}, "outputs": [], "source": [ "#sess = K.get_session()" ] }, { "cell_type": "code", "execution_count": 14, "metadata": {}, "outputs": [], "source": [ "output_path = \"./Models/\"\n", "output_file = \"LSTM.pb\"" ] }, { "cell_type": "code", "execution_count": 15, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "time_distributed_10_input\n", "time_distributed_10/kernel\n", "time_distributed_10/kernel/read\n", "time_distributed_10/bias\n", "time_distributed_10/bias/read\n", "time_distributed_10/Reshape/shape\n", "time_distributed_10/Reshape\n", "time_distributed_10/convolution\n", "time_distributed_10/BiasAdd\n", "time_distributed_10/Relu\n", "time_distributed_10/Reshape_1/shape\n", "time_distributed_10/Reshape_1\n", "time_distributed_11/kernel\n", "time_distributed_11/kernel/read\n", "time_distributed_11/bias\n", "time_distributed_11/bias/read\n", "time_distributed_11/Reshape/shape\n", "time_distributed_11/Reshape\n", "time_distributed_11/convolution\n", "time_distributed_11/BiasAdd\n", "time_distributed_11/Relu\n", "time_distributed_11/Reshape_1/shape\n", "time_distributed_11/Reshape_1\n", "time_distributed_12/Reshape/shape\n", "time_distributed_12/Reshape\n", "time_distributed_12/MaxPool\n", "time_distributed_12/Reshape_1/shape\n", "time_distributed_12/Reshape_1\n", "time_distributed_13/Reshape/shape\n", "time_distributed_13/Reshape\n", "time_distributed_13/keras_learning_phase/input\n", "time_distributed_13/keras_learning_phase\n", "time_distributed_13/cond/Switch\n", "time_distributed_13/cond/switch_t\n", "time_distributed_13/cond/pred_id\n", "time_distributed_13/cond/mul/y\n", "time_distributed_13/cond/mul\n", "time_distributed_13/cond/mul/Switch\n", "time_distributed_13/cond/dropout/keep_prob\n", "time_distributed_13/cond/dropout/Shape\n", "time_distributed_13/cond/dropout/random_uniform/min\n", "time_distributed_13/cond/dropout/random_uniform/max\n", "time_distributed_13/cond/dropout/random_uniform/RandomUniform\n", "time_distributed_13/cond/dropout/random_uniform/sub\n", "time_distributed_13/cond/dropout/random_uniform/mul\n", "time_distributed_13/cond/dropout/random_uniform\n", "time_distributed_13/cond/dropout/add\n", "time_distributed_13/cond/dropout/Floor\n", "time_distributed_13/cond/dropout/div\n", "time_distributed_13/cond/dropout/mul\n", "time_distributed_13/cond/Switch_1\n", "time_distributed_13/cond/Merge\n", "time_distributed_13/Reshape_1/shape\n", "time_distributed_13/Reshape_1\n", "time_distributed_14/kernel\n", "time_distributed_14/kernel/read\n", "time_distributed_14/bias\n", "time_distributed_14/bias/read\n", "time_distributed_14/Reshape/shape\n", "time_distributed_14/Reshape\n", "time_distributed_14/convolution\n", "time_distributed_14/BiasAdd\n", "time_distributed_14/Relu\n", "time_distributed_14/Reshape_1/shape\n", "time_distributed_14/Reshape_1\n", "time_distributed_15/kernel\n", "time_distributed_15/kernel/read\n", "time_distributed_15/bias\n", "time_distributed_15/bias/read\n", "time_distributed_15/Reshape/shape\n", "time_distributed_15/Reshape\n", "time_distributed_15/convolution\n", "time_distributed_15/BiasAdd\n", "time_distributed_15/Relu\n", "time_distributed_15/Reshape_1/shape\n", "time_distributed_15/Reshape_1\n", "time_distributed_16/Reshape/shape\n", "time_distributed_16/Reshape\n", "time_distributed_16/MaxPool\n", "time_distributed_16/Reshape_1/shape\n", "time_distributed_16/Reshape_1\n", "time_distributed_17/Reshape/shape\n", "time_distributed_17/Reshape\n", "time_distributed_17/cond/Switch\n", "time_distributed_17/cond/switch_t\n", "time_distributed_17/cond/pred_id\n", "time_distributed_17/cond/mul/y\n", "time_distributed_17/cond/mul\n", "time_distributed_17/cond/mul/Switch\n", "time_distributed_17/cond/dropout/keep_prob\n", "time_distributed_17/cond/dropout/Shape\n", "time_distributed_17/cond/dropout/random_uniform/min\n", "time_distributed_17/cond/dropout/random_uniform/max\n", "time_distributed_17/cond/dropout/random_uniform/RandomUniform\n", "time_distributed_17/cond/dropout/random_uniform/sub\n", "time_distributed_17/cond/dropout/random_uniform/mul\n", "time_distributed_17/cond/dropout/random_uniform\n", "time_distributed_17/cond/dropout/add\n", "time_distributed_17/cond/dropout/Floor\n", "time_distributed_17/cond/dropout/div\n", "time_distributed_17/cond/dropout/mul\n", "time_distributed_17/cond/Switch_1\n", "time_distributed_17/cond/Merge\n", "time_distributed_17/Reshape_1/shape\n", "time_distributed_17/Reshape_1\n", "time_distributed_18/Reshape/shape\n", "time_distributed_18/Reshape\n", "time_distributed_18/Shape\n", "time_distributed_18/strided_slice/stack\n", "time_distributed_18/strided_slice/stack_1\n", "time_distributed_18/strided_slice/stack_2\n", "time_distributed_18/strided_slice\n", "time_distributed_18/Const\n", "time_distributed_18/Prod\n", "time_distributed_18/stack/0\n", "time_distributed_18/stack\n", "time_distributed_18/Reshape_1\n", "time_distributed_18/Reshape_2/shape\n", "time_distributed_18/Reshape_2\n", "lstm_3/kernel\n", "lstm_3/kernel/read\n", "lstm_3/recurrent_kernel\n", "lstm_3/recurrent_kernel/read\n", "lstm_3/bias\n", "lstm_3/bias/read\n", "lstm_3/strided_slice/stack\n", "lstm_3/strided_slice/stack_1\n", "lstm_3/strided_slice/stack_2\n", "lstm_3/strided_slice\n", "lstm_3/strided_slice_1/stack\n", "lstm_3/strided_slice_1/stack_1\n", "lstm_3/strided_slice_1/stack_2\n", "lstm_3/strided_slice_1\n", "lstm_3/strided_slice_2/stack\n", "lstm_3/strided_slice_2/stack_1\n", "lstm_3/strided_slice_2/stack_2\n", "lstm_3/strided_slice_2\n", "lstm_3/strided_slice_3/stack\n", "lstm_3/strided_slice_3/stack_1\n", "lstm_3/strided_slice_3/stack_2\n", "lstm_3/strided_slice_3\n", "lstm_3/strided_slice_4/stack\n", "lstm_3/strided_slice_4/stack_1\n", "lstm_3/strided_slice_4/stack_2\n", "lstm_3/strided_slice_4\n", "lstm_3/strided_slice_5/stack\n", "lstm_3/strided_slice_5/stack_1\n", "lstm_3/strided_slice_5/stack_2\n", "lstm_3/strided_slice_5\n", "lstm_3/strided_slice_6/stack\n", "lstm_3/strided_slice_6/stack_1\n", "lstm_3/strided_slice_6/stack_2\n", "lstm_3/strided_slice_6\n", "lstm_3/strided_slice_7/stack\n", "lstm_3/strided_slice_7/stack_1\n", "lstm_3/strided_slice_7/stack_2\n", "lstm_3/strided_slice_7\n", "lstm_3/strided_slice_8/stack\n", "lstm_3/strided_slice_8/stack_1\n", "lstm_3/strided_slice_8/stack_2\n", "lstm_3/strided_slice_8\n", "lstm_3/strided_slice_9/stack\n", "lstm_3/strided_slice_9/stack_1\n", "lstm_3/strided_slice_9/stack_2\n", "lstm_3/strided_slice_9\n", "lstm_3/strided_slice_10/stack\n", "lstm_3/strided_slice_10/stack_1\n", "lstm_3/strided_slice_10/stack_2\n", "lstm_3/strided_slice_10\n", "lstm_3/strided_slice_11/stack\n", "lstm_3/strided_slice_11/stack_1\n", "lstm_3/strided_slice_11/stack_2\n", "lstm_3/strided_slice_11\n", "lstm_3/zeros_like\n", "lstm_3/Sum/reduction_indices\n", "lstm_3/Sum\n", "lstm_3/ExpandDims/dim\n", "lstm_3/ExpandDims\n", "lstm_3/Tile/multiples\n", "lstm_3/Tile\n", "lstm_3/Tile_1/multiples\n", "lstm_3/Tile_1\n", "lstm_3/transpose/perm\n", "lstm_3/transpose\n", "lstm_3/Shape\n", "lstm_3/strided_slice_12/stack\n", "lstm_3/strided_slice_12/stack_1\n", "lstm_3/strided_slice_12/stack_2\n", "lstm_3/strided_slice_12\n", "lstm_3/TensorArray\n", "lstm_3/TensorArray_1\n", "lstm_3/TensorArrayUnstack/Shape\n", "lstm_3/TensorArrayUnstack/strided_slice/stack\n", "lstm_3/TensorArrayUnstack/strided_slice/stack_1\n", "lstm_3/TensorArrayUnstack/strided_slice/stack_2\n", "lstm_3/TensorArrayUnstack/strided_slice\n", "lstm_3/TensorArrayUnstack/range/start\n", "lstm_3/TensorArrayUnstack/range/delta\n", "lstm_3/TensorArrayUnstack/range\n", "lstm_3/TensorArrayUnstack/TensorArrayScatter/TensorArrayScatterV3\n", "lstm_3/time\n", "lstm_3/while/maximum_iterations\n", "lstm_3/while/iteration_counter\n", "lstm_3/while/Enter\n", "lstm_3/while/Enter_1\n", "lstm_3/while/Enter_2\n", "lstm_3/while/Enter_3\n", "lstm_3/while/Enter_4\n", "lstm_3/while/Merge\n", "lstm_3/while/Merge_1\n", "lstm_3/while/Merge_2\n", "lstm_3/while/Merge_3\n", "lstm_3/while/Merge_4\n", "lstm_3/while/Less\n", "lstm_3/while/Less/Enter\n", "lstm_3/while/Less_1\n", "lstm_3/while/Less_1/Enter\n", "lstm_3/while/LogicalAnd\n", "lstm_3/while/LoopCond\n", "lstm_3/while/Switch\n", "lstm_3/while/Switch_1\n", "lstm_3/while/Switch_2\n", "lstm_3/while/Switch_3\n", "lstm_3/while/Switch_4\n", "lstm_3/while/Identity\n", "lstm_3/while/Identity_1\n", "lstm_3/while/Identity_2\n", "lstm_3/while/Identity_3\n", "lstm_3/while/Identity_4\n", "lstm_3/while/add/y\n", "lstm_3/while/add\n", "lstm_3/while/TensorArrayReadV3\n", "lstm_3/while/TensorArrayReadV3/Enter\n", "lstm_3/while/TensorArrayReadV3/Enter_1\n", "lstm_3/while/MatMul\n", "lstm_3/while/MatMul/Enter\n", "lstm_3/while/MatMul_1\n", "lstm_3/while/MatMul_1/Enter\n", "lstm_3/while/MatMul_2\n", "lstm_3/while/MatMul_2/Enter\n", "lstm_3/while/MatMul_3\n", "lstm_3/while/MatMul_3/Enter\n", "lstm_3/while/BiasAdd\n", "lstm_3/while/BiasAdd/Enter\n", "lstm_3/while/BiasAdd_1\n", "lstm_3/while/BiasAdd_1/Enter\n", "lstm_3/while/BiasAdd_2\n", "lstm_3/while/BiasAdd_2/Enter\n", "lstm_3/while/BiasAdd_3\n", "lstm_3/while/BiasAdd_3/Enter\n", "lstm_3/while/MatMul_4\n", "lstm_3/while/MatMul_4/Enter\n", "lstm_3/while/add_1\n", "lstm_3/while/mul/x\n", "lstm_3/while/mul\n", "lstm_3/while/add_2/y\n", "lstm_3/while/add_2\n", "lstm_3/while/Const\n", "lstm_3/while/Const_1\n", "lstm_3/while/clip_by_value/Minimum\n", "lstm_3/while/clip_by_value\n", "lstm_3/while/MatMul_5\n", "lstm_3/while/MatMul_5/Enter\n", "lstm_3/while/add_3\n", "lstm_3/while/mul_1/x\n", "lstm_3/while/mul_1\n", "lstm_3/while/add_4/y\n", "lstm_3/while/add_4\n", "lstm_3/while/Const_2\n", "lstm_3/while/Const_3\n", "lstm_3/while/clip_by_value_1/Minimum\n", "lstm_3/while/clip_by_value_1\n", "lstm_3/while/mul_2\n", "lstm_3/while/MatMul_6\n", "lstm_3/while/MatMul_6/Enter\n", "lstm_3/while/add_5\n", "lstm_3/while/Tanh\n", "lstm_3/while/mul_3\n", "lstm_3/while/add_6\n", "lstm_3/while/MatMul_7\n", "lstm_3/while/MatMul_7/Enter\n", "lstm_3/while/add_7\n", "lstm_3/while/mul_4/x\n", "lstm_3/while/mul_4\n", "lstm_3/while/add_8/y\n", "lstm_3/while/add_8\n", "lstm_3/while/Const_4\n", "lstm_3/while/Const_5\n", "lstm_3/while/clip_by_value_2/Minimum\n", "lstm_3/while/clip_by_value_2\n", "lstm_3/while/Tanh_1\n", "lstm_3/while/mul_5\n", "lstm_3/while/TensorArrayWrite/TensorArrayWriteV3\n", "lstm_3/while/TensorArrayWrite/TensorArrayWriteV3/Enter\n", "lstm_3/while/add_9/y\n", "lstm_3/while/add_9\n", "lstm_3/while/NextIteration\n", "lstm_3/while/NextIteration_1\n", "lstm_3/while/NextIteration_2\n", "lstm_3/while/NextIteration_3\n", "lstm_3/while/NextIteration_4\n", "lstm_3/while/Exit_2\n", "lstm_3/TensorArrayStack/TensorArraySizeV3\n", "lstm_3/TensorArrayStack/range/start\n", "lstm_3/TensorArrayStack/range/delta\n", "lstm_3/TensorArrayStack/range\n", "lstm_3/TensorArrayStack/TensorArrayGatherV3\n", "lstm_3/transpose_1/perm\n", "lstm_3/transpose_1\n", "dropout_7/cond/Switch\n", "dropout_7/cond/switch_t\n", "dropout_7/cond/pred_id\n", "dropout_7/cond/mul/y\n", "dropout_7/cond/mul\n", "dropout_7/cond/mul/Switch\n", "dropout_7/cond/dropout/keep_prob\n", "dropout_7/cond/dropout/Shape\n", "dropout_7/cond/dropout/random_uniform/min\n", "dropout_7/cond/dropout/random_uniform/max\n", "dropout_7/cond/dropout/random_uniform/RandomUniform\n", "dropout_7/cond/dropout/random_uniform/sub\n", "dropout_7/cond/dropout/random_uniform/mul\n", "dropout_7/cond/dropout/random_uniform\n", "dropout_7/cond/dropout/add\n", "dropout_7/cond/dropout/Floor\n", "dropout_7/cond/dropout/div\n", "dropout_7/cond/dropout/mul\n", "dropout_7/cond/Switch_1\n", "dropout_7/cond/Merge\n", "lstm_4/kernel\n", "lstm_4/kernel/read\n", "lstm_4/recurrent_kernel\n", "lstm_4/recurrent_kernel/read\n", "lstm_4/bias\n", "lstm_4/bias/read\n", "lstm_4/strided_slice/stack\n", "lstm_4/strided_slice/stack_1\n", "lstm_4/strided_slice/stack_2\n", "lstm_4/strided_slice\n", "lstm_4/strided_slice_1/stack\n", "lstm_4/strided_slice_1/stack_1\n", "lstm_4/strided_slice_1/stack_2\n", "lstm_4/strided_slice_1\n", "lstm_4/strided_slice_2/stack\n", "lstm_4/strided_slice_2/stack_1\n", "lstm_4/strided_slice_2/stack_2\n", "lstm_4/strided_slice_2\n", "lstm_4/strided_slice_3/stack\n", "lstm_4/strided_slice_3/stack_1\n", "lstm_4/strided_slice_3/stack_2\n", "lstm_4/strided_slice_3\n", "lstm_4/strided_slice_4/stack\n", "lstm_4/strided_slice_4/stack_1\n", "lstm_4/strided_slice_4/stack_2\n", "lstm_4/strided_slice_4\n", "lstm_4/strided_slice_5/stack\n", "lstm_4/strided_slice_5/stack_1\n", "lstm_4/strided_slice_5/stack_2\n", "lstm_4/strided_slice_5\n", "lstm_4/strided_slice_6/stack\n", "lstm_4/strided_slice_6/stack_1\n", "lstm_4/strided_slice_6/stack_2\n", "lstm_4/strided_slice_6\n", "lstm_4/strided_slice_7/stack\n", "lstm_4/strided_slice_7/stack_1\n", "lstm_4/strided_slice_7/stack_2\n", "lstm_4/strided_slice_7\n", "lstm_4/strided_slice_8/stack\n", "lstm_4/strided_slice_8/stack_1\n", "lstm_4/strided_slice_8/stack_2\n", "lstm_4/strided_slice_8\n", "lstm_4/strided_slice_9/stack\n", "lstm_4/strided_slice_9/stack_1\n", "lstm_4/strided_slice_9/stack_2\n", "lstm_4/strided_slice_9\n", "lstm_4/strided_slice_10/stack\n", "lstm_4/strided_slice_10/stack_1\n", "lstm_4/strided_slice_10/stack_2\n", "lstm_4/strided_slice_10\n", "lstm_4/strided_slice_11/stack\n", "lstm_4/strided_slice_11/stack_1\n", "lstm_4/strided_slice_11/stack_2\n", "lstm_4/strided_slice_11\n", "lstm_4/zeros_like\n", "lstm_4/Sum/reduction_indices\n", "lstm_4/Sum\n", "lstm_4/ExpandDims/dim\n", "lstm_4/ExpandDims\n", "lstm_4/Tile/multiples\n", "lstm_4/Tile\n", "lstm_4/Tile_1/multiples\n", "lstm_4/Tile_1\n", "lstm_4/transpose/perm\n", "lstm_4/transpose\n", "lstm_4/Shape\n", "lstm_4/strided_slice_12/stack\n", "lstm_4/strided_slice_12/stack_1\n", "lstm_4/strided_slice_12/stack_2\n", "lstm_4/strided_slice_12\n", "lstm_4/TensorArray\n", "lstm_4/TensorArray_1\n", "lstm_4/TensorArrayUnstack/Shape\n", "lstm_4/TensorArrayUnstack/strided_slice/stack\n", "lstm_4/TensorArrayUnstack/strided_slice/stack_1\n", "lstm_4/TensorArrayUnstack/strided_slice/stack_2\n", "lstm_4/TensorArrayUnstack/strided_slice\n", "lstm_4/TensorArrayUnstack/range/start\n", "lstm_4/TensorArrayUnstack/range/delta\n", "lstm_4/TensorArrayUnstack/range\n", "lstm_4/TensorArrayUnstack/TensorArrayScatter/TensorArrayScatterV3\n", "lstm_4/time\n", "lstm_4/while/maximum_iterations\n", "lstm_4/while/iteration_counter\n", "lstm_4/while/Enter\n", "lstm_4/while/Enter_1\n", "lstm_4/while/Enter_2\n", "lstm_4/while/Enter_3\n", "lstm_4/while/Enter_4\n", "lstm_4/while/Merge\n", "lstm_4/while/Merge_1\n", "lstm_4/while/Merge_2\n", "lstm_4/while/Merge_3\n", "lstm_4/while/Merge_4\n", "lstm_4/while/Less\n", "lstm_4/while/Less/Enter\n", "lstm_4/while/Less_1\n", "lstm_4/while/Less_1/Enter\n", "lstm_4/while/LogicalAnd\n", "lstm_4/while/LoopCond\n", "lstm_4/while/Switch\n", "lstm_4/while/Switch_1\n", "lstm_4/while/Switch_2\n", "lstm_4/while/Switch_3\n", "lstm_4/while/Switch_4\n", "lstm_4/while/Identity\n", "lstm_4/while/Identity_1\n", "lstm_4/while/Identity_2\n", "lstm_4/while/Identity_3\n", "lstm_4/while/Identity_4\n", "lstm_4/while/add/y\n", "lstm_4/while/add\n", "lstm_4/while/TensorArrayReadV3\n", "lstm_4/while/TensorArrayReadV3/Enter\n", "lstm_4/while/TensorArrayReadV3/Enter_1\n", "lstm_4/while/MatMul\n", "lstm_4/while/MatMul/Enter\n", "lstm_4/while/MatMul_1\n", "lstm_4/while/MatMul_1/Enter\n", "lstm_4/while/MatMul_2\n", "lstm_4/while/MatMul_2/Enter\n", "lstm_4/while/MatMul_3\n", "lstm_4/while/MatMul_3/Enter\n", "lstm_4/while/BiasAdd\n", "lstm_4/while/BiasAdd/Enter\n", "lstm_4/while/BiasAdd_1\n", "lstm_4/while/BiasAdd_1/Enter\n", "lstm_4/while/BiasAdd_2\n", "lstm_4/while/BiasAdd_2/Enter\n", "lstm_4/while/BiasAdd_3\n", "lstm_4/while/BiasAdd_3/Enter\n", "lstm_4/while/MatMul_4\n", "lstm_4/while/MatMul_4/Enter\n", "lstm_4/while/add_1\n", "lstm_4/while/mul/x\n", "lstm_4/while/mul\n", "lstm_4/while/add_2/y\n", "lstm_4/while/add_2\n", "lstm_4/while/Const\n", "lstm_4/while/Const_1\n", "lstm_4/while/clip_by_value/Minimum\n", "lstm_4/while/clip_by_value\n", "lstm_4/while/MatMul_5\n", "lstm_4/while/MatMul_5/Enter\n", "lstm_4/while/add_3\n", "lstm_4/while/mul_1/x\n", "lstm_4/while/mul_1\n", "lstm_4/while/add_4/y\n", "lstm_4/while/add_4\n", "lstm_4/while/Const_2\n", "lstm_4/while/Const_3\n", "lstm_4/while/clip_by_value_1/Minimum\n", "lstm_4/while/clip_by_value_1\n", "lstm_4/while/mul_2\n", "lstm_4/while/MatMul_6\n", "lstm_4/while/MatMul_6/Enter\n", "lstm_4/while/add_5\n", "lstm_4/while/Tanh\n", "lstm_4/while/mul_3\n", "lstm_4/while/add_6\n", "lstm_4/while/MatMul_7\n", "lstm_4/while/MatMul_7/Enter\n", "lstm_4/while/add_7\n", "lstm_4/while/mul_4/x\n", "lstm_4/while/mul_4\n", "lstm_4/while/add_8/y\n", "lstm_4/while/add_8\n", "lstm_4/while/Const_4\n", "lstm_4/while/Const_5\n", "lstm_4/while/clip_by_value_2/Minimum\n", "lstm_4/while/clip_by_value_2\n", "lstm_4/while/Tanh_1\n", "lstm_4/while/mul_5\n", "lstm_4/while/TensorArrayWrite/TensorArrayWriteV3\n", "lstm_4/while/TensorArrayWrite/TensorArrayWriteV3/Enter\n", "lstm_4/while/add_9/y\n", "lstm_4/while/add_9\n", "lstm_4/while/NextIteration\n", "lstm_4/while/NextIteration_1\n", "lstm_4/while/NextIteration_2\n", "lstm_4/while/NextIteration_3\n", "lstm_4/while/NextIteration_4\n", "lstm_4/while/Exit_1\n", "lstm_4/while/Exit_2\n", "lstm_4/sub/y\n", "lstm_4/sub\n", "lstm_4/TensorArrayReadV3\n", "dropout_8/cond/Switch\n", "dropout_8/cond/switch_t\n", "dropout_8/cond/pred_id\n", "dropout_8/cond/mul/y\n", "dropout_8/cond/mul\n", "dropout_8/cond/mul/Switch\n", "dropout_8/cond/dropout/keep_prob\n", "dropout_8/cond/dropout/Shape\n", "dropout_8/cond/dropout/random_uniform/min\n", "dropout_8/cond/dropout/random_uniform/max\n", "dropout_8/cond/dropout/random_uniform/RandomUniform\n", "dropout_8/cond/dropout/random_uniform/sub\n", "dropout_8/cond/dropout/random_uniform/mul\n", "dropout_8/cond/dropout/random_uniform\n", "dropout_8/cond/dropout/add\n", "dropout_8/cond/dropout/Floor\n", "dropout_8/cond/dropout/div\n", "dropout_8/cond/dropout/mul\n", "dropout_8/cond/Switch_1\n", "dropout_8/cond/Merge\n", "dense_2/kernel\n", "dense_2/kernel/read\n", "dense_2/bias\n", "dense_2/bias/read\n", "dense_2/MatMul\n", "dense_2/BiasAdd\n", "dense_2/Softmax\n", "output_node0\n", "\n" ] } ], "source": [ "g = tf.GraphDef()\n", "g.ParseFromString(open(output_path + output_file, \"rb\").read())\n", "s = \"\"\n", "for n in g.node:\n", " s =s + str(n.name) + \"\\n\"\n", "\n", "print(s)" ] }, { "cell_type": "code", "execution_count": 16, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "INFO:tensorflow:Froze 16 variables.\n", "INFO:tensorflow:Converted 16 variables to const ops.\n", "Saved the freezed graph at: ./Models/LSTM.pb\n" ] } ], "source": [ "from tensorflow.python.framework import graph_util\n", "from tensorflow.python.framework import graph_io\n", "constant_graph = graph_util.convert_variables_to_constants(sess, sess.graph.as_graph_def(), pred_node_names)\n", "\n", "graph_io.write_graph(constant_graph, output_path, output_file, as_text=False)\n", "\n", "print('Saved the freezed graph at: ', (output_path + output_file))" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] } ], "metadata": { "kernelspec": { "display_name": "Python 3", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.6.7" } }, "nbformat": 4, "nbformat_minor": 2 }