Skip to content

Instantly share code, notes, and snippets.

Embed
What would you like to do?
Facial Emotion Recognition - WSL
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Load FER data"
]
},
{
"cell_type": "code",
"execution_count": 1,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"['ytest', 'imgsize', 'yval', 'ytrain', 'xtest', 'xtrain', 'xval', 'categories']\n",
"(25120, 2304) (25120, 7)\n"
]
}
],
"source": [
"fer = np.load(\"data/face_emotion.npz\")\n",
"print fer.files\n",
"print fer[\"xtrain\"].shape, fer[\"ytrain\"].shape"
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"(5382, 2304) (5382, 7)\n"
]
}
],
"source": [
"print fer[\"xtest\"].shape, fer[\"ytest\"].shape"
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {},
"outputs": [],
"source": [
"xtrain = fer[\"xtrain\"]\n",
"ytrain = fer[\"ytrain\"]\n",
"xtest = fer[\"xtest\"]\n",
"ytest = fer[\"ytest\"]"
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {},
"outputs": [],
"source": [
"train_mean = np.mean(xtrain, axis=0)\n",
"train_std = np.std(xtrain, axis=0)\n",
" \n",
"def whiten(x, train_mean=train_mean, train_std=train_std):\n",
" return (x - train_mean) / train_std"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Load pre-trained CNN"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Create the network\n",
"* from `.meta` file"
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"INFO:tensorflow:Restoring parameters from fe_challenge/fe_cnn-NAG-whiten-200\n"
]
}
],
"source": [
"saver = tf.train.import_meta_graph(\"fe_challenge/fe_cnn-NAG-whiten-200.meta\")\n",
"\n",
"sess = tf.Session()\n",
"saver.restore(sess, \"fe_challenge/fe_cnn-NAG-whiten-200\")\n",
"graph = tf.get_default_graph()"
]
},
{
"cell_type": "code",
"execution_count": 5,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"[u'save/RestoreV2/shape_and_slices',\n",
" u'save/RestoreV2/tensor_names',\n",
" u'save/SaveV2/shape_and_slices',\n",
" u'save/SaveV2/tensor_names',\n",
" u'save/Const',\n",
" u'save/RestoreV2',\n",
" u'Const',\n",
" u'ArgMax_1/dimension',\n",
" u'ArgMax/dimension',\n",
" u'Adam/epsilon',\n",
" u'Adam/beta2',\n",
" u'Adam/beta1',\n",
" u'LOGIT/biases/Adam_1',\n",
" u'save/Assign_58',\n",
" u'LOGIT/biases/Adam_1/read',\n",
" u'LOGIT/biases/Adam_1/Initializer/zeros',\n",
" u'LOGIT/biases/Adam_1/Assign',\n",
" u'LOGIT/biases/Adam',\n",
" u'save/Assign_57',\n",
" u'LOGIT/biases/Adam/read',\n",
" u'LOGIT/biases/Adam/Initializer/zeros',\n",
" u'LOGIT/biases/Adam/Assign',\n",
" u'LOGIT/weights/Adam_1',\n",
" u'save/Assign_61',\n",
" u'LOGIT/weights/Adam_1/read',\n",
" u'LOGIT/weights/Adam_1/Initializer/zeros/Const',\n",
" u'LOGIT/weights/Adam_1/Initializer/zeros/shape_as_tensor',\n",
" u'LOGIT/weights/Adam_1/Initializer/zeros',\n",
" u'LOGIT/weights/Adam_1/Assign',\n",
" u'LOGIT/weights/Adam',\n",
" u'save/Assign_60',\n",
" u'LOGIT/weights/Adam/read',\n",
" u'LOGIT/weights/Adam/Initializer/zeros/Const',\n",
" u'LOGIT/weights/Adam/Initializer/zeros/shape_as_tensor',\n",
" u'LOGIT/weights/Adam/Initializer/zeros',\n",
" u'LOGIT/weights/Adam/Assign',\n",
" u'DENSE2/BatchNorm/beta/Adam_1',\n",
" u'save/Assign_50',\n",
" u'DENSE2/BatchNorm/beta/Adam_1/read',\n",
" u'DENSE2/BatchNorm/beta/Adam_1/Initializer/zeros/Const',\n",
" u'DENSE2/BatchNorm/beta/Adam_1/Initializer/zeros/shape_as_tensor',\n",
" u'DENSE2/BatchNorm/beta/Adam_1/Initializer/zeros',\n",
" u'DENSE2/BatchNorm/beta/Adam_1/Assign',\n",
" u'DENSE2/BatchNorm/beta/Adam',\n",
" u'save/Assign_49',\n",
" u'DENSE2/BatchNorm/beta/Adam/read',\n",
" u'DENSE2/BatchNorm/beta/Adam/Initializer/zeros/Const',\n",
" u'DENSE2/BatchNorm/beta/Adam/Initializer/zeros/shape_as_tensor',\n",
" u'DENSE2/BatchNorm/beta/Adam/Initializer/zeros',\n",
" u'DENSE2/BatchNorm/beta/Adam/Assign',\n",
" u'DENSE2/weights/Adam_1',\n",
" u'save/Assign_55',\n",
" u'DENSE2/weights/Adam_1/read',\n",
" u'DENSE2/weights/Adam_1/Initializer/zeros/Const',\n",
" u'DENSE2/weights/Adam_1/Initializer/zeros/shape_as_tensor',\n",
" u'DENSE2/weights/Adam_1/Initializer/zeros',\n",
" u'DENSE2/weights/Adam_1/Assign',\n",
" u'DENSE2/weights/Adam',\n",
" u'save/Assign_54',\n",
" u'DENSE2/weights/Adam/read',\n",
" u'DENSE2/weights/Adam/Initializer/zeros/Const',\n",
" u'DENSE2/weights/Adam/Initializer/zeros/shape_as_tensor',\n",
" u'DENSE2/weights/Adam/Initializer/zeros',\n",
" u'DENSE2/weights/Adam/Assign',\n",
" u'DENSE1/BatchNorm/beta/Adam_1',\n",
" u'save/Assign_42',\n",
" u'DENSE1/BatchNorm/beta/Adam_1/read',\n",
" u'DENSE1/BatchNorm/beta/Adam_1/Initializer/zeros/Const',\n",
" u'DENSE1/BatchNorm/beta/Adam_1/Initializer/zeros/shape_as_tensor',\n",
" u'DENSE1/BatchNorm/beta/Adam_1/Initializer/zeros',\n",
" u'DENSE1/BatchNorm/beta/Adam_1/Assign',\n",
" u'DENSE1/BatchNorm/beta/Adam',\n",
" u'save/Assign_41',\n",
" u'DENSE1/BatchNorm/beta/Adam/read',\n",
" u'DENSE1/BatchNorm/beta/Adam/Initializer/zeros/Const',\n",
" u'DENSE1/BatchNorm/beta/Adam/Initializer/zeros/shape_as_tensor',\n",
" u'DENSE1/BatchNorm/beta/Adam/Initializer/zeros',\n",
" u'DENSE1/BatchNorm/beta/Adam/Assign',\n",
" u'DENSE1/weights/Adam_1',\n",
" u'save/Assign_47',\n",
" u'DENSE1/weights/Adam_1/read',\n",
" u'DENSE1/weights/Adam_1/Initializer/zeros/Const',\n",
" u'DENSE1/weights/Adam_1/Initializer/zeros/shape_as_tensor',\n",
" u'DENSE1/weights/Adam_1/Initializer/zeros',\n",
" u'DENSE1/weights/Adam_1/Assign',\n",
" u'DENSE1/weights/Adam',\n",
" u'save/Assign_46',\n",
" u'DENSE1/weights/Adam/read',\n",
" u'DENSE1/weights/Adam/Initializer/zeros/Const',\n",
" u'DENSE1/weights/Adam/Initializer/zeros/shape_as_tensor',\n",
" u'DENSE1/weights/Adam/Initializer/zeros',\n",
" u'DENSE1/weights/Adam/Assign',\n",
" u'CONV6/BatchNorm/beta/Adam_1',\n",
" u'save/Assign_34',\n",
" u'CONV6/BatchNorm/beta/Adam_1/read',\n",
" u'CONV6/BatchNorm/beta/Adam_1/Initializer/zeros',\n",
" u'CONV6/BatchNorm/beta/Adam_1/Assign',\n",
" u'CONV6/BatchNorm/beta/Adam',\n",
" u'save/Assign_33',\n",
" u'CONV6/BatchNorm/beta/Adam/read',\n",
" u'CONV6/BatchNorm/beta/Adam/Initializer/zeros',\n",
" u'CONV6/BatchNorm/beta/Adam/Assign',\n",
" u'CONV6/weights/Adam_1',\n",
" u'save/Assign_39',\n",
" u'CONV6/weights/Adam_1/read',\n",
" u'CONV6/weights/Adam_1/Initializer/zeros/Const',\n",
" u'CONV6/weights/Adam_1/Initializer/zeros/shape_as_tensor',\n",
" u'CONV6/weights/Adam_1/Initializer/zeros',\n",
" u'CONV6/weights/Adam_1/Assign',\n",
" u'CONV6/weights/Adam',\n",
" u'save/Assign_38',\n",
" u'CONV6/weights/Adam/read',\n",
" u'CONV6/weights/Adam/Initializer/zeros/Const',\n",
" u'CONV6/weights/Adam/Initializer/zeros/shape_as_tensor',\n",
" u'CONV6/weights/Adam/Initializer/zeros',\n",
" u'CONV6/weights/Adam/Assign',\n",
" u'CONV5/BatchNorm/beta/Adam_1',\n",
" u'save/Assign_26',\n",
" u'CONV5/BatchNorm/beta/Adam_1/read',\n",
" u'CONV5/BatchNorm/beta/Adam_1/Initializer/zeros',\n",
" u'CONV5/BatchNorm/beta/Adam_1/Assign',\n",
" u'CONV5/BatchNorm/beta/Adam',\n",
" u'save/Assign_25',\n",
" u'CONV5/BatchNorm/beta/Adam/read',\n",
" u'CONV5/BatchNorm/beta/Adam/Initializer/zeros',\n",
" u'CONV5/BatchNorm/beta/Adam/Assign',\n",
" u'CONV5/weights/Adam_1',\n",
" u'save/Assign_31',\n",
" u'CONV5/weights/Adam_1/read',\n",
" u'CONV5/weights/Adam_1/Initializer/zeros/Const',\n",
" u'CONV5/weights/Adam_1/Initializer/zeros/shape_as_tensor',\n",
" u'CONV5/weights/Adam_1/Initializer/zeros',\n",
" u'CONV5/weights/Adam_1/Assign',\n",
" u'CONV5/weights/Adam',\n",
" u'save/Assign_30',\n",
" u'CONV5/weights/Adam/read',\n",
" u'CONV5/weights/Adam/Initializer/zeros/Const',\n",
" u'CONV5/weights/Adam/Initializer/zeros/shape_as_tensor',\n",
" u'CONV5/weights/Adam/Initializer/zeros',\n",
" u'CONV5/weights/Adam/Assign',\n",
" u'CONV4/BatchNorm/beta/Adam_1',\n",
" u'save/Assign_18',\n",
" u'CONV4/BatchNorm/beta/Adam_1/read',\n",
" u'CONV4/BatchNorm/beta/Adam_1/Initializer/zeros',\n",
" u'CONV4/BatchNorm/beta/Adam_1/Assign',\n",
" u'CONV4/BatchNorm/beta/Adam',\n",
" u'save/Assign_17',\n",
" u'CONV4/BatchNorm/beta/Adam/read',\n",
" u'CONV4/BatchNorm/beta/Adam/Initializer/zeros',\n",
" u'CONV4/BatchNorm/beta/Adam/Assign',\n",
" u'CONV4/weights/Adam_1',\n",
" u'save/Assign_23',\n",
" u'CONV4/weights/Adam_1/read',\n",
" u'CONV4/weights/Adam_1/Initializer/zeros/Const',\n",
" u'CONV4/weights/Adam_1/Initializer/zeros/shape_as_tensor',\n",
" u'CONV4/weights/Adam_1/Initializer/zeros',\n",
" u'CONV4/weights/Adam_1/Assign',\n",
" u'CONV4/weights/Adam',\n",
" u'save/Assign_22',\n",
" u'CONV4/weights/Adam/read',\n",
" u'CONV4/weights/Adam/Initializer/zeros/Const',\n",
" u'CONV4/weights/Adam/Initializer/zeros/shape_as_tensor',\n",
" u'CONV4/weights/Adam/Initializer/zeros',\n",
" u'CONV4/weights/Adam/Assign',\n",
" u'CONV3/BatchNorm/beta/Adam_1',\n",
" u'save/Assign_10',\n",
" u'CONV3/BatchNorm/beta/Adam_1/read',\n",
" u'CONV3/BatchNorm/beta/Adam_1/Initializer/zeros',\n",
" u'CONV3/BatchNorm/beta/Adam_1/Assign',\n",
" u'CONV3/BatchNorm/beta/Adam',\n",
" u'save/Assign_9',\n",
" u'CONV3/BatchNorm/beta/Adam/read',\n",
" u'CONV3/BatchNorm/beta/Adam/Initializer/zeros',\n",
" u'CONV3/BatchNorm/beta/Adam/Assign',\n",
" u'CONV3/weights/Adam_1',\n",
" u'save/Assign_15',\n",
" u'CONV3/weights/Adam_1/read',\n",
" u'CONV3/weights/Adam_1/Initializer/zeros/Const',\n",
" u'CONV3/weights/Adam_1/Initializer/zeros/shape_as_tensor',\n",
" u'CONV3/weights/Adam_1/Initializer/zeros',\n",
" u'CONV3/weights/Adam_1/Assign',\n",
" u'CONV3/weights/Adam',\n",
" u'save/Assign_14',\n",
" u'CONV3/weights/Adam/read',\n",
" u'CONV3/weights/Adam/Initializer/zeros/Const',\n",
" u'CONV3/weights/Adam/Initializer/zeros/shape_as_tensor',\n",
" u'CONV3/weights/Adam/Initializer/zeros',\n",
" u'CONV3/weights/Adam/Assign',\n",
" u'beta2_power',\n",
" u'save/Assign_64',\n",
" u'beta2_power/read',\n",
" u'beta2_power/initial_value',\n",
" u'beta2_power/Assign',\n",
" u'beta1_power',\n",
" u'save/Assign_63',\n",
" u'beta1_power/read',\n",
" u'beta1_power/initial_value',\n",
" u'beta1_power/Assign',\n",
" u'gradients/CONV3/Conv2D_grad/Const',\n",
" u'gradients/CONV3/lrelu/mul_1_grad/Shape',\n",
" u'gradients/CONV3/lrelu/mul_grad/Shape',\n",
" u'gradients/CONV4/Conv2D_grad/Const',\n",
" u'gradients/CONV4/lrelu/mul_1_grad/Shape',\n",
" u'gradients/CONV4/lrelu/mul_grad/Shape',\n",
" u'gradients/CONV5/Conv2D_grad/Const',\n",
" u'gradients/CONV5/lrelu/mul_1_grad/Shape',\n",
" u'gradients/CONV5/lrelu/mul_grad/Shape',\n",
" u'gradients/CONV6/Conv2D_grad/Const',\n",
" u'gradients/CONV6/lrelu/mul_1_grad/Shape',\n",
" u'gradients/CONV6/lrelu/mul_grad/Shape',\n",
" u'gradients/DENSE1/lrelu/mul_1_grad/Shape',\n",
" u'gradients/DENSE1/lrelu/mul_grad/Shape',\n",
" u'gradients/DROP1/cond/dropout/div_grad/Shape_1',\n",
" u'gradients/DENSE2/lrelu/mul_1_grad/Shape',\n",
" u'gradients/DENSE2/lrelu/mul_grad/Shape',\n",
" u'gradients/DROP2/cond/dropout/div_grad/Shape_1',\n",
" u'gradients/LOGIT/Softmax_grad/Reshape/shape',\n",
" u'gradients/LOGIT/Softmax_grad/Sum/reduction_indices',\n",
" u'gradients/softmax_cross_entropy_loss/xentropy_grad/ExpandDims_1/dim',\n",
" u'gradients/softmax_cross_entropy_loss/xentropy_grad/ExpandDims/dim',\n",
" u'gradients/softmax_cross_entropy_loss/num_present/broadcast_weights/ones_like_grad/Const',\n",
" u'gradients/softmax_cross_entropy_loss/num_present_grad/Reshape/shape',\n",
" u'gradients/softmax_cross_entropy_loss/Sum_grad/Reshape/shape',\n",
" u'gradients/softmax_cross_entropy_loss/Select_grad/zeros_like',\n",
" u'gradients/softmax_cross_entropy_loss/Sum_1_grad/Const',\n",
" u'gradients/softmax_cross_entropy_loss/Sum_1_grad/Reshape/shape',\n",
" u'gradients/softmax_cross_entropy_loss/div_grad/Shape_1',\n",
" u'gradients/softmax_cross_entropy_loss/div_grad/Shape',\n",
" u'gradients/softmax_cross_entropy_loss/div_grad/BroadcastGradientArgs',\n",
" u'gradients/softmax_cross_entropy_loss/value_grad/zeros_like',\n",
" u'gradients/grad_ys_0',\n",
" u'gradients/Shape',\n",
" u'gradients/Fill',\n",
" u'softmax_cross_entropy_loss/assert_broadcastable/Const_5',\n",
" u'softmax_cross_entropy_loss/assert_broadcastable/Const_4',\n",
" u'softmax_cross_entropy_loss/assert_broadcastable/Const_3',\n",
" u'softmax_cross_entropy_loss/assert_broadcastable/Const_2',\n",
" u'softmax_cross_entropy_loss/assert_broadcastable/Const_1',\n",
" u'softmax_cross_entropy_loss/assert_broadcastable/Const',\n",
" u'softmax_cross_entropy_loss/assert_broadcastable/is_scalar/x',\n",
" u'softmax_cross_entropy_loss/assert_broadcastable/values/rank',\n",
" u'softmax_cross_entropy_loss/assert_broadcastable/weights/rank',\n",
" u'softmax_cross_entropy_loss/assert_broadcastable/is_scalar',\n",
" u'softmax_cross_entropy_loss/assert_broadcastable/is_valid_shape/pred_id',\n",
" u'softmax_cross_entropy_loss/assert_broadcastable/is_valid_shape/has_valid_nonscalar_shape/is_same_rank/Switch_1',\n",
" u'softmax_cross_entropy_loss/assert_broadcastable/is_valid_shape/has_valid_nonscalar_shape/is_same_rank/Switch',\n",
" u'softmax_cross_entropy_loss/assert_broadcastable/is_valid_shape/has_valid_nonscalar_shape/is_same_rank',\n",
" u'softmax_cross_entropy_loss/assert_broadcastable/is_valid_shape/has_valid_nonscalar_shape/pred_id',\n",
" u'softmax_cross_entropy_loss/assert_broadcastable/is_valid_shape/has_valid_nonscalar_shape/Switch_1',\n",
" u'softmax_cross_entropy_loss/assert_broadcastable/is_valid_shape/has_valid_nonscalar_shape/Switch',\n",
" u'softmax_cross_entropy_loss/assert_broadcastable/is_valid_shape/has_valid_nonscalar_shape/switch_f',\n",
" u'softmax_cross_entropy_loss/assert_broadcastable/is_valid_shape/has_valid_nonscalar_shape/switch_t',\n",
" u'softmax_cross_entropy_loss/assert_broadcastable/is_valid_shape/has_valid_nonscalar_shape/has_invalid_dims/x',\n",
" u'softmax_cross_entropy_loss/assert_broadcastable/is_valid_shape/has_valid_nonscalar_shape/has_invalid_dims/ExpandDims_1/dim',\n",
" u'softmax_cross_entropy_loss/assert_broadcastable/is_valid_shape/has_valid_nonscalar_shape/has_invalid_dims/concat/axis',\n",
" u'softmax_cross_entropy_loss/assert_broadcastable/is_valid_shape/has_valid_nonscalar_shape/has_invalid_dims/ones_like/Const',\n",
" u'softmax_cross_entropy_loss/assert_broadcastable/is_valid_shape/has_valid_nonscalar_shape/has_invalid_dims/ones_like/Shape',\n",
" u'softmax_cross_entropy_loss/assert_broadcastable/is_valid_shape/has_valid_nonscalar_shape/has_invalid_dims/ones_like',\n",
" u'softmax_cross_entropy_loss/assert_broadcastable/is_valid_shape/has_valid_nonscalar_shape/has_invalid_dims/ExpandDims/dim',\n",
" u'softmax_cross_entropy_loss/assert_broadcastable/is_valid_shape/Switch_1',\n",
" u'softmax_cross_entropy_loss/assert_broadcastable/is_valid_shape/Switch',\n",
" u'softmax_cross_entropy_loss/assert_broadcastable/is_valid_shape/switch_f',\n",
" u'softmax_cross_entropy_loss/assert_broadcastable/is_valid_shape/switch_t',\n",
" u'softmax_cross_entropy_loss/xentropy/Slice_2/begin',\n",
" u'softmax_cross_entropy_loss/xentropy/Sub_2/y',\n",
" u'softmax_cross_entropy_loss/xentropy/concat_1/axis',\n",
" u'softmax_cross_entropy_loss/xentropy/concat_1/values_0',\n",
" u'softmax_cross_entropy_loss/xentropy/Slice_1/size',\n",
" u'softmax_cross_entropy_loss/xentropy/Sub_1/y',\n",
" u'softmax_cross_entropy_loss/xentropy/Rank_2',\n",
" u'softmax_cross_entropy_loss/xentropy/Sub_1',\n",
" u'softmax_cross_entropy_loss/xentropy/Slice_1/begin',\n",
" u'softmax_cross_entropy_loss/xentropy/concat/axis',\n",
" u'softmax_cross_entropy_loss/xentropy/concat/values_0',\n",
" u'softmax_cross_entropy_loss/xentropy/Slice/size',\n",
" u'softmax_cross_entropy_loss/xentropy/Sub/y',\n",
" u'softmax_cross_entropy_loss/xentropy/Rank_1',\n",
" u'softmax_cross_entropy_loss/xentropy/Sub',\n",
" u'softmax_cross_entropy_loss/xentropy/Slice/begin',\n",
" u'softmax_cross_entropy_loss/xentropy/Rank',\n",
" u'softmax_cross_entropy_loss/xentropy/Sub_2',\n",
" u'softmax_cross_entropy_loss/xentropy/Slice_2/size',\n",
" u'Placeholder_3',\n",
" u'gradients/softmax_cross_entropy_loss/Mul_grad/Shape_1',\n",
" u'softmax_cross_entropy_loss/assert_broadcastable/weights/shape',\n",
" u'softmax_cross_entropy_loss/assert_broadcastable/is_valid_shape/has_valid_nonscalar_shape/has_invalid_dims/ExpandDims_1/Switch',\n",
" u'softmax_cross_entropy_loss/assert_broadcastable/is_valid_shape/has_valid_nonscalar_shape/has_invalid_dims/ExpandDims_1/Switch_1',\n",
" u'softmax_cross_entropy_loss/assert_broadcastable/is_valid_shape/has_valid_nonscalar_shape/has_invalid_dims/ExpandDims_1',\n",
" u'InverseTimeDecay/Const',\n",
" u'InverseTimeDecay/Cast_3',\n",
" u'InverseTimeDecay/Cast_2/x',\n",
" u'InverseTimeDecay/Cast_1/x',\n",
" u'InverseTimeDecay/learning_rate',\n",
" u'Variable',\n",
" u'save/Assign_62',\n",
" u'Variable/read',\n",
" u'InverseTimeDecay/Cast',\n",
" u'InverseTimeDecay/truediv',\n",
" u'InverseTimeDecay/Floor',\n",
" u'InverseTimeDecay/Mul',\n",
" u'InverseTimeDecay/Add',\n",
" u'InverseTimeDecay',\n",
" u'Variable/initial_value',\n",
" u'Variable/Assign',\n",
" u'LOGIT/biases',\n",
" u'save/Assign_56',\n",
" u'LOGIT/biases/read',\n",
" u'LOGIT/biases/Initializer/zeros',\n",
" u'LOGIT/biases/Assign',\n",
" u'LOGIT/weights',\n",
" u'save/Assign_59',\n",
" u'LOGIT/weights/read',\n",
" u'LOGIT/weights/Initializer/truncated_normal/stddev',\n",
" u'LOGIT/weights/Initializer/truncated_normal/mean',\n",
" u'LOGIT/weights/Initializer/truncated_normal/shape',\n",
" u'LOGIT/weights/Initializer/truncated_normal/TruncatedNormal',\n",
" u'LOGIT/weights/Initializer/truncated_normal/mul',\n",
" u'LOGIT/weights/Initializer/truncated_normal',\n",
" u'LOGIT/weights/Assign',\n",
" u'DENSE2/lrelu/mul_1/x',\n",
" u'DENSE2/lrelu/mul/x',\n",
" u'DENSE2/BatchNorm/moving_variance',\n",
" u'save/Assign_52',\n",
" u'DENSE2/BatchNorm/moving_variance/read',\n",
" u'DENSE2/BatchNorm/moving_variance/Initializer/ones/Const',\n",
" u'DENSE2/BatchNorm/moving_variance/Initializer/ones/shape_as_tensor',\n",
" u'DENSE2/BatchNorm/moving_variance/Initializer/ones',\n",
" u'DENSE2/BatchNorm/moving_variance/Assign',\n",
" u'DENSE2/BatchNorm/moving_mean',\n",
" u'save/Assign_51',\n",
" u'DENSE2/BatchNorm/moving_mean/read',\n",
" u'DENSE2/BatchNorm/moving_mean/Initializer/zeros/Const',\n",
" u'DENSE2/BatchNorm/moving_mean/Initializer/zeros/shape_as_tensor',\n",
" u'DENSE2/BatchNorm/moving_mean/Initializer/zeros',\n",
" u'DENSE2/BatchNorm/moving_mean/Assign',\n",
" u'DENSE2/BatchNorm/Const',\n",
" u'DENSE2/BatchNorm/beta',\n",
" u'save/Assign_48',\n",
" u'DENSE2/BatchNorm/beta/read',\n",
" u'DENSE2/BatchNorm/beta/Initializer/zeros/Const',\n",
" u'DENSE2/BatchNorm/beta/Initializer/zeros/shape_as_tensor',\n",
" u'DENSE2/BatchNorm/beta/Initializer/zeros',\n",
" u'DENSE2/BatchNorm/beta/Assign',\n",
" u'DENSE2/BatchNorm/Reshape/shape',\n",
" u'DENSE2/weights',\n",
" u'save/Assign_53',\n",
" u'DENSE2/weights/read',\n",
" u'DENSE2/weights/Initializer/truncated_normal/stddev',\n",
" u'DENSE2/weights/Initializer/truncated_normal/mean',\n",
" u'DENSE2/weights/Initializer/truncated_normal/shape',\n",
" u'DENSE2/weights/Initializer/truncated_normal/TruncatedNormal',\n",
" u'DENSE2/weights/Initializer/truncated_normal/mul',\n",
" u'DENSE2/weights/Initializer/truncated_normal',\n",
" u'DENSE2/weights/Assign',\n",
" u'DENSE1/lrelu/mul_1/x',\n",
" u'DENSE1/lrelu/mul/x',\n",
" u'DENSE1/BatchNorm/moving_variance',\n",
" u'save/Assign_44',\n",
" u'DENSE1/BatchNorm/moving_variance/read',\n",
" u'DENSE1/BatchNorm/moving_variance/Initializer/ones/Const',\n",
" u'DENSE1/BatchNorm/moving_variance/Initializer/ones/shape_as_tensor',\n",
" u'DENSE1/BatchNorm/moving_variance/Initializer/ones',\n",
" u'DENSE1/BatchNorm/moving_variance/Assign',\n",
" u'DENSE1/BatchNorm/moving_mean',\n",
" u'save/Assign_43',\n",
" u'DENSE1/BatchNorm/moving_mean/read',\n",
" u'DENSE1/BatchNorm/moving_mean/Initializer/zeros/Const',\n",
" u'DENSE1/BatchNorm/moving_mean/Initializer/zeros/shape_as_tensor',\n",
" u'DENSE1/BatchNorm/moving_mean/Initializer/zeros',\n",
" u'DENSE1/BatchNorm/moving_mean/Assign',\n",
" u'DENSE1/BatchNorm/Const',\n",
" u'DENSE1/BatchNorm/beta',\n",
" u'save/Assign_40',\n",
" u'DENSE1/BatchNorm/beta/read',\n",
" u'DENSE1/BatchNorm/beta/Initializer/zeros/Const',\n",
" u'DENSE1/BatchNorm/beta/Initializer/zeros/shape_as_tensor',\n",
" u'DENSE1/BatchNorm/beta/Initializer/zeros',\n",
" u'DENSE1/BatchNorm/beta/Assign',\n",
" u'DENSE1/BatchNorm/Reshape/shape',\n",
" u'DENSE1/weights',\n",
" u'save/Assign_45',\n",
" u'DENSE1/weights/read',\n",
" u'DENSE1/weights/Initializer/truncated_normal/stddev',\n",
" u'DENSE1/weights/Initializer/truncated_normal/mean',\n",
" u'DENSE1/weights/Initializer/truncated_normal/shape',\n",
" u'DENSE1/weights/Initializer/truncated_normal/TruncatedNormal',\n",
" u'DENSE1/weights/Initializer/truncated_normal/mul',\n",
" u'DENSE1/weights/Initializer/truncated_normal',\n",
" u'DENSE1/weights/Assign',\n",
" u'Flatten/flatten/Reshape/shape/1',\n",
" u'Flatten/flatten/strided_slice/stack_2',\n",
" u'Flatten/flatten/strided_slice/stack_1',\n",
" u'Flatten/flatten/strided_slice/stack',\n",
" u'CONV6/lrelu/mul_1/x',\n",
" u'CONV6/lrelu/mul/x',\n",
" u'CONV6/BatchNorm/moving_variance',\n",
" u'save/Assign_36',\n",
" u'CONV6/BatchNorm/moving_variance/read',\n",
" u'CONV6/BatchNorm/moving_variance/Initializer/ones',\n",
" u'CONV6/BatchNorm/moving_variance/Assign',\n",
" u'CONV6/BatchNorm/moving_mean',\n",
" u'save/Assign_35',\n",
" u'CONV6/BatchNorm/moving_mean/read',\n",
" u'CONV6/BatchNorm/moving_mean/Initializer/zeros',\n",
" u'CONV6/BatchNorm/moving_mean/Assign',\n",
" u'CONV6/BatchNorm/Const',\n",
" u'CONV6/BatchNorm/beta',\n",
" u'save/Assign_32',\n",
" u'CONV6/BatchNorm/beta/read',\n",
" u'CONV6/BatchNorm/beta/Initializer/zeros',\n",
" u'CONV6/BatchNorm/beta/Assign',\n",
" u'CONV6/dilation_rate',\n",
" u'CONV6/weights',\n",
" u'save/Assign_37',\n",
" u'CONV6/weights/read',\n",
" u'CONV6/weights/Initializer/truncated_normal/stddev',\n",
" u'CONV6/weights/Initializer/truncated_normal/mean',\n",
" u'CONV6/weights/Initializer/truncated_normal/shape',\n",
" u'CONV6/weights/Initializer/truncated_normal/TruncatedNormal',\n",
" u'CONV6/weights/Initializer/truncated_normal/mul',\n",
" u'CONV6/weights/Initializer/truncated_normal',\n",
" u'CONV6/weights/Assign',\n",
" u'CONV5/lrelu/mul_1/x',\n",
" u'CONV5/lrelu/mul/x',\n",
" u'CONV5/BatchNorm/moving_variance',\n",
" u'save/Assign_28',\n",
" u'CONV5/BatchNorm/moving_variance/read',\n",
" u'CONV5/BatchNorm/moving_variance/Initializer/ones',\n",
" u'CONV5/BatchNorm/moving_variance/Assign',\n",
" u'CONV5/BatchNorm/moving_mean',\n",
" u'save/Assign_27',\n",
" u'CONV5/BatchNorm/moving_mean/read',\n",
" u'CONV5/BatchNorm/moving_mean/Initializer/zeros',\n",
" u'CONV5/BatchNorm/moving_mean/Assign',\n",
" u'CONV5/BatchNorm/Const',\n",
" u'CONV5/BatchNorm/beta',\n",
" u'save/Assign_24',\n",
" u'CONV5/BatchNorm/beta/read',\n",
" u'CONV5/BatchNorm/beta/Initializer/zeros',\n",
" u'CONV5/BatchNorm/beta/Assign',\n",
" u'CONV5/dilation_rate',\n",
" u'CONV5/weights',\n",
" u'save/Assign_29',\n",
" u'CONV5/weights/read',\n",
" u'CONV5/weights/Initializer/truncated_normal/stddev',\n",
" u'CONV5/weights/Initializer/truncated_normal/mean',\n",
" u'CONV5/weights/Initializer/truncated_normal/shape',\n",
" u'CONV5/weights/Initializer/truncated_normal/TruncatedNormal',\n",
" u'CONV5/weights/Initializer/truncated_normal/mul',\n",
" u'CONV5/weights/Initializer/truncated_normal',\n",
" u'CONV5/weights/Assign',\n",
" u'CONV4/lrelu/mul_1/x',\n",
" u'CONV4/lrelu/mul/x',\n",
" u'CONV4/BatchNorm/moving_variance',\n",
" u'save/Assign_20',\n",
" u'CONV4/BatchNorm/moving_variance/read',\n",
" u'CONV4/BatchNorm/moving_variance/Initializer/ones',\n",
" u'CONV4/BatchNorm/moving_variance/Assign',\n",
" u'CONV4/BatchNorm/moving_mean',\n",
" u'save/Assign_19',\n",
" u'CONV4/BatchNorm/moving_mean/read',\n",
" u'CONV4/BatchNorm/moving_mean/Initializer/zeros',\n",
" u'CONV4/BatchNorm/moving_mean/Assign',\n",
" u'CONV4/BatchNorm/Const',\n",
" u'CONV4/BatchNorm/beta',\n",
" u'save/Assign_16',\n",
" u'CONV4/BatchNorm/beta/read',\n",
" u'CONV4/BatchNorm/beta/Initializer/zeros',\n",
" u'CONV4/BatchNorm/beta/Assign',\n",
" u'CONV4/dilation_rate',\n",
" u'CONV4/weights',\n",
" u'save/Assign_21',\n",
" u'CONV4/weights/read',\n",
" u'CONV4/weights/Initializer/truncated_normal/stddev',\n",
" u'CONV4/weights/Initializer/truncated_normal/mean',\n",
" u'CONV4/weights/Initializer/truncated_normal/shape',\n",
" u'CONV4/weights/Initializer/truncated_normal/TruncatedNormal',\n",
" u'CONV4/weights/Initializer/truncated_normal/mul',\n",
" u'CONV4/weights/Initializer/truncated_normal',\n",
" u'CONV4/weights/Assign',\n",
" u'CONV3/lrelu/mul_1/x',\n",
" u'CONV3/lrelu/mul/x',\n",
" u'CONV3/BatchNorm/moving_variance',\n",
" u'save/Assign_12',\n",
" u'CONV3/BatchNorm/moving_variance/read',\n",
" u'CONV3/BatchNorm/moving_variance/Initializer/ones',\n",
" u'CONV3/BatchNorm/moving_variance/Assign',\n",
" u'CONV3/BatchNorm/moving_mean',\n",
" u'save/Assign_11',\n",
" u'CONV3/BatchNorm/moving_mean/read',\n",
" u'CONV3/BatchNorm/moving_mean/Initializer/zeros',\n",
" u'CONV3/BatchNorm/moving_mean/Assign',\n",
" u'CONV3/BatchNorm/Const',\n",
" u'CONV3/BatchNorm/beta',\n",
" u'save/Assign_8',\n",
" u'CONV3/BatchNorm/beta/read',\n",
" u'CONV3/BatchNorm/beta/Initializer/zeros',\n",
" u'CONV3/BatchNorm/beta/Assign',\n",
" u'CONV3/dilation_rate',\n",
" u'CONV3/weights',\n",
" u'save/Assign_13',\n",
" u'CONV3/weights/read',\n",
" u'CONV3/weights/Initializer/truncated_normal/stddev',\n",
" u'CONV3/weights/Initializer/truncated_normal/mean',\n",
" u'CONV3/weights/Initializer/truncated_normal/shape',\n",
" u'CONV3/weights/Initializer/truncated_normal/TruncatedNormal',\n",
" u'CONV3/weights/Initializer/truncated_normal/mul',\n",
" u'CONV3/weights/Initializer/truncated_normal',\n",
" u'CONV3/weights/Assign',\n",
" u'CONV2/lrelu/mul_1/x',\n",
" u'CONV2/lrelu/mul/x',\n",
" u'CONV2/BatchNorm/moving_variance',\n",
" u'save/Assign_6',\n",
" u'CONV2/BatchNorm/moving_variance/read',\n",
" u'CONV2/BatchNorm/moving_variance/Initializer/ones',\n",
" u'CONV2/BatchNorm/moving_variance/Assign',\n",
" u'CONV2/BatchNorm/moving_mean',\n",
" u'save/Assign_5',\n",
" u'CONV2/BatchNorm/moving_mean/read',\n",
" u'CONV2/BatchNorm/moving_mean/Initializer/zeros',\n",
" u'CONV2/BatchNorm/moving_mean/Assign',\n",
" u'CONV2/BatchNorm/Const',\n",
" u'CONV2/BatchNorm/beta',\n",
" u'save/Assign_4',\n",
" u'CONV2/BatchNorm/beta/read',\n",
" u'CONV2/BatchNorm/beta/Initializer/zeros',\n",
" u'CONV2/BatchNorm/beta/Assign',\n",
" u'CONV2/dilation_rate',\n",
" u'CONV2/weights',\n",
" u'save/Assign_7',\n",
" u'CONV2/weights/read',\n",
" u'CONV2/weights/Initializer/truncated_normal/stddev',\n",
" u'CONV2/weights/Initializer/truncated_normal/mean',\n",
" u'CONV2/weights/Initializer/truncated_normal/shape',\n",
" u'CONV2/weights/Initializer/truncated_normal/TruncatedNormal',\n",
" u'CONV2/weights/Initializer/truncated_normal/mul',\n",
" u'CONV2/weights/Initializer/truncated_normal',\n",
" u'CONV2/weights/Assign',\n",
" u'CONV1/lrelu/mul_1/x',\n",
" u'CONV1/lrelu/mul/x',\n",
" u'CONV1/BatchNorm/moving_variance',\n",
" u'save/Assign_2',\n",
" u'CONV1/BatchNorm/moving_variance/read',\n",
" u'CONV1/BatchNorm/moving_variance/Initializer/ones',\n",
" u'CONV1/BatchNorm/moving_variance/Assign',\n",
" u'CONV1/BatchNorm/moving_mean',\n",
" u'save/Assign_1',\n",
" u'CONV1/BatchNorm/moving_mean/read',\n",
" u'CONV1/BatchNorm/moving_mean/Initializer/zeros',\n",
" u'CONV1/BatchNorm/moving_mean/Assign',\n",
" u'CONV1/BatchNorm/Const',\n",
" u'CONV1/BatchNorm/beta',\n",
" u'save/Assign',\n",
" u'CONV1/BatchNorm/beta/read',\n",
" u'CONV1/BatchNorm/beta/Initializer/zeros',\n",
" u'CONV1/BatchNorm/beta/Assign',\n",
" u'CONV1/dilation_rate',\n",
" u'CONV1/weights',\n",
" u'save/Assign_3',\n",
" u'save/restore_all',\n",
" u'save/SaveV2',\n",
" u'save/control_dependency',\n",
" u'CONV1/weights/read',\n",
" u'CONV1/weights/Initializer/truncated_normal/stddev',\n",
" u'CONV1/weights/Initializer/truncated_normal/mean',\n",
" u'CONV1/weights/Initializer/truncated_normal/shape',\n",
" u'CONV1/weights/Initializer/truncated_normal/TruncatedNormal',\n",
" u'CONV1/weights/Initializer/truncated_normal/mul',\n",
" u'CONV1/weights/Initializer/truncated_normal',\n",
" u'CONV1/weights/Assign',\n",
" u'init',\n",
" u'Reshape/shape',\n",
" u'Placeholder_2',\n",
" u'DROP2/cond/pred_id',\n",
" u'DROP2/cond/Switch',\n",
" u'DROP2/cond/switch_f',\n",
" u'DROP2/cond/switch_t',\n",
" u'DROP2/cond/dropout/random_uniform/max',\n",
" u'DROP2/cond/dropout/random_uniform/min',\n",
" u'DROP2/cond/dropout/random_uniform/sub',\n",
" u'DROP2/cond/dropout/keep_prob',\n",
" u'DENSE2/BatchNorm/cond_1/pred_id',\n",
" u'DENSE2/BatchNorm/cond_1/AssignMovingAvg_1/Switch',\n",
" u'DENSE2/BatchNorm/cond_1/AssignMovingAvg_1/sub/Switch',\n",
" u'DENSE2/BatchNorm/cond_1/AssignMovingAvg/Switch',\n",
" u'DENSE2/BatchNorm/cond_1/AssignMovingAvg/sub/Switch',\n",
" u'DENSE2/BatchNorm/cond_1/Switch',\n",
" u'DENSE2/BatchNorm/cond_1/switch_f',\n",
" u'DENSE2/BatchNorm/cond_1/switch_t',\n",
" u'DENSE2/BatchNorm/cond_1/AssignMovingAvg_1/decay',\n",
" u'DENSE2/BatchNorm/cond_1/AssignMovingAvg/decay',\n",
" u'DENSE2/BatchNorm/cond/pred_id',\n",
" u'gradients/Switch_7',\n",
" u'gradients/zeros_7/Const',\n",
" u'gradients/Shape_8',\n",
" u'gradients/zeros_7',\n",
" u'gradients/Switch_5',\n",
" u'gradients/zeros_5/Const',\n",
" u'gradients/Shape_6',\n",
" u'gradients/zeros_5',\n",
" u'DENSE2/BatchNorm/cond/FusedBatchNorm_1/Switch_4',\n",
" u'DENSE2/BatchNorm/cond/FusedBatchNorm_1/Switch_3',\n",
" u'DENSE2/BatchNorm/cond/FusedBatchNorm_1/Switch_2',\n",
" u'DENSE2/BatchNorm/cond/FusedBatchNorm_1/Switch_1',\n",
" u'DENSE2/BatchNorm/cond/FusedBatchNorm/Switch_2',\n",
" u'DENSE2/BatchNorm/cond/FusedBatchNorm/Switch_1',\n",
" u'DENSE2/BatchNorm/cond/Switch',\n",
" u'DENSE2/BatchNorm/cond/switch_f',\n",
" u'DENSE2/BatchNorm/cond/switch_t',\n",
" u'DENSE2/BatchNorm/cond/Const_1',\n",
" u'DENSE2/BatchNorm/cond/Const',\n",
" u'DROP1/cond/pred_id',\n",
" u'DROP1/cond/Switch',\n",
" u'DROP1/cond/switch_f',\n",
" u'DROP1/cond/switch_t',\n",
" u'DROP1/cond/dropout/random_uniform/max',\n",
" u'DROP1/cond/dropout/random_uniform/min',\n",
" u'DROP1/cond/dropout/random_uniform/sub',\n",
" u'DROP1/cond/dropout/keep_prob',\n",
" u'DENSE1/BatchNorm/cond_1/pred_id',\n",
" u'DENSE1/BatchNorm/cond_1/AssignMovingAvg_1/Switch',\n",
" u'DENSE1/BatchNorm/cond_1/AssignMovingAvg_1/sub/Switch',\n",
" u'DENSE1/BatchNorm/cond_1/AssignMovingAvg/Switch',\n",
" u'DENSE1/BatchNorm/cond_1/AssignMovingAvg/sub/Switch',\n",
" u'DENSE1/BatchNorm/cond_1/Switch',\n",
" u'DENSE1/BatchNorm/cond_1/switch_f',\n",
" u'DENSE1/BatchNorm/cond_1/switch_t',\n",
" u'DENSE1/BatchNorm/cond_1/AssignMovingAvg_1/decay',\n",
" u'DENSE1/BatchNorm/cond_1/AssignMovingAvg/decay',\n",
" u'DENSE1/BatchNorm/cond/pred_id',\n",
" u'gradients/Switch_15',\n",
" u'gradients/zeros_15/Const',\n",
" u'gradients/Shape_16',\n",
" u'gradients/zeros_15',\n",
" u'gradients/Switch_13',\n",
" u'gradients/zeros_13/Const',\n",
" u'gradients/Shape_14',\n",
" u'gradients/zeros_13',\n",
" u'DENSE1/BatchNorm/cond/FusedBatchNorm_1/Switch_4',\n",
" u'DENSE1/BatchNorm/cond/FusedBatchNorm_1/Switch_3',\n",
" u'DENSE1/BatchNorm/cond/FusedBatchNorm_1/Switch_2',\n",
" u'DENSE1/BatchNorm/cond/FusedBatchNorm_1/Switch_1',\n",
" u'DENSE1/BatchNorm/cond/FusedBatchNorm/Switch_2',\n",
" u'DENSE1/BatchNorm/cond/FusedBatchNorm/Switch_1',\n",
" u'DENSE1/BatchNorm/cond/Switch',\n",
" u'DENSE1/BatchNorm/cond/switch_f',\n",
" u'DENSE1/BatchNorm/cond/switch_t',\n",
" u'DENSE1/BatchNorm/cond/Const_1',\n",
" u'DENSE1/BatchNorm/cond/Const',\n",
" u'CONV6/BatchNorm/cond_1/pred_id',\n",
" u'CONV6/BatchNorm/cond_1/AssignMovingAvg_1/Switch',\n",
" u'CONV6/BatchNorm/cond_1/AssignMovingAvg_1/sub/Switch',\n",
" u'CONV6/BatchNorm/cond_1/AssignMovingAvg/Switch',\n",
" u'CONV6/BatchNorm/cond_1/AssignMovingAvg/sub/Switch',\n",
" u'CONV6/BatchNorm/cond_1/Switch',\n",
" u'CONV6/BatchNorm/cond_1/switch_f',\n",
" u'CONV6/BatchNorm/cond_1/switch_t',\n",
" u'CONV6/BatchNorm/cond_1/AssignMovingAvg_1/decay',\n",
" u'CONV6/BatchNorm/cond_1/AssignMovingAvg/decay',\n",
" u'CONV6/BatchNorm/cond/pred_id',\n",
" u'gradients/Switch_21',\n",
" u'gradients/zeros_21/Const',\n",
" u'gradients/Shape_22',\n",
" u'gradients/zeros_21',\n",
" u'gradients/Switch_19',\n",
" u'gradients/zeros_19/Const',\n",
" u'gradients/Shape_20',\n",
" u'gradients/zeros_19',\n",
" u'CONV6/BatchNorm/cond/FusedBatchNorm_1/Switch_4',\n",
" u'CONV6/BatchNorm/cond/FusedBatchNorm_1/Switch_3',\n",
" u'CONV6/BatchNorm/cond/FusedBatchNorm_1/Switch_2',\n",
" u'CONV6/BatchNorm/cond/FusedBatchNorm_1/Switch_1',\n",
" u'CONV6/BatchNorm/cond/FusedBatchNorm/Switch_2',\n",
" u'CONV6/BatchNorm/cond/FusedBatchNorm/Switch_1',\n",
" u'CONV6/BatchNorm/cond/Switch',\n",
" u'CONV6/BatchNorm/cond/switch_f',\n",
" u'CONV6/BatchNorm/cond/switch_t',\n",
" u'CONV6/BatchNorm/cond/Const_1',\n",
" u'CONV6/BatchNorm/cond/Const',\n",
" u'CONV5/BatchNorm/cond_1/pred_id',\n",
" u'CONV5/BatchNorm/cond_1/AssignMovingAvg_1/Switch',\n",
" u'CONV5/BatchNorm/cond_1/AssignMovingAvg_1/sub/Switch',\n",
" u'CONV5/BatchNorm/cond_1/AssignMovingAvg/Switch',\n",
" u'CONV5/BatchNorm/cond_1/AssignMovingAvg/sub/Switch',\n",
" u'CONV5/BatchNorm/cond_1/Switch',\n",
" u'CONV5/BatchNorm/cond_1/switch_f',\n",
" u'CONV5/BatchNorm/cond_1/switch_t',\n",
" u'CONV5/BatchNorm/cond_1/AssignMovingAvg_1/decay',\n",
" u'CONV5/BatchNorm/cond_1/AssignMovingAvg/decay',\n",
" u'CONV5/BatchNorm/cond/pred_id',\n",
" u'gradients/Switch_27',\n",
" u'gradients/zeros_27/Const',\n",
" u'gradients/Shape_28',\n",
" u'gradients/zeros_27',\n",
" u'gradients/Switch_25',\n",
" u'gradients/zeros_25/Const',\n",
" u'gradients/Shape_26',\n",
" u'gradients/zeros_25',\n",
" u'CONV5/BatchNorm/cond/FusedBatchNorm_1/Switch_4',\n",
" u'CONV5/BatchNorm/cond/FusedBatchNorm_1/Switch_3',\n",
" u'CONV5/BatchNorm/cond/FusedBatchNorm_1/Switch_2',\n",
" u'CONV5/BatchNorm/cond/FusedBatchNorm_1/Switch_1',\n",
" u'CONV5/BatchNorm/cond/FusedBatchNorm/Switch_2',\n",
" u'CONV5/BatchNorm/cond/FusedBatchNorm/Switch_1',\n",
" u'CONV5/BatchNorm/cond/Switch',\n",
" u'CONV5/BatchNorm/cond/switch_f',\n",
" u'CONV5/BatchNorm/cond/switch_t',\n",
" u'CONV5/BatchNorm/cond/Const_1',\n",
" u'CONV5/BatchNorm/cond/Const',\n",
" u'CONV4/BatchNorm/cond_1/pred_id',\n",
" u'CONV4/BatchNorm/cond_1/AssignMovingAvg_1/Switch',\n",
" u'CONV4/BatchNorm/cond_1/AssignMovingAvg_1/sub/Switch',\n",
" u'CONV4/BatchNorm/cond_1/AssignMovingAvg/Switch',\n",
" u'CONV4/BatchNorm/cond_1/AssignMovingAvg/sub/Switch',\n",
" u'CONV4/BatchNorm/cond_1/Switch',\n",
" u'CONV4/BatchNorm/cond_1/switch_f',\n",
" u'CONV4/BatchNorm/cond_1/switch_t',\n",
" u'CONV4/BatchNorm/cond_1/AssignMovingAvg_1/decay',\n",
" u'CONV4/BatchNorm/cond_1/AssignMovingAvg/decay',\n",
" u'CONV4/BatchNorm/cond/pred_id',\n",
" u'gradients/Switch_33',\n",
" u'gradients/zeros_33/Const',\n",
" u'gradients/Shape_34',\n",
" u'gradients/zeros_33',\n",
" u'gradients/Switch_31',\n",
" u'gradients/zeros_31/Const',\n",
" u'gradients/Shape_32',\n",
" u'gradients/zeros_31',\n",
" u'CONV4/BatchNorm/cond/FusedBatchNorm_1/Switch_4',\n",
" u'CONV4/BatchNorm/cond/FusedBatchNorm_1/Switch_3',\n",
" u'CONV4/BatchNorm/cond/FusedBatchNorm_1/Switch_2',\n",
" u'CONV4/BatchNorm/cond/FusedBatchNorm_1/Switch_1',\n",
" u'CONV4/BatchNorm/cond/FusedBatchNorm/Switch_2',\n",
" u'CONV4/BatchNorm/cond/FusedBatchNorm/Switch_1',\n",
" u'CONV4/BatchNorm/cond/Switch',\n",
" u'CONV4/BatchNorm/cond/switch_f',\n",
" u'CONV4/BatchNorm/cond/switch_t',\n",
" u'CONV4/BatchNorm/cond/Const_1',\n",
" u'CONV4/BatchNorm/cond/Const',\n",
" u'CONV3/BatchNorm/cond_1/pred_id',\n",
" u'CONV3/BatchNorm/cond_1/AssignMovingAvg_1/Switch',\n",
" u'CONV3/BatchNorm/cond_1/AssignMovingAvg_1/sub/Switch',\n",
" u'CONV3/BatchNorm/cond_1/AssignMovingAvg/Switch',\n",
" u'CONV3/BatchNorm/cond_1/AssignMovingAvg/sub/Switch',\n",
" u'CONV3/BatchNorm/cond_1/Switch',\n",
" u'CONV3/BatchNorm/cond_1/switch_f',\n",
" u'CONV3/BatchNorm/cond_1/switch_t',\n",
" u'CONV3/BatchNorm/cond_1/AssignMovingAvg_1/decay',\n",
" u'CONV3/BatchNorm/cond_1/AssignMovingAvg/decay',\n",
" u'CONV3/BatchNorm/cond/pred_id',\n",
" u'gradients/Switch_39',\n",
" u'gradients/zeros_39/Const',\n",
" u'gradients/Shape_40',\n",
" u'gradients/zeros_39',\n",
" u'gradients/Switch_37',\n",
" u'gradients/zeros_37/Const',\n",
" u'gradients/Shape_38',\n",
" u'gradients/zeros_37',\n",
" u'CONV3/BatchNorm/cond/FusedBatchNorm_1/Switch_4',\n",
" u'CONV3/BatchNorm/cond/FusedBatchNorm_1/Switch_3',\n",
" u'CONV3/BatchNorm/cond/FusedBatchNorm_1/Switch_2',\n",
" u'CONV3/BatchNorm/cond/FusedBatchNorm_1/Switch_1',\n",
" u'CONV3/BatchNorm/cond/FusedBatchNorm/Switch_2',\n",
" u'CONV3/BatchNorm/cond/FusedBatchNorm/Switch_1',\n",
" u'CONV3/BatchNorm/cond/Switch',\n",
" u'CONV3/BatchNorm/cond/switch_f',\n",
" u'CONV3/BatchNorm/cond/switch_t',\n",
" u'CONV3/BatchNorm/cond/Const_1',\n",
" u'CONV3/BatchNorm/cond/Const',\n",
" u'CONV2/BatchNorm/cond_1/pred_id',\n",
" u'CONV2/BatchNorm/cond_1/AssignMovingAvg_1/Switch',\n",
" u'CONV2/BatchNorm/cond_1/AssignMovingAvg_1/sub/Switch',\n",
" u'CONV2/BatchNorm/cond_1/AssignMovingAvg/Switch',\n",
" u'CONV2/BatchNorm/cond_1/AssignMovingAvg/sub/Switch',\n",
" u'CONV2/BatchNorm/cond_1/Switch',\n",
" u'CONV2/BatchNorm/cond_1/switch_f',\n",
" u'CONV2/BatchNorm/cond_1/switch_t',\n",
" u'CONV2/BatchNorm/cond_1/AssignMovingAvg_1/decay',\n",
" u'CONV2/BatchNorm/cond_1/AssignMovingAvg/decay',\n",
" u'CONV2/BatchNorm/cond/pred_id',\n",
" u'CONV2/BatchNorm/cond/FusedBatchNorm_1/Switch_4',\n",
" u'CONV2/BatchNorm/cond/FusedBatchNorm_1/Switch_3',\n",
" u'CONV2/BatchNorm/cond/FusedBatchNorm_1/Switch_2',\n",
" u'CONV2/BatchNorm/cond/FusedBatchNorm_1/Switch_1',\n",
" u'CONV2/BatchNorm/cond/FusedBatchNorm/Switch_2',\n",
" u'CONV2/BatchNorm/cond/FusedBatchNorm/Switch_1',\n",
" u'CONV2/BatchNorm/cond/Switch',\n",
" u'CONV2/BatchNorm/cond/switch_f',\n",
" u'CONV2/BatchNorm/cond/switch_t',\n",
" u'CONV2/BatchNorm/cond/Const_1',\n",
" u'CONV2/BatchNorm/cond/Const',\n",
" u'CONV1/BatchNorm/cond_1/pred_id',\n",
" u'CONV1/BatchNorm/cond_1/AssignMovingAvg_1/Switch',\n",
" u'CONV1/BatchNorm/cond_1/AssignMovingAvg_1/sub/Switch',\n",
" u'CONV1/BatchNorm/cond_1/AssignMovingAvg/Switch',\n",
" u'CONV1/BatchNorm/cond_1/AssignMovingAvg/sub/Switch',\n",
" u'CONV1/BatchNorm/cond_1/Switch',\n",
" u'CONV1/BatchNorm/cond_1/switch_f',\n",
" u'CONV1/BatchNorm/cond_1/switch_t',\n",
" u'CONV1/BatchNorm/cond_1/AssignMovingAvg_1/decay',\n",
" u'CONV1/BatchNorm/cond_1/AssignMovingAvg/decay',\n",
" u'CONV1/BatchNorm/cond/pred_id',\n",
" u'CONV1/BatchNorm/cond/FusedBatchNorm_1/Switch_4',\n",
" u'CONV1/BatchNorm/cond/FusedBatchNorm_1/Switch_3',\n",
" u'CONV1/BatchNorm/cond/FusedBatchNorm_1/Switch_2',\n",
" u'CONV1/BatchNorm/cond/FusedBatchNorm_1/Switch_1',\n",
" u'CONV1/BatchNorm/cond/FusedBatchNorm/Switch_2',\n",
" u'CONV1/BatchNorm/cond/FusedBatchNorm/Switch_1',\n",
" u'CONV1/BatchNorm/cond/Switch',\n",
" u'CONV1/BatchNorm/cond/switch_f',\n",
" u'CONV1/BatchNorm/cond/switch_t',\n",
" u'CONV1/BatchNorm/cond/Const_1',\n",
" u'CONV1/BatchNorm/cond/Const',\n",
" u'Placeholder_1',\n",
" u'ArgMax_1',\n",
" u'softmax_cross_entropy_loss/labels_stop_gradient',\n",
" u'softmax_cross_entropy_loss/xentropy/Shape_2',\n",
" u'softmax_cross_entropy_loss/xentropy/Slice_1',\n",
" u'softmax_cross_entropy_loss/xentropy/concat_1',\n",
" u'softmax_cross_entropy_loss/xentropy/Reshape_1',\n",
" u'Placeholder',\n",
" u'Reshape',\n",
" u'gradients/CONV3/Conv2D_grad/ShapeN',\n",
" u'CONV3/Conv2D',\n",
" u'gradients/Switch_38',\n",
" u'gradients/zeros_38/Const',\n",
" u'gradients/Shape_39',\n",
" u'gradients/zeros_38',\n",
" u'gradients/Switch_36',\n",
" u'gradients/zeros_36/Const',\n",
" u'gradients/Shape_37',\n",
" u'gradients/zeros_36',\n",
" u'CONV3/BatchNorm/cond/FusedBatchNorm_1/Switch',\n",
" u'CONV3/BatchNorm/cond/FusedBatchNorm_1',\n",
" u'gradients/zeros_like_44',\n",
" u'gradients/zeros_like_43',\n",
" u'gradients/zeros_like_42',\n",
" u'gradients/zeros_like_41',\n",
" u'CONV3/BatchNorm/cond/FusedBatchNorm/Switch',\n",
" u'CONV3/BatchNorm/cond/FusedBatchNorm',\n",
" u'gradients/zeros_like_48',\n",
" u'gradients/zeros_like_47',\n",
" u'gradients/zeros_like_46',\n",
" u'gradients/zeros_like_45',\n",
" u'CONV3/BatchNorm/cond/Merge_2',\n",
" u'CONV3/BatchNorm/cond_1/AssignMovingAvg_1/sub/Switch_1',\n",
" u'CONV3/BatchNorm/cond_1/AssignMovingAvg_1/sub',\n",
" u'CONV3/BatchNorm/cond_1/AssignMovingAvg_1/mul',\n",
" u'CONV3/BatchNorm/cond_1/AssignMovingAvg_1',\n",
" u'CONV3/BatchNorm/cond/Merge_1',\n",
" u'CONV3/BatchNorm/cond_1/AssignMovingAvg/sub/Switch_1',\n",
" u'CONV3/BatchNorm/cond_1/AssignMovingAvg/sub',\n",
" u'CONV3/BatchNorm/cond_1/AssignMovingAvg/mul',\n",
" u'CONV3/BatchNorm/cond_1/AssignMovingAvg',\n",
" u'CONV3/BatchNorm/cond/Merge',\n",
" u'gradients/Switch_35',\n",
" u'gradients/zeros_35/Const',\n",
" u'gradients/Shape_36',\n",
" u'gradients/zeros_35',\n",
" u'gradients/Switch_34',\n",
" u'gradients/zeros_34/Const',\n",
" u'gradients/Shape_35',\n",
" u'gradients/zeros_34',\n",
" u'CONV3/BatchNorm/cond_1/Switch_1',\n",
" u'CONV3/BatchNorm/cond_1/Identity/Switch',\n",
" u'CONV3/BatchNorm/cond_1/Identity',\n",
" u'CONV3/BatchNorm/cond_1/Merge',\n",
" u'gradients/CONV3/lrelu/Abs_grad/Sign',\n",
" u'gradients/CONV3/lrelu/mul_grad/Shape_1',\n",
" u'gradients/CONV3/lrelu/mul_grad/BroadcastGradientArgs',\n",
" u'CONV3/lrelu/Abs',\n",
" u'gradients/CONV3/lrelu/mul_1_grad/Shape_1',\n",
" u'gradients/CONV3/lrelu/mul_1_grad/BroadcastGradientArgs',\n",
" u'CONV3/lrelu/mul_1',\n",
" u'gradients/CONV3/lrelu/add_grad/Shape_1',\n",
" u'CONV3/lrelu/mul',\n",
" u'gradients/CONV3/lrelu/add_grad/Shape',\n",
" u'gradients/CONV3/lrelu/add_grad/BroadcastGradientArgs',\n",
" u'CONV3/lrelu/add',\n",
" u'gradients/CONV4/Conv2D_grad/ShapeN',\n",
" u'CONV4/Conv2D',\n",
" u'gradients/Switch_32',\n",
" u'gradients/zeros_32/Const',\n",
" u'gradients/Shape_33',\n",
" u'gradients/zeros_32',\n",
" u'gradients/Switch_30',\n",
" u'gradients/zeros_30/Const',\n",
" u'gradients/Shape_31',\n",
" u'gradients/zeros_30',\n",
" u'CONV4/BatchNorm/cond/FusedBatchNorm_1/Switch',\n",
" u'CONV4/BatchNorm/cond/FusedBatchNorm_1',\n",
" u'gradients/zeros_like_36',\n",
" u'gradients/zeros_like_35',\n",
" u'gradients/zeros_like_34',\n",
" u'gradients/zeros_like_33',\n",
" u'CONV4/BatchNorm/cond/FusedBatchNorm/Switch',\n",
" u'CONV4/BatchNorm/cond/FusedBatchNorm',\n",
" u'gradients/zeros_like_40',\n",
" u'gradients/zeros_like_39',\n",
" u'gradients/zeros_like_38',\n",
" u'gradients/zeros_like_37',\n",
" u'CONV4/BatchNorm/cond/Merge_2',\n",
" u'CONV4/BatchNorm/cond_1/AssignMovingAvg_1/sub/Switch_1',\n",
" u'CONV4/BatchNorm/cond_1/AssignMovingAvg_1/sub',\n",
" u'CONV4/BatchNorm/cond_1/AssignMovingAvg_1/mul',\n",
" u'CONV4/BatchNorm/cond_1/AssignMovingAvg_1',\n",
" u'CONV4/BatchNorm/cond/Merge_1',\n",
" u'CONV4/BatchNorm/cond_1/AssignMovingAvg/sub/Switch_1',\n",
" u'CONV4/BatchNorm/cond_1/AssignMovingAvg/sub',\n",
" u'CONV4/BatchNorm/cond_1/AssignMovingAvg/mul',\n",
" u'CONV4/BatchNorm/cond_1/AssignMovingAvg',\n",
" u'CONV4/BatchNorm/cond/Merge',\n",
" u'gradients/Switch_29',\n",
" u'gradients/zeros_29/Const',\n",
" u'gradients/Shape_30',\n",
" u'gradients/zeros_29',\n",
" u'gradients/Switch_28',\n",
" u'gradients/zeros_28/Const',\n",
" u'gradients/Shape_29',\n",
" u'gradients/zeros_28',\n",
" u'CONV4/BatchNorm/cond_1/Switch_1',\n",
" u'CONV4/BatchNorm/cond_1/Identity/Switch',\n",
" u'CONV4/BatchNorm/cond_1/Identity',\n",
" u'CONV4/BatchNorm/cond_1/Merge',\n",
" u'gradients/CONV4/lrelu/Abs_grad/Sign',\n",
" u'gradients/CONV4/lrelu/mul_grad/Shape_1',\n",
" u'gradients/CONV4/lrelu/mul_grad/BroadcastGradientArgs',\n",
" u'CONV4/lrelu/Abs',\n",
" u'gradients/CONV4/lrelu/mul_1_grad/Shape_1',\n",
" u'gradients/CONV4/lrelu/mul_1_grad/BroadcastGradientArgs',\n",
" u'CONV4/lrelu/mul_1',\n",
" u'gradients/CONV4/lrelu/add_grad/Shape_1',\n",
" u'CONV4/lrelu/mul',\n",
" u'gradients/CONV4/lrelu/add_grad/Shape',\n",
" u'gradients/CONV4/lrelu/add_grad/BroadcastGradientArgs',\n",
" u'CONV4/lrelu/add',\n",
" u'POOL2/MaxPool',\n",
" u'gradients/CONV5/Conv2D_grad/ShapeN',\n",
" u'CONV5/Conv2D',\n",
" u'gradients/Switch_26',\n",
" u'gradients/zeros_26/Const',\n",
" u'gradients/Shape_27',\n",
" u'gradients/zeros_26',\n",
" u'gradients/Switch_24',\n",
" u'gradients/zeros_24/Const',\n",
" u'gradients/Shape_25',\n",
" u'gradients/zeros_24',\n",
" u'CONV5/BatchNorm/cond/FusedBatchNorm_1/Switch',\n",
" u'CONV5/BatchNorm/cond/FusedBatchNorm_1',\n",
" u'gradients/zeros_like_28',\n",
" u'gradients/zeros_like_27',\n",
" u'gradients/zeros_like_26',\n",
" u'gradients/zeros_like_25',\n",
" u'CONV5/BatchNorm/cond/FusedBatchNorm/Switch',\n",
" u'CONV5/BatchNorm/cond/FusedBatchNorm',\n",
" u'gradients/zeros_like_32',\n",
" u'gradients/zeros_like_31',\n",
" u'gradients/zeros_like_30',\n",
" u'gradients/zeros_like_29',\n",
" u'CONV5/BatchNorm/cond/Merge_2',\n",
" u'CONV5/BatchNorm/cond_1/AssignMovingAvg_1/sub/Switch_1',\n",
" u'CONV5/BatchNorm/cond_1/AssignMovingAvg_1/sub',\n",
" u'CONV5/BatchNorm/cond_1/AssignMovingAvg_1/mul',\n",
" u'CONV5/BatchNorm/cond_1/AssignMovingAvg_1',\n",
" u'CONV5/BatchNorm/cond/Merge_1',\n",
" u'CONV5/BatchNorm/cond_1/AssignMovingAvg/sub/Switch_1',\n",
" u'CONV5/BatchNorm/cond_1/AssignMovingAvg/sub',\n",
" u'CONV5/BatchNorm/cond_1/AssignMovingAvg/mul',\n",
" u'CONV5/BatchNorm/cond_1/AssignMovingAvg',\n",
" u'CONV5/BatchNorm/cond/Merge',\n",
" u'gradients/Switch_23',\n",
" u'gradients/zeros_23/Const',\n",
" u'gradients/Shape_24',\n",
" u'gradients/zeros_23',\n",
" u'gradients/Switch_22',\n",
" u'gradients/zeros_22/Const',\n",
" u'gradients/Shape_23',\n",
" u'gradients/zeros_22',\n",
" u'CONV5/BatchNorm/cond_1/Switch_1',\n",
" u'CONV5/BatchNorm/cond_1/Identity/Switch',\n",
" u'CONV5/BatchNorm/cond_1/Identity',\n",
" u'CONV5/BatchNorm/cond_1/Merge',\n",
" u'gradients/CONV5/lrelu/Abs_grad/Sign',\n",
" u'gradients/CONV5/lrelu/mul_grad/Shape_1',\n",
" u'gradients/CONV5/lrelu/mul_grad/BroadcastGradientArgs',\n",
" u'CONV5/lrelu/Abs',\n",
" u'gradients/CONV5/lrelu/mul_1_grad/Shape_1',\n",
" u'gradients/CONV5/lrelu/mul_1_grad/BroadcastGradientArgs',\n",
" u'CONV5/lrelu/mul_1',\n",
" u'gradients/CONV5/lrelu/add_grad/Shape_1',\n",
" u'CONV5/lrelu/mul',\n",
" u'gradients/CONV5/lrelu/add_grad/Shape',\n",
" u'gradients/CONV5/lrelu/add_grad/BroadcastGradientArgs',\n",
" u'CONV5/lrelu/add',\n",
" u'gradients/CONV6/Conv2D_grad/ShapeN',\n",
" u'CONV6/Conv2D',\n",
" u'gradients/Switch_20',\n",
" u'gradients/zeros_20/Const',\n",
" u'gradients/Shape_21',\n",
" u'gradients/zeros_20',\n",
" ...]"
]
},
"execution_count": 5,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"[n.name for n in tf.get_default_graph().as_graph_def().node]"
]
},
{
"cell_type": "code",
"execution_count": 6,
"metadata": {},
"outputs": [],
"source": [
"X = graph.get_tensor_by_name(\"Placeholder:0\")\n",
"y = graph.get_tensor_by_name(\"Placeholder_1:0\")\n",
"is_training = graph.get_tensor_by_name(\"Placeholder_2:0\")"
]
},
{
"cell_type": "code",
"execution_count": 7,
"metadata": {
"scrolled": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"PERFORMANCE OF PRE-TRAINED NET IS: 0.623046875\n"
]
}
],
"source": [
"ss = graph.get_tensor_by_name(\"LOGIT/Softmax:0\")\n",
"oo = sess.run(ss, feed_dict={X: whiten(xtest[:512]), y: ytest[:512], is_training: False})\n",
"performance = np.equal(np.argmax(oo, 1), np.argmax(ytest[:512], 1)).sum() / 512.\n",
"\n",
"print \"PERFORMANCE OF PRE-TRAINED NET IS:\", performance"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Get the last CONV layer"
]
},
{
"cell_type": "code",
"execution_count": 8,
"metadata": {},
"outputs": [],
"source": [
"conv6 = graph.get_tensor_by_name(\"CONV6/lrelu/add:0\")\n",
"conv6 = tf.stop_gradient(conv6)\n",
"conv6_shape = conv6.get_shape().as_list()"
]
},
{
"cell_type": "code",
"execution_count": 9,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"[None, 24, 24, 128]"
]
},
"execution_count": 9,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"conv6_shape"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Add Global Average Pooling + FC layer\n",
"* [Learning Deep Features for Discriminative Localization](https://arxiv.org/abs/1512.04150)"
]
},
{
"cell_type": "code",
"execution_count": 10,
"metadata": {},
"outputs": [],
"source": [
"def lrelu(x, leak=.2, scope=\"lrelu\"):\n",
" with tf.variable_scope(scope):\n",
" f1 = (1-leak) / 2.\n",
" f2 = (1+leak) / 2.\n",
" return f1*x + f2*tf.abs(x)"
]
},
{
"cell_type": "code",
"execution_count": 11,
"metadata": {},
"outputs": [],
"source": [
"def add_gap(is_training):\n",
" batchnorm_params = {\"is_training\": is_training, \"decay\": 0.9, \"updates_collections\": None}\n",
"\n",
" conv_last = slim.conv2d(conv6, 1024, [3,3], padding=\"SAME\",\n",
" normalizer_fn=slim.batch_norm,\n",
" normalizer_params=batchnorm_params,\n",
" activation_fn=lrelu,\n",
" weights_initializer=tf.truncated_normal_initializer(stddev=.05),\n",
" scope=\"CONV_LAST\")\n",
" gap = slim.avg_pool2d(conv_last, conv6_shape[1:3], scope=\"GAP\")\n",
" gap_flat = slim.flatten(gap, scope=\"GAP_FLAT\")\n",
" logit = slim.fully_connected(gap_flat, 7, \n",
" activation_fn=tf.nn.softmax,\n",
" scope=\"WSL_LOGIT\")\n",
" return conv_last, gap, logit"
]
},
{
"cell_type": "code",
"execution_count": 12,
"metadata": {},
"outputs": [],
"source": [
"conv_last, gap, logit = add_gap(is_training)\n",
"pred = tf.argmax(logit, 1)\n",
"truth = tf.argmax(y, 1)\n",
"acc = tf.reduce_mean(tf.cast(tf.equal(truth, pred), tf.float32))"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"---\n",
"## Data preprocessing & augmentation"
]
},
{
"cell_type": "code",
"execution_count": 13,
"metadata": {},
"outputs": [],
"source": [
"from scipy import ndimage"
]
},
{
"cell_type": "code",
"execution_count": 14,
"metadata": {},
"outputs": [],
"source": [
"def augment_data(images):\n",
" images_r = images.reshape(-1, 48, 48)\n",
" images_aug = []\n",
" for img in images_r:\n",
" # FLIP\n",
" if np.random.randint(0, 2) == 1:\n",
" img_flipped = np.fliplr(img)\n",
" else:\n",
" img_flipped = img\n",
" # ROTATE\n",
" angle = np.random.randint(-10, 10)\n",
" img_rotated = ndimage.rotate(img_flipped, angle, reshape=False)\n",
" # scaled\n",
" scale = np.random.uniform(1., 1.1)\n",
" img_scaled = ndimage.zoom(img_rotated, scale)\n",
" center = img_scaled.shape[0] // 2\n",
" st = (center-24); en = (center+24)\n",
" img_scaled = img_scaled[st:en, st:en]\n",
" # SHIFT\n",
" shift = np.random.randint(-2, 2)\n",
" img_shifted = ndimage.shift(img_scaled, shift)\n",
" # add to the list\n",
" img_flattend = img_shifted.flatten()\n",
" images_aug.append(img_flattend)\n",
" images_aug = np.array(images_aug)\n",
" return images_aug"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"---\n",
"## Train CNN-GAP"
]
},
{
"cell_type": "code",
"execution_count": 15,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"array([ 5.74696866, 7.0324748 , 3.99173685, 5.90225564, 8.93950178,\n",
" 7.31082654, 65.7591623 ])"
]
},
"execution_count": 15,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"class_counts = np.unique(np.argmax(fer[\"ytrain\"], axis=1), return_counts=True)[1]\n",
"class_weights = (class_counts.sum() / class_counts.astype(float))\n",
"class_weights"
]
},
{
"cell_type": "code",
"execution_count": 16,
"metadata": {},
"outputs": [],
"source": [
"weights = tf.placeholder(tf.float32, [None])\n",
"loss = tf.losses.softmax_cross_entropy(y, logit, weights=weights, scope=\"LOSS_WSL\")\n",
"#graph.get_tensor_by_name(\"softmax_cross_entropy_loss/value:0\")"
]
},
{
"cell_type": "code",
"execution_count": 17,
"metadata": {},
"outputs": [],
"source": [
"learning_rate = .005\n",
"global_step = tf.Variable(0, trainable=False)\n",
"decay_steps = 50.\n",
"decay_rate = .93\n",
"learning_rate = tf.train.inverse_time_decay(learning_rate, global_step, \n",
" decay_steps, decay_rate, staircase=True)\n",
"\n",
"#optimizer = tf.train.MomentumOptimizer(learning_rate=learning_rate, momentum=.9, use_nesterov=True).minimize(loss)\n",
"optimizer = tf.train.AdamOptimizer(learning_rate=learning_rate, epsilon=.0001, name=\"Adam_wsl\").minimize(loss, global_step=global_step)"
]
},
{
"cell_type": "code",
"execution_count": 18,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"INITIALIZED\n"
]
}
],
"source": [
"uninitialized = [v for v in tf.global_variables() if v.name.split(':')[0] in sess.run(tf.report_uninitialized_variables())]\n",
"sess.run(tf.variables_initializer(uninitialized))\n",
"print \"VARIABLES INITIALIZED\""
]
},
{
"cell_type": "code",
"execution_count": 19,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"ylabels = np.argmax(ytrain, 1)\n",
"plt.bar(range(7), np.unique(ylabels, return_counts=True)[1])\n",
"plt.xticks(range(7), [i.split(\"_\")[-1] for i in fer[\"categories\"]]);"
]
},
{
"cell_type": "code",
"execution_count": 20,
"metadata": {},
"outputs": [],
"source": [
"saver = tf.train.Saver(max_to_keep=10)"
]
},
{
"cell_type": "code",
"execution_count": 39,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"205th: loss 12.05923, train_acc 0.530, test_acc 0.518\n",
"210th: loss 12.05393, train_acc 0.534, test_acc 0.521\n",
"215th: loss 12.05033, train_acc 0.534, test_acc 0.521\n",
"220th: loss 12.04805, train_acc 0.536, test_acc 0.523\n",
"225th: loss 12.04639, train_acc 0.533, test_acc 0.521\n",
"230th: loss 12.04842, train_acc 0.536, test_acc 0.520\n",
"235th: loss 12.04325, train_acc 0.537, test_acc 0.516\n",
"240th: loss 12.04510, train_acc 0.535, test_acc 0.518\n",
"245th: loss 12.04531, train_acc 0.535, test_acc 0.520\n",
"250th: loss 12.05065, train_acc 0.535, test_acc 0.523\n",
"255th: loss 12.04703, train_acc 0.536, test_acc 0.521\n",
"260th: loss 12.04881, train_acc 0.532, test_acc 0.520\n",
"265th: loss 12.04207, train_acc 0.536, test_acc 0.516\n",
"270th: loss 12.03846, train_acc 0.536, test_acc 0.516\n",
"275th: loss 12.02645, train_acc 0.539, test_acc 0.525\n",
"280th: loss 12.02972, train_acc 0.540, test_acc 0.523\n",
"285th: loss 12.03574, train_acc 0.537, test_acc 0.523\n",
"290th: loss 12.03511, train_acc 0.539, test_acc 0.523\n",
"295th: loss 12.03618, train_acc 0.535, test_acc 0.523\n",
"300th: loss 12.03244, train_acc 0.537, test_acc 0.521\n",
"305th: loss 12.03350, train_acc 0.537, test_acc 0.523\n",
"310th: loss 12.02948, train_acc 0.539, test_acc 0.520\n",
"315th: loss 12.03728, train_acc 0.536, test_acc 0.521\n",
"320th: loss 12.02750, train_acc 0.539, test_acc 0.521\n",
"325th: loss 12.03099, train_acc 0.537, test_acc 0.529\n",
"330th: loss 12.03196, train_acc 0.538, test_acc 0.523\n",
"335th: loss 12.02832, train_acc 0.537, test_acc 0.527\n",
"340th: loss 12.03112, train_acc 0.539, test_acc 0.529\n",
"345th: loss 12.02682, train_acc 0.538, test_acc 0.525\n",
"350th: loss 12.02889, train_acc 0.539, test_acc 0.527\n",
"355th: loss 12.03508, train_acc 0.537, test_acc 0.525\n",
"360th: loss 12.02948, train_acc 0.540, test_acc 0.525\n",
"365th: loss 12.02996, train_acc 0.538, test_acc 0.523\n",
"370th: loss 12.01945, train_acc 0.540, test_acc 0.523\n",
"375th: loss 12.02630, train_acc 0.537, test_acc 0.523\n",
"380th: loss 12.01695, train_acc 0.541, test_acc 0.520\n",
"385th: loss 12.02300, train_acc 0.539, test_acc 0.521\n",
"390th: loss 12.02415, train_acc 0.538, test_acc 0.523\n",
"395th: loss 12.01636, train_acc 0.540, test_acc 0.523\n",
"400th: loss 12.01147, train_acc 0.540, test_acc 0.527\n",
"DONE\n"
]
}
],
"source": [
"st = 200\n",
"n_epochs = 200\n",
"batch_size = 256\n",
"display_step = 5\n",
"save_step = 5\n",
"\n",
"n_batches = int(xtrain.shape[0] / batch_size)\n",
"if st == 0:\n",
" losses, train_accs, test_accs = [], [], []\n",
"\n",
"ylabels = np.argmax(ytrain, 1)\n",
"yweights = class_weights[ylabels]\n",
"ytestweights = class_weights[np.argmax(ytest[:512], 1)]\n",
"\n",
"for epoch in range(st, st+n_epochs):\n",
" avg_loss, avg_train_acc = 0., 0.\n",
" for i in range(n_batches):\n",
" batch_xs = xtrain[(i * batch_size):((i+1) * batch_size)]\n",
" batch_ys = ytrain[(i * batch_size):((i+1) * batch_size)]\n",
" batch_weights = yweights[(i * batch_size):((i+1) * batch_size)]\n",
" batch_xs = whiten(augment_data(batch_xs))\n",
"\n",
" if (epoch+1) % display_step != 0:\n",
" sess.run(optimizer, feed_dict={X: batch_xs, y: batch_ys, \n",
" is_training: True,\n",
" weights: batch_weights})\n",
" else:\n",
" _, curr_loss, curr_train_acc = sess.run([optimizer, loss, acc], feed_dict={X: batch_xs, y: batch_ys, \n",
" is_training: True,\n",
" weights: batch_weights})\n",
" avg_loss += curr_loss / n_batches\n",
" avg_train_acc += curr_train_acc / n_batches\n",
" \n",
" if (epoch+1) % display_step == 0:\n",
" test_acc = sess.run(acc, feed_dict={X: whiten(xtest[:512]), y: ytest[:512], \n",
" is_training: False,\n",
" weights: ytestweights})\n",
" losses.append(avg_loss)\n",
" train_accs.append(avg_train_acc)\n",
" test_accs.append(test_acc)\n",
"\n",
" if (epoch+1) % display_step == 0:\n",
" print \"{:03d}th: loss {:0.5f}, train_acc {:0.3f}, test_acc {:0.3f}\".format(epoch+1, avg_loss, avg_train_acc, test_acc)\n",
"\n",
" if (epoch+1) % save_step == 0:\n",
" saver.save(sess, \"fe_challenge/fe_cnn-localizer\", global_step=epoch+1)\n",
"\n",
"print \"DONE\""
]
},
{
"cell_type": "code",
"execution_count": 40,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"<matplotlib.legend.Legend at 0x7fac145b0690>"
]
},
"execution_count": 40,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 1080x432 with 2 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"plt.figure(figsize=(15, 6))\n",
"plt.subplot(121)\n",
"plt.plot(losses)\n",
"\n",
"plt.subplot(122)\n",
"plt.plot(train_accs, label=\"train\")\n",
"plt.plot(test_accs, label=\"test\")\n",
"plt.legend(loc=4)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"---\n",
"# Weakly-supervised localization"
]
},
{
"cell_type": "code",
"execution_count": 41,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"INFO:tensorflow:Restoring parameters from fe_challenge/fe_cnn-localizer-400\n"
]
}
],
"source": [
"saver.restore(sess, \"fe_challenge/fe_cnn-localizer-400\")"
]
},
{
"cell_type": "code",
"execution_count": 42,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"[u'WSL_LOGIT/weights/Initializer/random_uniform/shape',\n",
" u'WSL_LOGIT/weights/Initializer/random_uniform/min',\n",
" u'WSL_LOGIT/weights/Initializer/random_uniform/max',\n",
" u'WSL_LOGIT/weights/Initializer/random_uniform/RandomUniform',\n",
" u'WSL_LOGIT/weights/Initializer/random_uniform/sub',\n",
" u'WSL_LOGIT/weights/Initializer/random_uniform/mul',\n",
" u'WSL_LOGIT/weights/Initializer/random_uniform',\n",
" u'WSL_LOGIT/weights',\n",
" u'WSL_LOGIT/weights/Assign',\n",
" u'WSL_LOGIT/weights/read',\n",
" u'WSL_LOGIT/biases/Initializer/zeros',\n",
" u'WSL_LOGIT/biases',\n",
" u'WSL_LOGIT/biases/Assign',\n",
" u'WSL_LOGIT/biases/read',\n",
" u'WSL_LOGIT/MatMul',\n",
" u'WSL_LOGIT/BiasAdd',\n",
" u'WSL_LOGIT/Softmax',\n",
" u'LOSS_WSL/labels_stop_gradient',\n",
" u'LOSS_WSL/xentropy/Rank',\n",
" u'LOSS_WSL/xentropy/Shape',\n",
" u'LOSS_WSL/xentropy/Rank_1',\n",
" u'LOSS_WSL/xentropy/Shape_1',\n",
" u'LOSS_WSL/xentropy/Sub/y',\n",
" u'LOSS_WSL/xentropy/Sub',\n",
" u'LOSS_WSL/xentropy/Slice/begin',\n",
" u'LOSS_WSL/xentropy/Slice/size',\n",
" u'LOSS_WSL/xentropy/Slice',\n",
" u'LOSS_WSL/xentropy/concat/values_0',\n",
" u'LOSS_WSL/xentropy/concat/axis',\n",
" u'LOSS_WSL/xentropy/concat',\n",
" u'LOSS_WSL/xentropy/Reshape',\n",
" u'LOSS_WSL/xentropy/Rank_2',\n",
" u'LOSS_WSL/xentropy/Shape_2',\n",
" u'LOSS_WSL/xentropy/Sub_1/y',\n",
" u'LOSS_WSL/xentropy/Sub_1',\n",
" u'LOSS_WSL/xentropy/Slice_1/begin',\n",
" u'LOSS_WSL/xentropy/Slice_1/size',\n",
" u'LOSS_WSL/xentropy/Slice_1',\n",
" u'LOSS_WSL/xentropy/concat_1/values_0',\n",
" u'LOSS_WSL/xentropy/concat_1/axis',\n",
" u'LOSS_WSL/xentropy/concat_1',\n",
" u'LOSS_WSL/xentropy/Reshape_1',\n",
" u'LOSS_WSL/xentropy',\n",
" u'LOSS_WSL/xentropy/Sub_2/y',\n",
" u'LOSS_WSL/xentropy/Sub_2',\n",
" u'LOSS_WSL/xentropy/Slice_2/begin',\n",
" u'LOSS_WSL/xentropy/Slice_2/size',\n",
" u'LOSS_WSL/xentropy/Slice_2',\n",
" u'LOSS_WSL/xentropy/Reshape_2',\n",
" u'LOSS_WSL/assert_broadcastable/weights/shape',\n",
" u'LOSS_WSL/assert_broadcastable/weights/rank',\n",
" u'LOSS_WSL/assert_broadcastable/values/shape',\n",
" u'LOSS_WSL/assert_broadcastable/values/rank',\n",
" u'LOSS_WSL/assert_broadcastable/is_scalar/x',\n",
" u'LOSS_WSL/assert_broadcastable/is_scalar',\n",
" u'LOSS_WSL/assert_broadcastable/is_valid_shape/Switch',\n",
" u'LOSS_WSL/assert_broadcastable/is_valid_shape/switch_t',\n",
" u'LOSS_WSL/assert_broadcastable/is_valid_shape/switch_f',\n",
" u'LOSS_WSL/assert_broadcastable/is_valid_shape/pred_id',\n",
" u'LOSS_WSL/assert_broadcastable/is_valid_shape/Switch_1',\n",
" u'LOSS_WSL/assert_broadcastable/is_valid_shape/has_valid_nonscalar_shape/is_same_rank',\n",
" u'LOSS_WSL/assert_broadcastable/is_valid_shape/has_valid_nonscalar_shape/is_same_rank/Switch',\n",
" u'LOSS_WSL/assert_broadcastable/is_valid_shape/has_valid_nonscalar_shape/is_same_rank/Switch_1',\n",
" u'LOSS_WSL/assert_broadcastable/is_valid_shape/has_valid_nonscalar_shape/Switch',\n",
" u'LOSS_WSL/assert_broadcastable/is_valid_shape/has_valid_nonscalar_shape/switch_t',\n",
" u'LOSS_WSL/assert_broadcastable/is_valid_shape/has_valid_nonscalar_shape/switch_f',\n",
" u'LOSS_WSL/assert_broadcastable/is_valid_shape/has_valid_nonscalar_shape/pred_id',\n",
" u'LOSS_WSL/assert_broadcastable/is_valid_shape/has_valid_nonscalar_shape/has_invalid_dims/ExpandDims/dim',\n",
" u'LOSS_WSL/assert_broadcastable/is_valid_shape/has_valid_nonscalar_shape/has_invalid_dims/ExpandDims',\n",
" u'LOSS_WSL/assert_broadcastable/is_valid_shape/has_valid_nonscalar_shape/has_invalid_dims/ExpandDims/Switch',\n",
" u'LOSS_WSL/assert_broadcastable/is_valid_shape/has_valid_nonscalar_shape/has_invalid_dims/ExpandDims/Switch_1',\n",
" u'LOSS_WSL/assert_broadcastable/is_valid_shape/has_valid_nonscalar_shape/has_invalid_dims/ones_like/Shape',\n",
" u'LOSS_WSL/assert_broadcastable/is_valid_shape/has_valid_nonscalar_shape/has_invalid_dims/ones_like/Const',\n",
" u'LOSS_WSL/assert_broadcastable/is_valid_shape/has_valid_nonscalar_shape/has_invalid_dims/ones_like',\n",
" u'LOSS_WSL/assert_broadcastable/is_valid_shape/has_valid_nonscalar_shape/has_invalid_dims/concat/axis',\n",
" u'LOSS_WSL/assert_broadcastable/is_valid_shape/has_valid_nonscalar_shape/has_invalid_dims/concat',\n",
" u'LOSS_WSL/assert_broadcastable/is_valid_shape/has_valid_nonscalar_shape/has_invalid_dims/ExpandDims_1/dim',\n",
" u'LOSS_WSL/assert_broadcastable/is_valid_shape/has_valid_nonscalar_shape/has_invalid_dims/ExpandDims_1',\n",
" u'LOSS_WSL/assert_broadcastable/is_valid_shape/has_valid_nonscalar_shape/has_invalid_dims/ExpandDims_1/Switch',\n",
" u'LOSS_WSL/assert_broadcastable/is_valid_shape/has_valid_nonscalar_shape/has_invalid_dims/ExpandDims_1/Switch_1',\n",
" u'LOSS_WSL/assert_broadcastable/is_valid_shape/has_valid_nonscalar_shape/has_invalid_dims/DenseToDenseSetOperation',\n",
" u'LOSS_WSL/assert_broadcastable/is_valid_shape/has_valid_nonscalar_shape/has_invalid_dims/num_invalid_dims',\n",
" u'LOSS_WSL/assert_broadcastable/is_valid_shape/has_valid_nonscalar_shape/has_invalid_dims/x',\n",
" u'LOSS_WSL/assert_broadcastable/is_valid_shape/has_valid_nonscalar_shape/has_invalid_dims',\n",
" u'LOSS_WSL/assert_broadcastable/is_valid_shape/has_valid_nonscalar_shape/Switch_1',\n",
" u'LOSS_WSL/assert_broadcastable/is_valid_shape/has_valid_nonscalar_shape/Merge',\n",
" u'LOSS_WSL/assert_broadcastable/is_valid_shape/Merge',\n",
" u'LOSS_WSL/assert_broadcastable/Const',\n",
" u'LOSS_WSL/assert_broadcastable/Const_1',\n",
" u'LOSS_WSL/assert_broadcastable/Const_2',\n",
" u'LOSS_WSL/assert_broadcastable/Const_3',\n",
" u'LOSS_WSL/assert_broadcastable/Const_4',\n",
" u'LOSS_WSL/assert_broadcastable/Const_5',\n",
" u'LOSS_WSL/assert_broadcastable/AssertGuard/Switch',\n",
" u'LOSS_WSL/assert_broadcastable/AssertGuard/switch_t',\n",
" u'LOSS_WSL/assert_broadcastable/AssertGuard/switch_f',\n",
" u'LOSS_WSL/assert_broadcastable/AssertGuard/pred_id',\n",
" u'LOSS_WSL/assert_broadcastable/AssertGuard/NoOp',\n",
" u'LOSS_WSL/assert_broadcastable/AssertGuard/control_dependency',\n",
" u'LOSS_WSL/assert_broadcastable/AssertGuard/Assert/data_0',\n",
" u'LOSS_WSL/assert_broadcastable/AssertGuard/Assert/data_1',\n",
" u'LOSS_WSL/assert_broadcastable/AssertGuard/Assert/data_2',\n",
" u'LOSS_WSL/assert_broadcastable/AssertGuard/Assert/data_4',\n",
" u'LOSS_WSL/assert_broadcastable/AssertGuard/Assert/data_5',\n",
" u'LOSS_WSL/assert_broadcastable/AssertGuard/Assert/data_7',\n",
" u'LOSS_WSL/assert_broadcastable/AssertGuard/Assert',\n",
" u'LOSS_WSL/assert_broadcastable/AssertGuard/Assert/Switch',\n",
" u'LOSS_WSL/assert_broadcastable/AssertGuard/Assert/Switch_1',\n",
" u'LOSS_WSL/assert_broadcastable/AssertGuard/Assert/Switch_2',\n",
" u'LOSS_WSL/assert_broadcastable/AssertGuard/Assert/Switch_3',\n",
" u'LOSS_WSL/assert_broadcastable/AssertGuard/control_dependency_1',\n",
" u'LOSS_WSL/assert_broadcastable/AssertGuard/Merge',\n",
" u'LOSS_WSL/Mul',\n",
" u'LOSS_WSL/Const',\n",
" u'LOSS_WSL/Sum',\n",
" u'LOSS_WSL/num_present/Equal/y',\n",
" u'LOSS_WSL/num_present/Equal',\n",
" u'LOSS_WSL/num_present/zeros_like',\n",
" u'LOSS_WSL/num_present/ones_like/Shape',\n",
" u'LOSS_WSL/num_present/ones_like/Const',\n",
" u'LOSS_WSL/num_present/ones_like',\n",
" u'LOSS_WSL/num_present/Select',\n",
" u'LOSS_WSL/num_present/broadcast_weights/assert_broadcastable/weights/shape',\n",
" u'LOSS_WSL/num_present/broadcast_weights/assert_broadcastable/weights/rank',\n",
" u'LOSS_WSL/num_present/broadcast_weights/assert_broadcastable/values/shape',\n",
" u'LOSS_WSL/num_present/broadcast_weights/assert_broadcastable/values/rank',\n",
" u'LOSS_WSL/num_present/broadcast_weights/assert_broadcastable/is_scalar/x',\n",
" u'LOSS_WSL/num_present/broadcast_weights/assert_broadcastable/is_scalar',\n",
" u'LOSS_WSL/num_present/broadcast_weights/assert_broadcastable/is_valid_shape/Switch',\n",
" u'LOSS_WSL/num_present/broadcast_weights/assert_broadcastable/is_valid_shape/switch_t',\n",
" u'LOSS_WSL/num_present/broadcast_weights/assert_broadcastable/is_valid_shape/switch_f',\n",
" u'LOSS_WSL/num_present/broadcast_weights/assert_broadcastable/is_valid_shape/pred_id',\n",
" u'LOSS_WSL/num_present/broadcast_weights/assert_broadcastable/is_valid_shape/Switch_1',\n",
" u'LOSS_WSL/num_present/broadcast_weights/assert_broadcastable/is_valid_shape/has_valid_nonscalar_shape/is_same_rank',\n",
" u'LOSS_WSL/num_present/broadcast_weights/assert_broadcastable/is_valid_shape/has_valid_nonscalar_shape/is_same_rank/Switch',\n",
" u'LOSS_WSL/num_present/broadcast_weights/assert_broadcastable/is_valid_shape/has_valid_nonscalar_shape/is_same_rank/Switch_1',\n",
" u'LOSS_WSL/num_present/broadcast_weights/assert_broadcastable/is_valid_shape/has_valid_nonscalar_shape/Switch',\n",
" u'LOSS_WSL/num_present/broadcast_weights/assert_broadcastable/is_valid_shape/has_valid_nonscalar_shape/switch_t',\n",
" u'LOSS_WSL/num_present/broadcast_weights/assert_broadcastable/is_valid_shape/has_valid_nonscalar_shape/switch_f',\n",
" u'LOSS_WSL/num_present/broadcast_weights/assert_broadcastable/is_valid_shape/has_valid_nonscalar_shape/pred_id',\n",
" u'LOSS_WSL/num_present/broadcast_weights/assert_broadcastable/is_valid_shape/has_valid_nonscalar_shape/has_invalid_dims/ExpandDims/dim',\n",
" u'LOSS_WSL/num_present/broadcast_weights/assert_broadcastable/is_valid_shape/has_valid_nonscalar_shape/has_invalid_dims/ExpandDims',\n",
" u'LOSS_WSL/num_present/broadcast_weights/assert_broadcastable/is_valid_shape/has_valid_nonscalar_shape/has_invalid_dims/ExpandDims/Switch',\n",
" u'LOSS_WSL/num_present/broadcast_weights/assert_broadcastable/is_valid_shape/has_valid_nonscalar_shape/has_invalid_dims/ExpandDims/Switch_1',\n",
" u'LOSS_WSL/num_present/broadcast_weights/assert_broadcastable/is_valid_shape/has_valid_nonscalar_shape/has_invalid_dims/ones_like/Shape',\n",
" u'LOSS_WSL/num_present/broadcast_weights/assert_broadcastable/is_valid_shape/has_valid_nonscalar_shape/has_invalid_dims/ones_like/Const',\n",
" u'LOSS_WSL/num_present/broadcast_weights/assert_broadcastable/is_valid_shape/has_valid_nonscalar_shape/has_invalid_dims/ones_like',\n",
" u'LOSS_WSL/num_present/broadcast_weights/assert_broadcastable/is_valid_shape/has_valid_nonscalar_shape/has_invalid_dims/concat/axis',\n",
" u'LOSS_WSL/num_present/broadcast_weights/assert_broadcastable/is_valid_shape/has_valid_nonscalar_shape/has_invalid_dims/concat',\n",
" u'LOSS_WSL/num_present/broadcast_weights/assert_broadcastable/is_valid_shape/has_valid_nonscalar_shape/has_invalid_dims/ExpandDims_1/dim',\n",
" u'LOSS_WSL/num_present/broadcast_weights/assert_broadcastable/is_valid_shape/has_valid_nonscalar_shape/has_invalid_dims/ExpandDims_1',\n",
" u'LOSS_WSL/num_present/broadcast_weights/assert_broadcastable/is_valid_shape/has_valid_nonscalar_shape/has_invalid_dims/ExpandDims_1/Switch',\n",
" u'LOSS_WSL/num_present/broadcast_weights/assert_broadcastable/is_valid_shape/has_valid_nonscalar_shape/has_invalid_dims/ExpandDims_1/Switch_1',\n",
" u'LOSS_WSL/num_present/broadcast_weights/assert_broadcastable/is_valid_shape/has_valid_nonscalar_shape/has_invalid_dims/DenseToDenseSetOperation',\n",
" u'LOSS_WSL/num_present/broadcast_weights/assert_broadcastable/is_valid_shape/has_valid_nonscalar_shape/has_invalid_dims/num_invalid_dims',\n",
" u'LOSS_WSL/num_present/broadcast_weights/assert_broadcastable/is_valid_shape/has_valid_nonscalar_shape/has_invalid_dims/x',\n",
" u'LOSS_WSL/num_present/broadcast_weights/assert_broadcastable/is_valid_shape/has_valid_nonscalar_shape/has_invalid_dims',\n",
" u'LOSS_WSL/num_present/broadcast_weights/assert_broadcastable/is_valid_shape/has_valid_nonscalar_shape/Switch_1',\n",
" u'LOSS_WSL/num_present/broadcast_weights/assert_broadcastable/is_valid_shape/has_valid_nonscalar_shape/Merge',\n",
" u'LOSS_WSL/num_present/broadcast_weights/assert_broadcastable/is_valid_shape/Merge',\n",
" u'LOSS_WSL/num_present/broadcast_weights/assert_broadcastable/Const',\n",
" u'LOSS_WSL/num_present/broadcast_weights/assert_broadcastable/Const_1',\n",
" u'LOSS_WSL/num_present/broadcast_weights/assert_broadcastable/Const_2',\n",
" u'LOSS_WSL/num_present/broadcast_weights/assert_broadcastable/Const_3',\n",
" u'LOSS_WSL/num_present/broadcast_weights/assert_broadcastable/Const_4',\n",
" u'LOSS_WSL/num_present/broadcast_weights/assert_broadcastable/Const_5',\n",
" u'LOSS_WSL/num_present/broadcast_weights/assert_broadcastable/AssertGuard/Switch',\n",
" u'LOSS_WSL/num_present/broadcast_weights/assert_broadcastable/AssertGuard/switch_t',\n",
" u'LOSS_WSL/num_present/broadcast_weights/assert_broadcastable/AssertGuard/switch_f',\n",
" u'LOSS_WSL/num_present/broadcast_weights/assert_broadcastable/AssertGuard/pred_id',\n",
" u'LOSS_WSL/num_present/broadcast_weights/assert_broadcastable/AssertGuard/NoOp',\n",
" u'LOSS_WSL/num_present/broadcast_weights/assert_broadcastable/AssertGuard/control_dependency',\n",
" u'LOSS_WSL/num_present/broadcast_weights/assert_broadcastable/AssertGuard/Assert/data_0',\n",
" u'LOSS_WSL/num_present/broadcast_weights/assert_broadcastable/AssertGuard/Assert/data_1',\n",
" u'LOSS_WSL/num_present/broadcast_weights/assert_broadcastable/AssertGuard/Assert/data_2',\n",
" u'LOSS_WSL/num_present/broadcast_weights/assert_broadcastable/AssertGuard/Assert/data_4',\n",
" u'LOSS_WSL/num_present/broadcast_weights/assert_broadcastable/AssertGuard/Assert/data_5',\n",
" u'LOSS_WSL/num_present/broadcast_weights/assert_broadcastable/AssertGuard/Assert/data_7',\n",
" u'LOSS_WSL/num_present/broadcast_weights/assert_broadcastable/AssertGuard/Assert',\n",
" u'LOSS_WSL/num_present/broadcast_weights/assert_broadcastable/AssertGuard/Assert/Switch',\n",
" u'LOSS_WSL/num_present/broadcast_weights/assert_broadcastable/AssertGuard/Assert/Switch_1',\n",
" u'LOSS_WSL/num_present/broadcast_weights/assert_broadcastable/AssertGuard/Assert/Switch_2',\n",
" u'LOSS_WSL/num_present/broadcast_weights/assert_broadcastable/AssertGuard/Assert/Switch_3',\n",
" u'LOSS_WSL/num_present/broadcast_weights/assert_broadcastable/AssertGuard/control_dependency_1',\n",
" u'LOSS_WSL/num_present/broadcast_weights/assert_broadcastable/AssertGuard/Merge',\n",
" u'LOSS_WSL/num_present/broadcast_weights/ones_like/Shape',\n",
" u'LOSS_WSL/num_present/broadcast_weights/ones_like/Const',\n",
" u'LOSS_WSL/num_present/broadcast_weights/ones_like',\n",
" u'LOSS_WSL/num_present/broadcast_weights',\n",
" u'LOSS_WSL/num_present/Const',\n",
" u'LOSS_WSL/num_present',\n",
" u'LOSS_WSL/Const_1',\n",
" u'LOSS_WSL/Sum_1',\n",
" u'LOSS_WSL/Greater/y',\n",
" u'LOSS_WSL/Greater',\n",
" u'LOSS_WSL/Equal/y',\n",
" u'LOSS_WSL/Equal',\n",
" u'LOSS_WSL/ones_like/Shape',\n",
" u'LOSS_WSL/ones_like/Const',\n",
" u'LOSS_WSL/ones_like',\n",
" u'LOSS_WSL/Select',\n",
" u'LOSS_WSL/div',\n",
" u'LOSS_WSL/zeros_like',\n",
" u'LOSS_WSL/value',\n",
" u'gradients/LOSS_WSL/value_grad/zeros_like',\n",
" u'gradients/LOSS_WSL/value_grad/Select',\n",
" u'gradients/LOSS_WSL/value_grad/Select_1',\n",
" u'gradients/LOSS_WSL/value_grad/tuple/group_deps',\n",
" u'gradients/LOSS_WSL/value_grad/tuple/control_dependency',\n",
" u'gradients/LOSS_WSL/value_grad/tuple/control_dependency_1',\n",
" u'gradients/LOSS_WSL/div_grad/Shape',\n",
" u'gradients/LOSS_WSL/div_grad/Shape_1',\n",
" u'gradients/LOSS_WSL/div_grad/BroadcastGradientArgs',\n",
" u'gradients/LOSS_WSL/div_grad/RealDiv',\n",
" u'gradients/LOSS_WSL/div_grad/Sum',\n",
" u'gradients/LOSS_WSL/div_grad/Reshape',\n",
" u'gradients/LOSS_WSL/div_grad/Neg',\n",
" u'gradients/LOSS_WSL/div_grad/RealDiv_1',\n",
" u'gradients/LOSS_WSL/div_grad/RealDiv_2',\n",
" u'gradients/LOSS_WSL/div_grad/mul',\n",
" u'gradients/LOSS_WSL/div_grad/Sum_1',\n",
" u'gradients/LOSS_WSL/div_grad/Reshape_1',\n",
" u'gradients/LOSS_WSL/div_grad/tuple/group_deps',\n",
" u'gradients/LOSS_WSL/div_grad/tuple/control_dependency',\n",
" u'gradients/LOSS_WSL/div_grad/tuple/control_dependency_1',\n",
" u'gradients/LOSS_WSL/Sum_1_grad/Reshape/shape',\n",
" u'gradients/LOSS_WSL/Sum_1_grad/Reshape',\n",
" u'gradients/LOSS_WSL/Sum_1_grad/Const',\n",
" u'gradients/LOSS_WSL/Sum_1_grad/Tile',\n",
" u'gradients/LOSS_WSL/Select_grad/zeros_like',\n",
" u'gradients/LOSS_WSL/Select_grad/Select',\n",
" u'gradients/LOSS_WSL/Select_grad/Select_1',\n",
" u'gradients/LOSS_WSL/Select_grad/tuple/group_deps',\n",
" u'gradients/LOSS_WSL/Select_grad/tuple/control_dependency',\n",
" u'gradients/LOSS_WSL/Select_grad/tuple/control_dependency_1',\n",
" u'gradients/LOSS_WSL/Sum_grad/Reshape/shape',\n",
" u'gradients/LOSS_WSL/Sum_grad/Reshape',\n",
" u'gradients/LOSS_WSL/Sum_grad/Shape',\n",
" u'gradients/LOSS_WSL/Sum_grad/Tile',\n",
" u'gradients/LOSS_WSL/Mul_grad/Shape',\n",
" u'gradients/LOSS_WSL/Mul_grad/Shape_1',\n",
" u'gradients/LOSS_WSL/Mul_grad/BroadcastGradientArgs',\n",
" u'gradients/LOSS_WSL/Mul_grad/Mul',\n",
" u'gradients/LOSS_WSL/Mul_grad/Sum',\n",
" u'gradients/LOSS_WSL/Mul_grad/Reshape',\n",
" u'gradients/LOSS_WSL/Mul_grad/Mul_1',\n",
" u'gradients/LOSS_WSL/Mul_grad/Sum_1',\n",
" u'gradients/LOSS_WSL/Mul_grad/Reshape_1',\n",
" u'gradients/LOSS_WSL/Mul_grad/tuple/group_deps',\n",
" u'gradients/LOSS_WSL/Mul_grad/tuple/control_dependency',\n",
" u'gradients/LOSS_WSL/Mul_grad/tuple/control_dependency_1',\n",
" u'gradients/LOSS_WSL/num_present_grad/Reshape/shape',\n",
" u'gradients/LOSS_WSL/num_present_grad/Reshape',\n",
" u'gradients/LOSS_WSL/num_present_grad/Shape',\n",
" u'gradients/LOSS_WSL/num_present_grad/Tile',\n",
" u'gradients/LOSS_WSL/num_present/broadcast_weights_grad/Shape',\n",
" u'gradients/LOSS_WSL/num_present/broadcast_weights_grad/Shape_1',\n",
" u'gradients/LOSS_WSL/num_present/broadcast_weights_grad/BroadcastGradientArgs',\n",
" u'gradients/LOSS_WSL/num_present/broadcast_weights_grad/Mul',\n",
" u'gradients/LOSS_WSL/num_present/broadcast_weights_grad/Sum',\n",
" u'gradients/LOSS_WSL/num_present/broadcast_weights_grad/Reshape',\n",
" u'gradients/LOSS_WSL/num_present/broadcast_weights_grad/Mul_1',\n",
" u'gradients/LOSS_WSL/num_present/broadcast_weights_grad/Sum_1',\n",
" u'gradients/LOSS_WSL/num_present/broadcast_weights_grad/Reshape_1',\n",
" u'gradients/LOSS_WSL/num_present/broadcast_weights_grad/tuple/group_deps',\n",
" u'gradients/LOSS_WSL/num_present/broadcast_weights_grad/tuple/control_dependency',\n",
" u'gradients/LOSS_WSL/num_present/broadcast_weights_grad/tuple/control_dependency_1',\n",
" u'gradients/LOSS_WSL/num_present/broadcast_weights/ones_like_grad/Const',\n",
" u'gradients/LOSS_WSL/num_present/broadcast_weights/ones_like_grad/Sum',\n",
" u'gradients/LOSS_WSL/xentropy/Reshape_2_grad/Shape',\n",
" u'gradients/LOSS_WSL/xentropy/Reshape_2_grad/Reshape',\n",
" u'gradients/LOSS_WSL/xentropy_grad/ExpandDims/dim',\n",
" u'gradients/LOSS_WSL/xentropy_grad/ExpandDims',\n",
" u'gradients/LOSS_WSL/xentropy_grad/mul',\n",
" u'gradients/LOSS_WSL/xentropy_grad/LogSoftmax',\n",
" u'gradients/LOSS_WSL/xentropy_grad/Neg',\n",
" u'gradients/LOSS_WSL/xentropy_grad/ExpandDims_1/dim',\n",
" u'gradients/LOSS_WSL/xentropy_grad/ExpandDims_1',\n",
" u'gradients/LOSS_WSL/xentropy_grad/mul_1',\n",
" u'gradients/LOSS_WSL/xentropy_grad/tuple/group_deps',\n",
" u'gradients/LOSS_WSL/xentropy_grad/tuple/control_dependency',\n",
" u'gradients/LOSS_WSL/xentropy_grad/tuple/control_dependency_1',\n",
" u'gradients/LOSS_WSL/xentropy/Reshape_grad/Shape',\n",
" u'gradients/LOSS_WSL/xentropy/Reshape_grad/Reshape',\n",
" u'gradients/WSL_LOGIT/Softmax_grad/mul',\n",
" u'gradients/WSL_LOGIT/Softmax_grad/Sum/reduction_indices',\n",
" u'gradients/WSL_LOGIT/Softmax_grad/Sum',\n",
" u'gradients/WSL_LOGIT/Softmax_grad/Reshape/shape',\n",
" u'gradients/WSL_LOGIT/Softmax_grad/Reshape',\n",
" u'gradients/WSL_LOGIT/Softmax_grad/sub',\n",
" u'gradients/WSL_LOGIT/Softmax_grad/mul_1',\n",
" u'gradients/WSL_LOGIT/BiasAdd_grad/BiasAddGrad',\n",
" u'gradients/WSL_LOGIT/BiasAdd_grad/tuple/group_deps',\n",
" u'gradients/WSL_LOGIT/BiasAdd_grad/tuple/control_dependency',\n",
" u'gradients/WSL_LOGIT/BiasAdd_grad/tuple/control_dependency_1',\n",
" u'gradients/WSL_LOGIT/MatMul_grad/MatMul',\n",
" u'gradients/WSL_LOGIT/MatMul_grad/MatMul_1',\n",
" u'gradients/WSL_LOGIT/MatMul_grad/tuple/group_deps',\n",
" u'gradients/WSL_LOGIT/MatMul_grad/tuple/control_dependency',\n",
" u'gradients/WSL_LOGIT/MatMul_grad/tuple/control_dependency_1',\n",
" u'WSL_LOGIT/weights/Adam_wsl/Initializer/zeros/shape_as_tensor',\n",
" u'WSL_LOGIT/weights/Adam_wsl/Initializer/zeros/Const',\n",
" u'WSL_LOGIT/weights/Adam_wsl/Initializer/zeros',\n",
" u'WSL_LOGIT/weights/Adam_wsl',\n",
" u'WSL_LOGIT/weights/Adam_wsl/Assign',\n",
" u'WSL_LOGIT/weights/Adam_wsl/read',\n",
" u'WSL_LOGIT/weights/Adam_wsl_1/Initializer/zeros/shape_as_tensor',\n",
" u'WSL_LOGIT/weights/Adam_wsl_1/Initializer/zeros/Const',\n",
" u'WSL_LOGIT/weights/Adam_wsl_1/Initializer/zeros',\n",
" u'WSL_LOGIT/weights/Adam_wsl_1',\n",
" u'WSL_LOGIT/weights/Adam_wsl_1/Assign',\n",
" u'WSL_LOGIT/weights/Adam_wsl_1/read',\n",
" u'WSL_LOGIT/biases/Adam_wsl/Initializer/zeros',\n",
" u'WSL_LOGIT/biases/Adam_wsl',\n",
" u'WSL_LOGIT/biases/Adam_wsl/Assign',\n",
" u'WSL_LOGIT/biases/Adam_wsl/read',\n",
" u'WSL_LOGIT/biases/Adam_wsl_1/Initializer/zeros',\n",
" u'WSL_LOGIT/biases/Adam_wsl_1',\n",
" u'WSL_LOGIT/biases/Adam_wsl_1/Assign',\n",
" u'WSL_LOGIT/biases/Adam_wsl_1/read',\n",
" u'Adam_wsl/update_WSL_LOGIT/weights/ApplyAdam',\n",
" u'Adam_wsl/update_WSL_LOGIT/biases/ApplyAdam']"
]
},
"execution_count": 42,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"[n.name for n in tf.get_default_graph().as_graph_def().node if \"WSL\" in n.name]"
]
},
{
"cell_type": "code",
"execution_count": 43,
"metadata": {},
"outputs": [],
"source": [
"cam_weights = graph.get_tensor_by_name(\"WSL_LOGIT/weights:0\")\n",
"cam_bias = graph.get_tensor_by_name(\"WSL_LOGIT/biases:0\")\n",
"# conv_last : Class Activation Maps (CAM; total 024 maps)\n",
"# cam_weights : weights for each CAM"
]
},
{
"cell_type": "code",
"execution_count": 49,
"metadata": {},
"outputs": [],
"source": [
"from skimage.transform import resize\n",
"\n",
"def cam_upscaler(cam, cam_w, pred_):\n",
" cam = cam.reshape(-1, 1024).dot(cam_w)[:, pred_].reshape(24, 24)\n",
" cam = (cam - cam.min()) / (cam.max() - cam.min())\n",
" return resize(cam, (48, 48))\n",
" \n",
"def cam_localizer(chosen_sample, true_label):\n",
" # Class Activation Maps (CAM)\n",
" cam, cam_w, scores = sess.run([conv_last, cam_weights, logit], \n",
" feed_dict={X: whiten(chosen_sample.reshape(-1, 2304)), \n",
" is_training: False})\n",
" pred2, pred1 = np.argsort(scores[0])[-2:]\n",
" #print scores\n",
" cam1 = cam_upscaler(cam, cam_w, pred1)\n",
" cam2 = cam_upscaler(cam, cam_w, pred2)\n",
" \n",
" plt.figure(figsize=(12, 4))\n",
" plt.subplot(131)\n",
" plt.imshow(chosen_sample.reshape(48, 48), cmap=mpl.cm.gray)\n",
" plt.title(\"TRUE: {}\".format(true_label.split(\"_\")[-1].upper()))\n",
" plt.subplot(132)\n",
" plt.imshow(chosen_sample.reshape(48, 48), cmap=mpl.cm.gray, alpha=.4)\n",
" plt.imshow(cam1, alpha=.6)\n",
" plt.title(\"{}: {}\".format(fer[\"categories\"][pred1].split(\"_\")[-1].upper(), round(scores[0][pred1], 2)))\n",
" plt.subplot(133)\n",
" plt.imshow(chosen_sample.reshape(48, 48), cmap=mpl.cm.gray, alpha=.4)\n",
" plt.imshow(cam2, alpha=.6)\n",
" plt.title(\"{}: {}\".format(fer[\"categories\"][pred2].split(\"_\")[-1].upper(), round(scores[0][pred2], 2)))\n",
" return"
]
},
{
"cell_type": "code",
"execution_count": 45,
"metadata": {
"collapsed": true
},
"outputs": [
{
"data": {
"text/plain": [
"array([0, 3, 0, 4, 5, 2, 5, 2, 4, 5, 0, 5, 2, 2, 0, 2, 4, 3, 3, 2, 4, 3,\n",
" 2, 4, 2, 0, 2, 4, 2, 5, 0, 2, 2, 3, 4, 4, 4, 3, 2, 4, 0, 0, 2, 2,\n",
" 2, 5, 2, 0, 2, 0, 0, 2, 3, 3, 3, 5, 5, 5, 5, 3, 3, 0, 2, 3, 3, 5,\n",
" 5, 3, 4, 2, 3, 2, 2, 3, 2, 4, 3, 5, 2, 5, 2, 5, 4, 4, 2, 2, 5, 0,\n",
" 0, 5, 2, 0, 5, 2, 5, 0, 4, 3, 5, 3, 5, 4, 0, 5, 2, 0, 2, 3, 4, 3,\n",
" 0, 5, 2, 0, 4, 2, 2, 2, 2, 3, 4, 4, 2, 3, 0, 4, 4, 0, 4, 2, 0, 2,\n",
" 5, 3, 2, 4, 0, 2, 0, 0, 0, 0, 0, 0, 4, 2, 4, 2, 4, 5, 3, 2, 2, 5,\n",
" 3, 5, 4, 2, 2, 0, 3, 2, 3, 4, 3, 3, 0, 3, 0, 4, 2, 3, 0, 4, 2, 3,\n",
" 4, 5, 0, 0, 0, 4, 5, 0, 0, 2, 2, 4, 3, 4, 4, 5, 0, 0, 0, 0, 2, 2,\n",
" 0, 5, 5, 4, 5, 5, 4, 0, 0, 3, 0, 2, 0, 3, 2, 0, 3, 5, 5, 2, 0, 0,\n",
" 5, 0, 5, 2, 2, 5, 3, 5, 3, 0, 3, 4, 4, 3, 3, 4, 4, 2, 3, 4, 0, 0,\n",
" 4, 0, 2, 5, 3, 4, 5, 5, 3, 0, 3, 4, 5, 2, 0, 2, 0, 3, 3, 0, 0, 3,\n",
" 4, 0, 2, 0, 4, 2, 2, 4, 0, 2, 5, 5, 5, 4, 3, 2, 4, 4, 2, 2, 4, 2,\n",
" 3, 4, 2, 5, 3, 5, 2, 0, 4, 4, 0, 3, 2, 5, 5, 4, 4, 3, 2, 0, 5, 0,\n",
" 4, 3, 3, 3, 0, 0, 0, 5, 2, 4, 4, 0, 4, 5, 2, 5, 3, 3, 5, 0, 2, 3,\n",
" 0, 2, 5, 0, 4, 0, 3, 0, 2, 3, 0, 0, 0, 2, 5, 4, 5, 3, 2, 0, 3, 4,\n",
" 5, 4, 5, 3, 5, 2, 3, 3, 0, 4, 5, 5, 2, 0, 5, 4, 0, 5, 5, 2, 5, 2,\n",
" 5, 4, 0, 0, 0, 3, 0, 5, 4, 2, 3, 5, 2, 2, 4, 0, 3, 0, 5, 0, 2, 4,\n",
" 0, 5, 5, 2, 4, 0, 0, 3, 0, 2, 5, 4, 0, 4, 5, 5, 0, 2, 0, 2, 0, 3,\n",
" 5, 0, 5, 4, 4, 2, 2, 0, 0, 5, 0, 2, 4, 0, 3, 3, 2, 5, 2, 0, 4, 4,\n",
" 0, 4, 2, 3, 4, 2, 2, 3, 5, 5, 5, 3, 2, 3, 5, 5, 5, 0, 0, 4, 4, 0,\n",
" 4, 3, 4, 5, 5, 5, 0, 4, 0, 3, 3, 2, 2, 0, 4, 4, 0, 5, 3, 0, 3, 4,\n",
" 5, 0, 4, 5, 2, 2, 3, 5, 5, 2, 5, 4, 3, 4, 2, 4, 4, 5, 0, 4, 3, 3,\n",
" 5, 5, 5, 0, 5, 2])"
]
},
"execution_count": 45,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"sess.run(pred, feed_dict={X: whiten(xtrain[:512]), y: ytrain[:512], is_training: False})"
]
},
{
"cell_type": "code",
"execution_count": 51,
"metadata": {
"scrolled": false
},
"outputs": [
{
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 864x288 with 3 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"image/png": "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