In [1]:
import tensorflow as tf
from keras.datasets import mnist
from keras.utils import np_utils
import numpy as np
import matplotlib.pyplot as plt
plt.rcParams['image.cmap'] = 'gray'
%matplotlib inline


Using TensorFlow backend.

Loading the model.


In [2]:
# Restore model.
sess = tf.Session()    
#First let's load meta graph and restore weights
saver = tf.train.import_meta_graph('tf_mnist_model_layers/tf_mnist_model.ckpt.meta')
saver.restore(sess,tf.train.latest_checkpoint('tf_mnist_model_layers/'))


INFO:tensorflow:Restoring parameters from tf_mnist_model_layers/tf_mnist_model.ckpt

Loading the dataset


In [3]:
dataset = mnist.load_data()
train_data = dataset[0][0] / 255
train_data = train_data[..., np.newaxis].astype('float32')
train_labels = np_utils.to_categorical(dataset[0][1]).astype('float32')
test_data = dataset[1][0] / 255
test_data = test_data[..., np.newaxis].astype('float32')
test_labels = np_utils.to_categorical(dataset[1][1]).astype('float32')
plt.imshow(train_data[0, ..., 0])


Out[3]:
<matplotlib.image.AxesImage at 0x7fde82726518>

In [4]:
# Get the first input tensor.
network_input = sess.graph.get_operations()[0].outputs[0]
network_input


Out[4]:
<tf.Tensor 'Placeholder:0' shape=(?, 28, 28, 1) dtype=float32>

The TensorFlow graph

Look at all operations to find out the ones that are interesting for weights/activations.


In [5]:
sess.graph.get_operations()


Out[5]:
[<tf.Operation 'Placeholder' type=Placeholder>,
 <tf.Operation 'Placeholder_1' type=Placeholder>,
 <tf.Operation 'training/input' type=Const>,
 <tf.Operation 'training' type=PlaceholderWithDefault>,
 <tf.Operation 'conv2d_1/kernel/Initializer/truncated_normal/shape' type=Const>,
 <tf.Operation 'conv2d_1/kernel/Initializer/truncated_normal/mean' type=Const>,
 <tf.Operation 'conv2d_1/kernel/Initializer/truncated_normal/stddev' type=Const>,
 <tf.Operation 'conv2d_1/kernel/Initializer/truncated_normal/TruncatedNormal' type=TruncatedNormal>,
 <tf.Operation 'conv2d_1/kernel/Initializer/truncated_normal/mul' type=Mul>,
 <tf.Operation 'conv2d_1/kernel/Initializer/truncated_normal' type=Add>,
 <tf.Operation 'conv2d_1/kernel' type=VariableV2>,
 <tf.Operation 'conv2d_1/kernel/Assign' type=Assign>,
 <tf.Operation 'conv2d_1/kernel/read' type=Identity>,
 <tf.Operation 'conv2d_1/bias/Initializer/zeros' type=Const>,
 <tf.Operation 'conv2d_1/bias' type=VariableV2>,
 <tf.Operation 'conv2d_1/bias/Assign' type=Assign>,
 <tf.Operation 'conv2d_1/bias/read' type=Identity>,
 <tf.Operation 'conv2d_1/convolution/Shape' type=Const>,
 <tf.Operation 'conv2d_1/convolution/dilation_rate' type=Const>,
 <tf.Operation 'conv2d_1/convolution' type=Conv2D>,
 <tf.Operation 'conv2d_1/BiasAdd' type=BiasAdd>,
 <tf.Operation 'conv2d_1/Relu' type=Relu>,
 <tf.Operation 'max_pooling2d_1/MaxPool' type=MaxPool>,
 <tf.Operation 'conv2d_2/kernel/Initializer/truncated_normal/shape' type=Const>,
 <tf.Operation 'conv2d_2/kernel/Initializer/truncated_normal/mean' type=Const>,
 <tf.Operation 'conv2d_2/kernel/Initializer/truncated_normal/stddev' type=Const>,
 <tf.Operation 'conv2d_2/kernel/Initializer/truncated_normal/TruncatedNormal' type=TruncatedNormal>,
 <tf.Operation 'conv2d_2/kernel/Initializer/truncated_normal/mul' type=Mul>,
 <tf.Operation 'conv2d_2/kernel/Initializer/truncated_normal' type=Add>,
 <tf.Operation 'conv2d_2/kernel' type=VariableV2>,
 <tf.Operation 'conv2d_2/kernel/Assign' type=Assign>,
 <tf.Operation 'conv2d_2/kernel/read' type=Identity>,
 <tf.Operation 'conv2d_2/bias/Initializer/zeros' type=Const>,
 <tf.Operation 'conv2d_2/bias' type=VariableV2>,
 <tf.Operation 'conv2d_2/bias/Assign' type=Assign>,
 <tf.Operation 'conv2d_2/bias/read' type=Identity>,
 <tf.Operation 'conv2d_2/convolution/Shape' type=Const>,
 <tf.Operation 'conv2d_2/convolution/dilation_rate' type=Const>,
 <tf.Operation 'conv2d_2/convolution' type=Conv2D>,
 <tf.Operation 'conv2d_2/BiasAdd' type=BiasAdd>,
 <tf.Operation 'conv2d_2/Relu' type=Relu>,
 <tf.Operation 'dropout_1/cond/Switch' type=Switch>,
 <tf.Operation 'dropout_1/cond/switch_t' type=Identity>,
 <tf.Operation 'dropout_1/cond/switch_f' type=Identity>,
 <tf.Operation 'dropout_1/cond/pred_id' type=Identity>,
 <tf.Operation 'dropout_1/cond/dropout/keep_prob' type=Const>,
 <tf.Operation 'dropout_1/cond/dropout/Shape/Switch' type=Switch>,
 <tf.Operation 'dropout_1/cond/dropout/Shape' type=Shape>,
 <tf.Operation 'dropout_1/cond/dropout/random_uniform/min' type=Const>,
 <tf.Operation 'dropout_1/cond/dropout/random_uniform/max' type=Const>,
 <tf.Operation 'dropout_1/cond/dropout/random_uniform/RandomUniform' type=RandomUniform>,
 <tf.Operation 'dropout_1/cond/dropout/random_uniform/sub' type=Sub>,
 <tf.Operation 'dropout_1/cond/dropout/random_uniform/mul' type=Mul>,
 <tf.Operation 'dropout_1/cond/dropout/random_uniform' type=Add>,
 <tf.Operation 'dropout_1/cond/dropout/add' type=Add>,
 <tf.Operation 'dropout_1/cond/dropout/Floor' type=Floor>,
 <tf.Operation 'dropout_1/cond/dropout/div' type=RealDiv>,
 <tf.Operation 'dropout_1/cond/dropout/mul' type=Mul>,
 <tf.Operation 'dropout_1/cond/Identity/Switch' type=Switch>,
 <tf.Operation 'dropout_1/cond/Identity' type=Identity>,
 <tf.Operation 'dropout_1/cond/Merge' type=Merge>,
 <tf.Operation 'Flatten/Shape' type=Shape>,
 <tf.Operation 'Flatten/Slice/begin' type=Const>,
 <tf.Operation 'Flatten/Slice/size' type=Const>,
 <tf.Operation 'Flatten/Slice' type=Slice>,
 <tf.Operation 'Flatten/Slice_1/begin' type=Const>,
 <tf.Operation 'Flatten/Slice_1/size' type=Const>,
 <tf.Operation 'Flatten/Slice_1' type=Slice>,
 <tf.Operation 'Flatten/Const' type=Const>,
 <tf.Operation 'Flatten/Prod' type=Prod>,
 <tf.Operation 'Flatten/ExpandDims/dim' type=Const>,
 <tf.Operation 'Flatten/ExpandDims' type=ExpandDims>,
 <tf.Operation 'Flatten/concat/axis' type=Const>,
 <tf.Operation 'Flatten/concat' type=ConcatV2>,
 <tf.Operation 'Flatten/Reshape' type=Reshape>,
 <tf.Operation 'dense_1/kernel/Initializer/random_uniform/shape' type=Const>,
 <tf.Operation 'dense_1/kernel/Initializer/random_uniform/min' type=Const>,
 <tf.Operation 'dense_1/kernel/Initializer/random_uniform/max' type=Const>,
 <tf.Operation 'dense_1/kernel/Initializer/random_uniform/RandomUniform' type=RandomUniform>,
 <tf.Operation 'dense_1/kernel/Initializer/random_uniform/sub' type=Sub>,
 <tf.Operation 'dense_1/kernel/Initializer/random_uniform/mul' type=Mul>,
 <tf.Operation 'dense_1/kernel/Initializer/random_uniform' type=Add>,
 <tf.Operation 'dense_1/kernel' type=VariableV2>,
 <tf.Operation 'dense_1/kernel/Assign' type=Assign>,
 <tf.Operation 'dense_1/kernel/read' type=Identity>,
 <tf.Operation 'dense_1/bias/Initializer/zeros' type=Const>,
 <tf.Operation 'dense_1/bias' type=VariableV2>,
 <tf.Operation 'dense_1/bias/Assign' type=Assign>,
 <tf.Operation 'dense_1/bias/read' type=Identity>,
 <tf.Operation 'dense_1/MatMul' type=MatMul>,
 <tf.Operation 'dense_1/BiasAdd' type=BiasAdd>,
 <tf.Operation 'dense_1/Relu' type=Relu>,
 <tf.Operation 'dropout_2/cond/Switch' type=Switch>,
 <tf.Operation 'dropout_2/cond/switch_t' type=Identity>,
 <tf.Operation 'dropout_2/cond/switch_f' type=Identity>,
 <tf.Operation 'dropout_2/cond/pred_id' type=Identity>,
 <tf.Operation 'dropout_2/cond/dropout/keep_prob' type=Const>,
 <tf.Operation 'dropout_2/cond/dropout/Shape/Switch' type=Switch>,
 <tf.Operation 'dropout_2/cond/dropout/Shape' type=Shape>,
 <tf.Operation 'dropout_2/cond/dropout/random_uniform/min' type=Const>,
 <tf.Operation 'dropout_2/cond/dropout/random_uniform/max' type=Const>,
 <tf.Operation 'dropout_2/cond/dropout/random_uniform/RandomUniform' type=RandomUniform>,
 <tf.Operation 'dropout_2/cond/dropout/random_uniform/sub' type=Sub>,
 <tf.Operation 'dropout_2/cond/dropout/random_uniform/mul' type=Mul>,
 <tf.Operation 'dropout_2/cond/dropout/random_uniform' type=Add>,
 <tf.Operation 'dropout_2/cond/dropout/add' type=Add>,
 <tf.Operation 'dropout_2/cond/dropout/Floor' type=Floor>,
 <tf.Operation 'dropout_2/cond/dropout/div' type=RealDiv>,
 <tf.Operation 'dropout_2/cond/dropout/mul' type=Mul>,
 <tf.Operation 'dropout_2/cond/Identity/Switch' type=Switch>,
 <tf.Operation 'dropout_2/cond/Identity' type=Identity>,
 <tf.Operation 'dropout_2/cond/Merge' type=Merge>,
 <tf.Operation 'dense_2/kernel/Initializer/random_uniform/shape' type=Const>,
 <tf.Operation 'dense_2/kernel/Initializer/random_uniform/min' type=Const>,
 <tf.Operation 'dense_2/kernel/Initializer/random_uniform/max' type=Const>,
 <tf.Operation 'dense_2/kernel/Initializer/random_uniform/RandomUniform' type=RandomUniform>,
 <tf.Operation 'dense_2/kernel/Initializer/random_uniform/sub' type=Sub>,
 <tf.Operation 'dense_2/kernel/Initializer/random_uniform/mul' type=Mul>,
 <tf.Operation 'dense_2/kernel/Initializer/random_uniform' type=Add>,
 <tf.Operation 'dense_2/kernel' type=VariableV2>,
 <tf.Operation 'dense_2/kernel/Assign' type=Assign>,
 <tf.Operation 'dense_2/kernel/read' type=Identity>,
 <tf.Operation 'dense_2/bias/Initializer/zeros' type=Const>,
 <tf.Operation 'dense_2/bias' type=VariableV2>,
 <tf.Operation 'dense_2/bias/Assign' type=Assign>,
 <tf.Operation 'dense_2/bias/read' type=Identity>,
 <tf.Operation 'dense_2/MatMul' type=MatMul>,
 <tf.Operation 'dense_2/BiasAdd' type=BiasAdd>,
 <tf.Operation 'loss/Rank' type=Const>,
 <tf.Operation 'loss/Shape' type=Shape>,
 <tf.Operation 'loss/Rank_1' type=Const>,
 <tf.Operation 'loss/Shape_1' type=Shape>,
 <tf.Operation 'loss/Sub/y' type=Const>,
 <tf.Operation 'loss/Sub' type=Sub>,
 <tf.Operation 'loss/Slice/begin' type=Pack>,
 <tf.Operation 'loss/Slice/size' type=Const>,
 <tf.Operation 'loss/Slice' type=Slice>,
 <tf.Operation 'loss/concat/values_0' type=Const>,
 <tf.Operation 'loss/concat/axis' type=Const>,
 <tf.Operation 'loss/concat' type=ConcatV2>,
 <tf.Operation 'loss/Reshape' type=Reshape>,
 <tf.Operation 'loss/Rank_2' type=Const>,
 <tf.Operation 'loss/Shape_2' type=Shape>,
 <tf.Operation 'loss/Sub_1/y' type=Const>,
 <tf.Operation 'loss/Sub_1' type=Sub>,
 <tf.Operation 'loss/Slice_1/begin' type=Pack>,
 <tf.Operation 'loss/Slice_1/size' type=Const>,
 <tf.Operation 'loss/Slice_1' type=Slice>,
 <tf.Operation 'loss/concat_1/values_0' type=Const>,
 <tf.Operation 'loss/concat_1/axis' type=Const>,
 <tf.Operation 'loss/concat_1' type=ConcatV2>,
 <tf.Operation 'loss/Reshape_1' type=Reshape>,
 <tf.Operation 'loss/SoftmaxCrossEntropyWithLogits' type=SoftmaxCrossEntropyWithLogits>,
 <tf.Operation 'loss/Sub_2/y' type=Const>,
 <tf.Operation 'loss/Sub_2' type=Sub>,
 <tf.Operation 'loss/Slice_2/begin' type=Const>,
 <tf.Operation 'loss/Slice_2/size' type=Pack>,
 <tf.Operation 'loss/Slice_2' type=Slice>,
 <tf.Operation 'loss/Reshape_2' type=Reshape>,
 <tf.Operation 'loss/Const' type=Const>,
 <tf.Operation 'loss/Mean' type=Mean>,
 <tf.Operation 'gradients/Shape' type=Const>,
 <tf.Operation 'gradients/Const' type=Const>,
 <tf.Operation 'gradients/Fill' type=Fill>,
 <tf.Operation 'gradients/loss/Mean_grad/Reshape/shape' type=Const>,
 <tf.Operation 'gradients/loss/Mean_grad/Reshape' type=Reshape>,
 <tf.Operation 'gradients/loss/Mean_grad/Shape' type=Shape>,
 <tf.Operation 'gradients/loss/Mean_grad/Tile' type=Tile>,
 <tf.Operation 'gradients/loss/Mean_grad/Shape_1' type=Shape>,
 <tf.Operation 'gradients/loss/Mean_grad/Shape_2' type=Const>,
 <tf.Operation 'gradients/loss/Mean_grad/Const' type=Const>,
 <tf.Operation 'gradients/loss/Mean_grad/Prod' type=Prod>,
 <tf.Operation 'gradients/loss/Mean_grad/Const_1' type=Const>,
 <tf.Operation 'gradients/loss/Mean_grad/Prod_1' type=Prod>,
 <tf.Operation 'gradients/loss/Mean_grad/Maximum/y' type=Const>,
 <tf.Operation 'gradients/loss/Mean_grad/Maximum' type=Maximum>,
 <tf.Operation 'gradients/loss/Mean_grad/floordiv' type=FloorDiv>,
 <tf.Operation 'gradients/loss/Mean_grad/Cast' type=Cast>,
 <tf.Operation 'gradients/loss/Mean_grad/truediv' type=RealDiv>,
 <tf.Operation 'gradients/loss/Reshape_2_grad/Shape' type=Shape>,
 <tf.Operation 'gradients/loss/Reshape_2_grad/Reshape' type=Reshape>,
 <tf.Operation 'gradients/zeros_like' type=ZerosLike>,
 <tf.Operation 'gradients/loss/SoftmaxCrossEntropyWithLogits_grad/ExpandDims/dim' type=Const>,
 <tf.Operation 'gradients/loss/SoftmaxCrossEntropyWithLogits_grad/ExpandDims' type=ExpandDims>,
 <tf.Operation 'gradients/loss/SoftmaxCrossEntropyWithLogits_grad/mul' type=Mul>,
 <tf.Operation 'gradients/loss/Reshape_grad/Shape' type=Shape>,
 <tf.Operation 'gradients/loss/Reshape_grad/Reshape' type=Reshape>,
 <tf.Operation 'gradients/dense_2/BiasAdd_grad/BiasAddGrad' type=BiasAddGrad>,
 <tf.Operation 'gradients/dense_2/BiasAdd_grad/tuple/group_deps' type=NoOp>,
 <tf.Operation 'gradients/dense_2/BiasAdd_grad/tuple/control_dependency' type=Identity>,
 <tf.Operation 'gradients/dense_2/BiasAdd_grad/tuple/control_dependency_1' type=Identity>,
 <tf.Operation 'gradients/dense_2/MatMul_grad/MatMul' type=MatMul>,
 <tf.Operation 'gradients/dense_2/MatMul_grad/MatMul_1' type=MatMul>,
 <tf.Operation 'gradients/dense_2/MatMul_grad/tuple/group_deps' type=NoOp>,
 <tf.Operation 'gradients/dense_2/MatMul_grad/tuple/control_dependency' type=Identity>,
 <tf.Operation 'gradients/dense_2/MatMul_grad/tuple/control_dependency_1' type=Identity>,
 <tf.Operation 'gradients/dropout_2/cond/Merge_grad/cond_grad' type=Switch>,
 <tf.Operation 'gradients/dropout_2/cond/Merge_grad/tuple/group_deps' type=NoOp>,
 <tf.Operation 'gradients/dropout_2/cond/Merge_grad/tuple/control_dependency' type=Identity>,
 <tf.Operation 'gradients/dropout_2/cond/Merge_grad/tuple/control_dependency_1' type=Identity>,
 <tf.Operation 'gradients/dropout_2/cond/dropout/mul_grad/Shape' type=Shape>,
 <tf.Operation 'gradients/dropout_2/cond/dropout/mul_grad/Shape_1' type=Shape>,
 <tf.Operation 'gradients/dropout_2/cond/dropout/mul_grad/BroadcastGradientArgs' type=BroadcastGradientArgs>,
 <tf.Operation 'gradients/dropout_2/cond/dropout/mul_grad/mul' type=Mul>,
 <tf.Operation 'gradients/dropout_2/cond/dropout/mul_grad/Sum' type=Sum>,
 <tf.Operation 'gradients/dropout_2/cond/dropout/mul_grad/Reshape' type=Reshape>,
 <tf.Operation 'gradients/dropout_2/cond/dropout/mul_grad/mul_1' type=Mul>,
 <tf.Operation 'gradients/dropout_2/cond/dropout/mul_grad/Sum_1' type=Sum>,
 <tf.Operation 'gradients/dropout_2/cond/dropout/mul_grad/Reshape_1' type=Reshape>,
 <tf.Operation 'gradients/dropout_2/cond/dropout/mul_grad/tuple/group_deps' type=NoOp>,
 <tf.Operation 'gradients/dropout_2/cond/dropout/mul_grad/tuple/control_dependency' type=Identity>,
 <tf.Operation 'gradients/dropout_2/cond/dropout/mul_grad/tuple/control_dependency_1' type=Identity>,
 <tf.Operation 'gradients/Switch' type=Switch>,
 <tf.Operation 'gradients/Shape_1' type=Shape>,
 <tf.Operation 'gradients/zeros/Const' type=Const>,
 <tf.Operation 'gradients/zeros' type=Fill>,
 <tf.Operation 'gradients/dropout_2/cond/Identity/Switch_grad/cond_grad' type=Merge>,
 <tf.Operation 'gradients/dropout_2/cond/dropout/div_grad/Shape' type=Shape>,
 <tf.Operation 'gradients/dropout_2/cond/dropout/div_grad/Shape_1' type=Const>,
 <tf.Operation 'gradients/dropout_2/cond/dropout/div_grad/BroadcastGradientArgs' type=BroadcastGradientArgs>,
 <tf.Operation 'gradients/dropout_2/cond/dropout/div_grad/RealDiv' type=RealDiv>,
 <tf.Operation 'gradients/dropout_2/cond/dropout/div_grad/Sum' type=Sum>,
 <tf.Operation 'gradients/dropout_2/cond/dropout/div_grad/Reshape' type=Reshape>,
 <tf.Operation 'gradients/dropout_2/cond/dropout/div_grad/Neg' type=Neg>,
 <tf.Operation 'gradients/dropout_2/cond/dropout/div_grad/RealDiv_1' type=RealDiv>,
 <tf.Operation 'gradients/dropout_2/cond/dropout/div_grad/RealDiv_2' type=RealDiv>,
 <tf.Operation 'gradients/dropout_2/cond/dropout/div_grad/mul' type=Mul>,
 <tf.Operation 'gradients/dropout_2/cond/dropout/div_grad/Sum_1' type=Sum>,
 <tf.Operation 'gradients/dropout_2/cond/dropout/div_grad/Reshape_1' type=Reshape>,
 <tf.Operation 'gradients/dropout_2/cond/dropout/div_grad/tuple/group_deps' type=NoOp>,
 <tf.Operation 'gradients/dropout_2/cond/dropout/div_grad/tuple/control_dependency' type=Identity>,
 <tf.Operation 'gradients/dropout_2/cond/dropout/div_grad/tuple/control_dependency_1' type=Identity>,
 <tf.Operation 'gradients/Switch_1' type=Switch>,
 <tf.Operation 'gradients/Shape_2' type=Shape>,
 <tf.Operation 'gradients/zeros_1/Const' type=Const>,
 <tf.Operation 'gradients/zeros_1' type=Fill>,
 <tf.Operation 'gradients/dropout_2/cond/dropout/Shape/Switch_grad/cond_grad' type=Merge>,
 <tf.Operation 'gradients/AddN' type=AddN>,
 <tf.Operation 'gradients/dense_1/Relu_grad/ReluGrad' type=ReluGrad>,
 <tf.Operation 'gradients/dense_1/BiasAdd_grad/BiasAddGrad' type=BiasAddGrad>,
 <tf.Operation 'gradients/dense_1/BiasAdd_grad/tuple/group_deps' type=NoOp>,
 <tf.Operation 'gradients/dense_1/BiasAdd_grad/tuple/control_dependency' type=Identity>,
 <tf.Operation 'gradients/dense_1/BiasAdd_grad/tuple/control_dependency_1' type=Identity>,
 <tf.Operation 'gradients/dense_1/MatMul_grad/MatMul' type=MatMul>,
 <tf.Operation 'gradients/dense_1/MatMul_grad/MatMul_1' type=MatMul>,
 <tf.Operation 'gradients/dense_1/MatMul_grad/tuple/group_deps' type=NoOp>,
 <tf.Operation 'gradients/dense_1/MatMul_grad/tuple/control_dependency' type=Identity>,
 <tf.Operation 'gradients/dense_1/MatMul_grad/tuple/control_dependency_1' type=Identity>,
 <tf.Operation 'gradients/Flatten/Reshape_grad/Shape' type=Shape>,
 <tf.Operation 'gradients/Flatten/Reshape_grad/Reshape' type=Reshape>,
 <tf.Operation 'gradients/dropout_1/cond/Merge_grad/cond_grad' type=Switch>,
 <tf.Operation 'gradients/dropout_1/cond/Merge_grad/tuple/group_deps' type=NoOp>,
 <tf.Operation 'gradients/dropout_1/cond/Merge_grad/tuple/control_dependency' type=Identity>,
 <tf.Operation 'gradients/dropout_1/cond/Merge_grad/tuple/control_dependency_1' type=Identity>,
 <tf.Operation 'gradients/dropout_1/cond/dropout/mul_grad/Shape' type=Shape>,
 <tf.Operation 'gradients/dropout_1/cond/dropout/mul_grad/Shape_1' type=Shape>,
 <tf.Operation 'gradients/dropout_1/cond/dropout/mul_grad/BroadcastGradientArgs' type=BroadcastGradientArgs>,
 <tf.Operation 'gradients/dropout_1/cond/dropout/mul_grad/mul' type=Mul>,
 <tf.Operation 'gradients/dropout_1/cond/dropout/mul_grad/Sum' type=Sum>,
 <tf.Operation 'gradients/dropout_1/cond/dropout/mul_grad/Reshape' type=Reshape>,
 <tf.Operation 'gradients/dropout_1/cond/dropout/mul_grad/mul_1' type=Mul>,
 <tf.Operation 'gradients/dropout_1/cond/dropout/mul_grad/Sum_1' type=Sum>,
 <tf.Operation 'gradients/dropout_1/cond/dropout/mul_grad/Reshape_1' type=Reshape>,
 <tf.Operation 'gradients/dropout_1/cond/dropout/mul_grad/tuple/group_deps' type=NoOp>,
 <tf.Operation 'gradients/dropout_1/cond/dropout/mul_grad/tuple/control_dependency' type=Identity>,
 <tf.Operation 'gradients/dropout_1/cond/dropout/mul_grad/tuple/control_dependency_1' type=Identity>,
 <tf.Operation 'gradients/Switch_2' type=Switch>,
 <tf.Operation 'gradients/Shape_3' type=Shape>,
 <tf.Operation 'gradients/zeros_2/Const' type=Const>,
 <tf.Operation 'gradients/zeros_2' type=Fill>,
 <tf.Operation 'gradients/dropout_1/cond/Identity/Switch_grad/cond_grad' type=Merge>,
 <tf.Operation 'gradients/dropout_1/cond/dropout/div_grad/Shape' type=Shape>,
 <tf.Operation 'gradients/dropout_1/cond/dropout/div_grad/Shape_1' type=Const>,
 <tf.Operation 'gradients/dropout_1/cond/dropout/div_grad/BroadcastGradientArgs' type=BroadcastGradientArgs>,
 <tf.Operation 'gradients/dropout_1/cond/dropout/div_grad/RealDiv' type=RealDiv>,
 <tf.Operation 'gradients/dropout_1/cond/dropout/div_grad/Sum' type=Sum>,
 <tf.Operation 'gradients/dropout_1/cond/dropout/div_grad/Reshape' type=Reshape>,
 <tf.Operation 'gradients/dropout_1/cond/dropout/div_grad/Neg' type=Neg>,
 <tf.Operation 'gradients/dropout_1/cond/dropout/div_grad/RealDiv_1' type=RealDiv>,
 <tf.Operation 'gradients/dropout_1/cond/dropout/div_grad/RealDiv_2' type=RealDiv>,
 <tf.Operation 'gradients/dropout_1/cond/dropout/div_grad/mul' type=Mul>,
 <tf.Operation 'gradients/dropout_1/cond/dropout/div_grad/Sum_1' type=Sum>,
 <tf.Operation 'gradients/dropout_1/cond/dropout/div_grad/Reshape_1' type=Reshape>,
 <tf.Operation 'gradients/dropout_1/cond/dropout/div_grad/tuple/group_deps' type=NoOp>,
 <tf.Operation 'gradients/dropout_1/cond/dropout/div_grad/tuple/control_dependency' type=Identity>,
 <tf.Operation 'gradients/dropout_1/cond/dropout/div_grad/tuple/control_dependency_1' type=Identity>,
 <tf.Operation 'gradients/Switch_3' type=Switch>,
 <tf.Operation 'gradients/Shape_4' type=Shape>,
 <tf.Operation 'gradients/zeros_3/Const' type=Const>,
 <tf.Operation 'gradients/zeros_3' type=Fill>,
 <tf.Operation 'gradients/dropout_1/cond/dropout/Shape/Switch_grad/cond_grad' type=Merge>,
 <tf.Operation 'gradients/AddN_1' type=AddN>,
 <tf.Operation 'gradients/conv2d_2/Relu_grad/ReluGrad' type=ReluGrad>,
 <tf.Operation 'gradients/conv2d_2/BiasAdd_grad/BiasAddGrad' type=BiasAddGrad>,
 <tf.Operation 'gradients/conv2d_2/BiasAdd_grad/tuple/group_deps' type=NoOp>,
 <tf.Operation 'gradients/conv2d_2/BiasAdd_grad/tuple/control_dependency' type=Identity>,
 <tf.Operation 'gradients/conv2d_2/BiasAdd_grad/tuple/control_dependency_1' type=Identity>,
 <tf.Operation 'gradients/conv2d_2/convolution_grad/Shape' type=Shape>,
 <tf.Operation 'gradients/conv2d_2/convolution_grad/Conv2DBackpropInput' type=Conv2DBackpropInput>,
 <tf.Operation 'gradients/conv2d_2/convolution_grad/Shape_1' type=Const>,
 <tf.Operation 'gradients/conv2d_2/convolution_grad/Conv2DBackpropFilter' type=Conv2DBackpropFilter>,
 <tf.Operation 'gradients/conv2d_2/convolution_grad/tuple/group_deps' type=NoOp>,
 <tf.Operation 'gradients/conv2d_2/convolution_grad/tuple/control_dependency' type=Identity>,
 <tf.Operation 'gradients/conv2d_2/convolution_grad/tuple/control_dependency_1' type=Identity>,
 <tf.Operation 'gradients/max_pooling2d_1/MaxPool_grad/MaxPoolGrad' type=MaxPoolGrad>,
 <tf.Operation 'gradients/conv2d_1/Relu_grad/ReluGrad' type=ReluGrad>,
 <tf.Operation 'gradients/conv2d_1/BiasAdd_grad/BiasAddGrad' type=BiasAddGrad>,
 <tf.Operation 'gradients/conv2d_1/BiasAdd_grad/tuple/group_deps' type=NoOp>,
 <tf.Operation 'gradients/conv2d_1/BiasAdd_grad/tuple/control_dependency' type=Identity>,
 <tf.Operation 'gradients/conv2d_1/BiasAdd_grad/tuple/control_dependency_1' type=Identity>,
 <tf.Operation 'gradients/conv2d_1/convolution_grad/Shape' type=Shape>,
 <tf.Operation 'gradients/conv2d_1/convolution_grad/Conv2DBackpropInput' type=Conv2DBackpropInput>,
 <tf.Operation 'gradients/conv2d_1/convolution_grad/Shape_1' type=Const>,
 <tf.Operation 'gradients/conv2d_1/convolution_grad/Conv2DBackpropFilter' type=Conv2DBackpropFilter>,
 <tf.Operation 'gradients/conv2d_1/convolution_grad/tuple/group_deps' type=NoOp>,
 <tf.Operation 'gradients/conv2d_1/convolution_grad/tuple/control_dependency' type=Identity>,
 <tf.Operation 'gradients/conv2d_1/convolution_grad/tuple/control_dependency_1' type=Identity>,
 <tf.Operation 'beta1_power/initial_value' type=Const>,
 <tf.Operation 'beta1_power' type=VariableV2>,
 <tf.Operation 'beta1_power/Assign' type=Assign>,
 <tf.Operation 'beta1_power/read' type=Identity>,
 <tf.Operation 'beta2_power/initial_value' type=Const>,
 <tf.Operation 'beta2_power' type=VariableV2>,
 <tf.Operation 'beta2_power/Assign' type=Assign>,
 <tf.Operation 'beta2_power/read' type=Identity>,
 <tf.Operation 'conv2d_1/kernel/Adam/Initializer/zeros' type=Const>,
 <tf.Operation 'conv2d_1/kernel/Adam' type=VariableV2>,
 <tf.Operation 'conv2d_1/kernel/Adam/Assign' type=Assign>,
 <tf.Operation 'conv2d_1/kernel/Adam/read' type=Identity>,
 <tf.Operation 'conv2d_1/kernel/Adam_1/Initializer/zeros' type=Const>,
 <tf.Operation 'conv2d_1/kernel/Adam_1' type=VariableV2>,
 <tf.Operation 'conv2d_1/kernel/Adam_1/Assign' type=Assign>,
 <tf.Operation 'conv2d_1/kernel/Adam_1/read' type=Identity>,
 <tf.Operation 'conv2d_1/bias/Adam/Initializer/zeros' type=Const>,
 <tf.Operation 'conv2d_1/bias/Adam' type=VariableV2>,
 <tf.Operation 'conv2d_1/bias/Adam/Assign' type=Assign>,
 <tf.Operation 'conv2d_1/bias/Adam/read' type=Identity>,
 <tf.Operation 'conv2d_1/bias/Adam_1/Initializer/zeros' type=Const>,
 <tf.Operation 'conv2d_1/bias/Adam_1' type=VariableV2>,
 <tf.Operation 'conv2d_1/bias/Adam_1/Assign' type=Assign>,
 <tf.Operation 'conv2d_1/bias/Adam_1/read' type=Identity>,
 <tf.Operation 'conv2d_2/kernel/Adam/Initializer/zeros' type=Const>,
 <tf.Operation 'conv2d_2/kernel/Adam' type=VariableV2>,
 <tf.Operation 'conv2d_2/kernel/Adam/Assign' type=Assign>,
 <tf.Operation 'conv2d_2/kernel/Adam/read' type=Identity>,
 <tf.Operation 'conv2d_2/kernel/Adam_1/Initializer/zeros' type=Const>,
 <tf.Operation 'conv2d_2/kernel/Adam_1' type=VariableV2>,
 <tf.Operation 'conv2d_2/kernel/Adam_1/Assign' type=Assign>,
 <tf.Operation 'conv2d_2/kernel/Adam_1/read' type=Identity>,
 <tf.Operation 'conv2d_2/bias/Adam/Initializer/zeros' type=Const>,
 <tf.Operation 'conv2d_2/bias/Adam' type=VariableV2>,
 <tf.Operation 'conv2d_2/bias/Adam/Assign' type=Assign>,
 <tf.Operation 'conv2d_2/bias/Adam/read' type=Identity>,
 <tf.Operation 'conv2d_2/bias/Adam_1/Initializer/zeros' type=Const>,
 <tf.Operation 'conv2d_2/bias/Adam_1' type=VariableV2>,
 <tf.Operation 'conv2d_2/bias/Adam_1/Assign' type=Assign>,
 <tf.Operation 'conv2d_2/bias/Adam_1/read' type=Identity>,
 <tf.Operation 'dense_1/kernel/Adam/Initializer/zeros' type=Const>,
 <tf.Operation 'dense_1/kernel/Adam' type=VariableV2>,
 <tf.Operation 'dense_1/kernel/Adam/Assign' type=Assign>,
 <tf.Operation 'dense_1/kernel/Adam/read' type=Identity>,
 <tf.Operation 'dense_1/kernel/Adam_1/Initializer/zeros' type=Const>,
 <tf.Operation 'dense_1/kernel/Adam_1' type=VariableV2>,
 <tf.Operation 'dense_1/kernel/Adam_1/Assign' type=Assign>,
 <tf.Operation 'dense_1/kernel/Adam_1/read' type=Identity>,
 <tf.Operation 'dense_1/bias/Adam/Initializer/zeros' type=Const>,
 <tf.Operation 'dense_1/bias/Adam' type=VariableV2>,
 <tf.Operation 'dense_1/bias/Adam/Assign' type=Assign>,
 <tf.Operation 'dense_1/bias/Adam/read' type=Identity>,
 <tf.Operation 'dense_1/bias/Adam_1/Initializer/zeros' type=Const>,
 <tf.Operation 'dense_1/bias/Adam_1' type=VariableV2>,
 <tf.Operation 'dense_1/bias/Adam_1/Assign' type=Assign>,
 <tf.Operation 'dense_1/bias/Adam_1/read' type=Identity>,
 <tf.Operation 'dense_2/kernel/Adam/Initializer/zeros' type=Const>,
 <tf.Operation 'dense_2/kernel/Adam' type=VariableV2>,
 <tf.Operation 'dense_2/kernel/Adam/Assign' type=Assign>,
 <tf.Operation 'dense_2/kernel/Adam/read' type=Identity>,
 <tf.Operation 'dense_2/kernel/Adam_1/Initializer/zeros' type=Const>,
 <tf.Operation 'dense_2/kernel/Adam_1' type=VariableV2>,
 <tf.Operation 'dense_2/kernel/Adam_1/Assign' type=Assign>,
 <tf.Operation 'dense_2/kernel/Adam_1/read' type=Identity>,
 <tf.Operation 'dense_2/bias/Adam/Initializer/zeros' type=Const>,
 <tf.Operation 'dense_2/bias/Adam' type=VariableV2>,
 <tf.Operation 'dense_2/bias/Adam/Assign' type=Assign>,
 <tf.Operation 'dense_2/bias/Adam/read' type=Identity>,
 <tf.Operation 'dense_2/bias/Adam_1/Initializer/zeros' type=Const>,
 <tf.Operation 'dense_2/bias/Adam_1' type=VariableV2>,
 <tf.Operation 'dense_2/bias/Adam_1/Assign' type=Assign>,
 <tf.Operation 'dense_2/bias/Adam_1/read' type=Identity>,
 <tf.Operation 'Adam/learning_rate' type=Const>,
 <tf.Operation 'Adam/beta1' type=Const>,
 <tf.Operation 'Adam/beta2' type=Const>,
 <tf.Operation 'Adam/epsilon' type=Const>,
 <tf.Operation 'Adam/update_conv2d_1/kernel/ApplyAdam' type=ApplyAdam>,
 <tf.Operation 'Adam/update_conv2d_1/bias/ApplyAdam' type=ApplyAdam>,
 <tf.Operation 'Adam/update_conv2d_2/kernel/ApplyAdam' type=ApplyAdam>,
 <tf.Operation 'Adam/update_conv2d_2/bias/ApplyAdam' type=ApplyAdam>,
 <tf.Operation 'Adam/update_dense_1/kernel/ApplyAdam' type=ApplyAdam>,
 <tf.Operation 'Adam/update_dense_1/bias/ApplyAdam' type=ApplyAdam>,
 <tf.Operation 'Adam/update_dense_2/kernel/ApplyAdam' type=ApplyAdam>,
 <tf.Operation 'Adam/update_dense_2/bias/ApplyAdam' type=ApplyAdam>,
 <tf.Operation 'Adam/mul' type=Mul>,
 <tf.Operation 'Adam/Assign' type=Assign>,
 <tf.Operation 'Adam/mul_1' type=Mul>,
 <tf.Operation 'Adam/Assign_1' type=Assign>,
 <tf.Operation 'Adam' type=NoOp>,
 <tf.Operation 'ArgMax/dimension' type=Const>,
 <tf.Operation 'ArgMax' type=ArgMax>,
 <tf.Operation 'ArgMax_1/dimension' type=Const>,
 <tf.Operation 'ArgMax_1' type=ArgMax>,
 <tf.Operation 'Equal' type=Equal>,
 <tf.Operation 'Cast' type=Cast>,
 <tf.Operation 'Const' type=Const>,
 <tf.Operation 'Mean' type=Mean>,
 <tf.Operation 'init' type=NoOp>,
 <tf.Operation 'save/Const' type=Const>,
 <tf.Operation 'save/SaveV2/tensor_names' type=Const>,
 <tf.Operation 'save/SaveV2/shape_and_slices' type=Const>,
 <tf.Operation 'save/SaveV2' type=SaveV2>,
 <tf.Operation 'save/control_dependency' type=Identity>,
 <tf.Operation 'save/RestoreV2/tensor_names' type=Const>,
 <tf.Operation 'save/RestoreV2/shape_and_slices' type=Const>,
 <tf.Operation 'save/RestoreV2' type=RestoreV2>,
 <tf.Operation 'save/Assign' type=Assign>,
 <tf.Operation 'save/RestoreV2_1/tensor_names' type=Const>,
 <tf.Operation 'save/RestoreV2_1/shape_and_slices' type=Const>,
 <tf.Operation 'save/RestoreV2_1' type=RestoreV2>,
 <tf.Operation 'save/Assign_1' type=Assign>,
 <tf.Operation 'save/RestoreV2_2/tensor_names' type=Const>,
 <tf.Operation 'save/RestoreV2_2/shape_and_slices' type=Const>,
 <tf.Operation 'save/RestoreV2_2' type=RestoreV2>,
 <tf.Operation 'save/Assign_2' type=Assign>,
 <tf.Operation 'save/RestoreV2_3/tensor_names' type=Const>,
 <tf.Operation 'save/RestoreV2_3/shape_and_slices' type=Const>,
 <tf.Operation 'save/RestoreV2_3' type=RestoreV2>,
 <tf.Operation 'save/Assign_3' type=Assign>,
 <tf.Operation 'save/RestoreV2_4/tensor_names' type=Const>,
 <tf.Operation 'save/RestoreV2_4/shape_and_slices' type=Const>,
 <tf.Operation 'save/RestoreV2_4' type=RestoreV2>,
 <tf.Operation 'save/Assign_4' type=Assign>,
 <tf.Operation 'save/RestoreV2_5/tensor_names' type=Const>,
 <tf.Operation 'save/RestoreV2_5/shape_and_slices' type=Const>,
 <tf.Operation 'save/RestoreV2_5' type=RestoreV2>,
 <tf.Operation 'save/Assign_5' type=Assign>,
 <tf.Operation 'save/RestoreV2_6/tensor_names' type=Const>,
 <tf.Operation 'save/RestoreV2_6/shape_and_slices' type=Const>,
 <tf.Operation 'save/RestoreV2_6' type=RestoreV2>,
 <tf.Operation 'save/Assign_6' type=Assign>,
 <tf.Operation 'save/RestoreV2_7/tensor_names' type=Const>,
 <tf.Operation 'save/RestoreV2_7/shape_and_slices' type=Const>,
 <tf.Operation 'save/RestoreV2_7' type=RestoreV2>,
 <tf.Operation 'save/Assign_7' type=Assign>,
 <tf.Operation 'save/RestoreV2_8/tensor_names' type=Const>,
 <tf.Operation 'save/RestoreV2_8/shape_and_slices' type=Const>,
 <tf.Operation 'save/RestoreV2_8' type=RestoreV2>,
 <tf.Operation 'save/Assign_8' type=Assign>,
 <tf.Operation 'save/RestoreV2_9/tensor_names' type=Const>,
 <tf.Operation 'save/RestoreV2_9/shape_and_slices' type=Const>,
 <tf.Operation 'save/RestoreV2_9' type=RestoreV2>,
 <tf.Operation 'save/Assign_9' type=Assign>,
 <tf.Operation 'save/RestoreV2_10/tensor_names' type=Const>,
 <tf.Operation 'save/RestoreV2_10/shape_and_slices' type=Const>,
 <tf.Operation 'save/RestoreV2_10' type=RestoreV2>,
 <tf.Operation 'save/Assign_10' type=Assign>,
 <tf.Operation 'save/RestoreV2_11/tensor_names' type=Const>,
 <tf.Operation 'save/RestoreV2_11/shape_and_slices' type=Const>,
 <tf.Operation 'save/RestoreV2_11' type=RestoreV2>,
 <tf.Operation 'save/Assign_11' type=Assign>,
 <tf.Operation 'save/RestoreV2_12/tensor_names' type=Const>,
 <tf.Operation 'save/RestoreV2_12/shape_and_slices' type=Const>,
 <tf.Operation 'save/RestoreV2_12' type=RestoreV2>,
 <tf.Operation 'save/Assign_12' type=Assign>,
 <tf.Operation 'save/RestoreV2_13/tensor_names' type=Const>,
 <tf.Operation 'save/RestoreV2_13/shape_and_slices' type=Const>,
 <tf.Operation 'save/RestoreV2_13' type=RestoreV2>,
 <tf.Operation 'save/Assign_13' type=Assign>,
 <tf.Operation 'save/RestoreV2_14/tensor_names' type=Const>,
 <tf.Operation 'save/RestoreV2_14/shape_and_slices' type=Const>,
 <tf.Operation 'save/RestoreV2_14' type=RestoreV2>,
 <tf.Operation 'save/Assign_14' type=Assign>,
 <tf.Operation 'save/RestoreV2_15/tensor_names' type=Const>,
 <tf.Operation 'save/RestoreV2_15/shape_and_slices' type=Const>,
 <tf.Operation 'save/RestoreV2_15' type=RestoreV2>,
 <tf.Operation 'save/Assign_15' type=Assign>,
 <tf.Operation 'save/RestoreV2_16/tensor_names' type=Const>,
 <tf.Operation 'save/RestoreV2_16/shape_and_slices' type=Const>,
 <tf.Operation 'save/RestoreV2_16' type=RestoreV2>,
 <tf.Operation 'save/Assign_16' type=Assign>,
 <tf.Operation 'save/RestoreV2_17/tensor_names' type=Const>,
 <tf.Operation 'save/RestoreV2_17/shape_and_slices' type=Const>,
 <tf.Operation 'save/RestoreV2_17' type=RestoreV2>,
 <tf.Operation 'save/Assign_17' type=Assign>,
 <tf.Operation 'save/RestoreV2_18/tensor_names' type=Const>,
 <tf.Operation 'save/RestoreV2_18/shape_and_slices' type=Const>,
 <tf.Operation 'save/RestoreV2_18' type=RestoreV2>,
 <tf.Operation 'save/Assign_18' type=Assign>,
 <tf.Operation 'save/RestoreV2_19/tensor_names' type=Const>,
 <tf.Operation 'save/RestoreV2_19/shape_and_slices' type=Const>,
 <tf.Operation 'save/RestoreV2_19' type=RestoreV2>,
 <tf.Operation 'save/Assign_19' type=Assign>,
 <tf.Operation 'save/RestoreV2_20/tensor_names' type=Const>,
 <tf.Operation 'save/RestoreV2_20/shape_and_slices' type=Const>,
 <tf.Operation 'save/RestoreV2_20' type=RestoreV2>,
 <tf.Operation 'save/Assign_20' type=Assign>,
 <tf.Operation 'save/RestoreV2_21/tensor_names' type=Const>,
 <tf.Operation 'save/RestoreV2_21/shape_and_slices' type=Const>,
 <tf.Operation 'save/RestoreV2_21' type=RestoreV2>,
 <tf.Operation 'save/Assign_21' type=Assign>,
 <tf.Operation 'save/RestoreV2_22/tensor_names' type=Const>,
 <tf.Operation 'save/RestoreV2_22/shape_and_slices' type=Const>,
 <tf.Operation 'save/RestoreV2_22' type=RestoreV2>,
 <tf.Operation 'save/Assign_22' type=Assign>,
 <tf.Operation 'save/RestoreV2_23/tensor_names' type=Const>,
 <tf.Operation 'save/RestoreV2_23/shape_and_slices' type=Const>,
 <tf.Operation 'save/RestoreV2_23' type=RestoreV2>,
 <tf.Operation 'save/Assign_23' type=Assign>,
 <tf.Operation 'save/RestoreV2_24/tensor_names' type=Const>,
 <tf.Operation 'save/RestoreV2_24/shape_and_slices' type=Const>,
 <tf.Operation 'save/RestoreV2_24' type=RestoreV2>,
 <tf.Operation 'save/Assign_24' type=Assign>,
 <tf.Operation 'save/RestoreV2_25/tensor_names' type=Const>,
 <tf.Operation 'save/RestoreV2_25/shape_and_slices' type=Const>,
 <tf.Operation 'save/RestoreV2_25' type=RestoreV2>,
 <tf.Operation 'save/Assign_25' type=Assign>,
 <tf.Operation 'save/restore_all' type=NoOp>]

TensorFlow exposes a graph API in which nodes correspond to operations and directed edges correspond to to tensors flowing from one operation to the next. Operations know their respective input and output tensors. Tensors know by which operations they get produced and for which operations they serve as input. c.f. https://www.tensorflow.org/extend/tool_developers/


In [6]:
conv_op = sess.graph.get_operation_by_name('conv2d_1/convolution')
print('inputs: ', list(conv_op.inputs))
print('outputs: ', list(conv_op.outputs))


inputs:  [<tf.Tensor 'Placeholder:0' shape=(?, 28, 28, 1) dtype=float32>, <tf.Tensor 'conv2d_1/kernel/read:0' shape=(3, 3, 1, 32) dtype=float32>]
outputs:  [<tf.Tensor 'conv2d_1/convolution:0' shape=(?, 26, 26, 32) dtype=float32>]

In [7]:
weight_tensor = conv_op.inputs[1]
weight_tensor


Out[7]:
<tf.Tensor 'conv2d_1/kernel/read:0' shape=(3, 3, 1, 32) dtype=float32>

In [10]:
# Producer ops for the tensor.
weight_tensor.op


Out[10]:
<tf.Operation 'conv2d_1/kernel/read' type=Identity>

In [11]:
# Consumer ops for the tensor.
weight_tensor.consumers()


Out[11]:
[<tf.Operation 'conv2d_1/convolution' type=Conv2D>,
 <tf.Operation 'gradients/conv2d_1/convolution_grad/Conv2DBackpropInput' type=Conv2DBackpropInput>]

Getting the weights

For getting the weights we need to run the output tensor of operations that read the weights or the seconde input tensor of the actual MatMul/Conv operations.


In [18]:
weight_read_op = sess.graph.get_operation_by_name('conv2d_1/kernel/read')
weight_read_op


Out[18]:
<tf.Operation 'conv2d_1/kernel/read' type=Identity>

In [19]:
conv_op = sess.graph.get_operation_by_name('conv2d_1/convolution')
conv_op


Out[19]:
<tf.Operation 'conv2d_1/convolution' type=Conv2D>

In [20]:
weights_1 = sess.run(weight_read_op.outputs[0])
weights_2 = sess.run(conv_op.inputs[-1])
np.all(weights_1 == weights_2)


Out[20]:
True

Looking at the actual kernels.


In [21]:
print(weights_1.shape)
for i in range(32):
    plt.imshow(weights_1[..., 0, i])
    plt.show()


(3, 3, 1, 32)

In [22]:
weights_1[..., 0, 0]


Out[22]:
array([[-0.08219472,  0.01501322,  0.03917561],
       [ 0.13132864,  0.04290215, -0.04941976],
       [-0.05186096, -0.03700988,  0.18301845]], dtype=float32)

The same goes for the bias.


In [23]:
bias_add_op = sess.graph.get_operation_by_name('conv2d_1/BiasAdd')
bias_add_op


Out[23]:
<tf.Operation 'conv2d_1/BiasAdd' type=BiasAdd>

In [24]:
bias = sess.run(bias_add_op.inputs[-1])
bias


Out[24]:
array([  2.55220849e-03,  -6.17763377e-04,   4.65408294e-03,
         1.22981519e-02,  -2.34646210e-03,  -2.23787036e-04,
        -3.72230512e-04,   2.21268404e-02,   2.86802351e-02,
        -5.76844672e-03,  -2.51290301e-04,   1.05109112e-02,
         4.26664911e-02,  -4.79708280e-04,  -1.47018407e-04,
         3.36357169e-02,   7.37800947e-05,   8.38877633e-04,
         7.63600506e-03,   2.40804045e-04,   8.00278410e-03,
        -1.05535528e-02,   3.01947235e-03,   9.05721821e-03,
         2.59847904e-04,   8.11665133e-03,  -1.28647589e-04,
         3.09362952e-02,  -2.05803127e-03,  -3.35510704e-04,
         1.95620786e-02,  -4.01624449e-04], dtype=float32)

Getting the activations and net inputs

Activations and net inputs can be found as the output tensors of the respective operations. Slices of the example code here are used to unit test the network package.


In [30]:
activation_op = sess.graph.get_operation_by_name('conv2d_1/Relu')
activation_op.outputs[0]


Out[30]:
<tf.Tensor 'conv2d_1/Relu:0' shape=(?, 26, 26, 32) dtype=float32>

In [31]:
activations = sess.run(activation_op.outputs[0], feed_dict={network_input: test_data[0:1]})
activations.shape


Out[31]:
(1, 26, 26, 32)

Look at the activations


In [35]:
for i in range(32):
    plt.imshow(activations[0, ..., i])
    plt.show()



In [36]:
activations[0, 5:10, 5:10, 0]


Out[36]:
array([[ 0.12313882,  0.07273569,  0.05022647,  0.        ,  0.        ],
       [ 0.1309115 ,  0.14641027,  0.18909475,  0.19199452,  0.16788514],
       [ 0.09613925,  0.1401405 ,  0.14798687,  0.1795305 ,  0.20586434],
       [ 0.04382331,  0.0247027 ,  0.02338777,  0.        ,  0.02700226],
       [ 0.02401066,  0.        ,  0.        ,  0.01109774,  0.00698234]], dtype=float32)

In [39]:
net_input_op = sess.graph.get_operation_by_name('conv2d_1/BiasAdd')
net_input_op.outputs[0]


Out[39]:
<tf.Tensor 'conv2d_1/BiasAdd:0' shape=(?, 26, 26, 32) dtype=float32>

In [40]:
net_inputs = sess.run(net_input_op.outputs[0], feed_dict={network_input: test_data[0:1]})
net_inputs.shape


Out[40]:
(1, 26, 26, 32)

In [41]:
for i in range(32):
    plt.imshow(net_inputs[0, ..., i])
    plt.show()



In [42]:
net_inputs[0, 5:10, 5:10, 0]


Out[42]:
array([[ 0.12313882,  0.07273569,  0.05022647, -0.00863712, -0.01102792],
       [ 0.1309115 ,  0.14641027,  0.18909475,  0.19199452,  0.16788514],
       [ 0.09613925,  0.1401405 ,  0.14798687,  0.1795305 ,  0.20586434],
       [ 0.04382331,  0.0247027 ,  0.02338777, -0.00067293,  0.02700226],
       [ 0.02401066, -0.00127091, -0.01244084,  0.01109774,  0.00698234]], dtype=float32)

Getting input and output shape

For each tensor the shape can be retrieved as a TensorShape object or as a list.


In [64]:
conv_op.inputs[0].shape


Out[64]:
TensorShape([Dimension(None), Dimension(28), Dimension(28), Dimension(1)])

In [65]:
conv_op.inputs[0].shape.as_list()


Out[65]:
[None, 28, 28, 1]

Getting layer properties

Internally TensorFlow represents graph as protobufs that only define nodes with their inputs. This definition can either be retrieved as globally graph.graph_def as as op.node_def for every single operation.


In [50]:
sess.graph_def


Out[50]:
node {
  name: "Placeholder"
  op: "Placeholder"
  attr {
    key: "dtype"
    value {
      type: DT_FLOAT
    }
  }
  attr {
    key: "shape"
    value {
      shape {
        dim {
          size: -1
        }
        dim {
          size: 28
        }
        dim {
          size: 28
        }
        dim {
          size: 1
        }
      }
    }
  }
}
node {
  name: "Placeholder_1"
  op: "Placeholder"
  attr {
    key: "dtype"
    value {
      type: DT_FLOAT
    }
  }
  attr {
    key: "shape"
    value {
      shape {
        dim {
          size: -1
        }
        dim {
          size: 10
        }
      }
    }
  }
}
node {
  name: "training/input"
  op: "Const"
  attr {
    key: "dtype"
    value {
      type: DT_BOOL
    }
  }
  attr {
    key: "value"
    value {
      tensor {
        dtype: DT_BOOL
        tensor_shape {
        }
        bool_val: false
      }
    }
  }
}
node {
  name: "training"
  op: "PlaceholderWithDefault"
  input: "training/input"
  attr {
    key: "dtype"
    value {
      type: DT_BOOL
    }
  }
  attr {
    key: "shape"
    value {
      shape {
      }
    }
  }
}
node {
  name: "conv2d_1/kernel/Initializer/truncated_normal/shape"
  op: "Const"
  attr {
    key: "_class"
    value {
      list {
        s: "loc:@conv2d_1/kernel"
      }
    }
  }
  attr {
    key: "dtype"
    value {
      type: DT_INT32
    }
  }
  attr {
    key: "value"
    value {
      tensor {
        dtype: DT_INT32
        tensor_shape {
          dim {
            size: 4
          }
        }
        tensor_content: "\003\000\000\000\003\000\000\000\001\000\000\000 \000\000\000"
      }
    }
  }
}
node {
  name: "conv2d_1/kernel/Initializer/truncated_normal/mean"
  op: "Const"
  attr {
    key: "_class"
    value {
      list {
        s: "loc:@conv2d_1/kernel"
      }
    }
  }
  attr {
    key: "dtype"
    value {
      type: DT_FLOAT
    }
  }
  attr {
    key: "value"
    value {
      tensor {
        dtype: DT_FLOAT
        tensor_shape {
        }
        float_val: 0.0
      }
    }
  }
}
node {
  name: "conv2d_1/kernel/Initializer/truncated_normal/stddev"
  op: "Const"
  attr {
    key: "_class"
    value {
      list {
        s: "loc:@conv2d_1/kernel"
      }
    }
  }
  attr {
    key: "dtype"
    value {
      type: DT_FLOAT
    }
  }
  attr {
    key: "value"
    value {
      tensor {
        dtype: DT_FLOAT
        tensor_shape {
        }
        float_val: 0.10000000149011612
      }
    }
  }
}
node {
  name: "conv2d_1/kernel/Initializer/truncated_normal/TruncatedNormal"
  op: "TruncatedNormal"
  input: "conv2d_1/kernel/Initializer/truncated_normal/shape"
  attr {
    key: "T"
    value {
      type: DT_INT32
    }
  }
  attr {
    key: "_class"
    value {
      list {
        s: "loc:@conv2d_1/kernel"
      }
    }
  }
  attr {
    key: "dtype"
    value {
      type: DT_FLOAT
    }
  }
  attr {
    key: "seed"
    value {
      i: 0
    }
  }
  attr {
    key: "seed2"
    value {
      i: 0
    }
  }
}
node {
  name: "conv2d_1/kernel/Initializer/truncated_normal/mul"
  op: "Mul"
  input: "conv2d_1/kernel/Initializer/truncated_normal/TruncatedNormal"
  input: "conv2d_1/kernel/Initializer/truncated_normal/stddev"
  attr {
    key: "T"
    value {
      type: DT_FLOAT
    }
  }
  attr {
    key: "_class"
    value {
      list {
        s: "loc:@conv2d_1/kernel"
      }
    }
  }
}
node {
  name: "conv2d_1/kernel/Initializer/truncated_normal"
  op: "Add"
  input: "conv2d_1/kernel/Initializer/truncated_normal/mul"
  input: "conv2d_1/kernel/Initializer/truncated_normal/mean"
  attr {
    key: "T"
    value {
      type: DT_FLOAT
    }
  }
  attr {
    key: "_class"
    value {
      list {
        s: "loc:@conv2d_1/kernel"
      }
    }
  }
}
node {
  name: "conv2d_1/kernel"
  op: "VariableV2"
  attr {
    key: "_class"
    value {
      list {
        s: "loc:@conv2d_1/kernel"
      }
    }
  }
  attr {
    key: "container"
    value {
      s: ""
    }
  }
  attr {
    key: "dtype"
    value {
      type: DT_FLOAT
    }
  }
  attr {
    key: "shape"
    value {
      shape {
        dim {
          size: 3
        }
        dim {
          size: 3
        }
        dim {
          size: 1
        }
        dim {
          size: 32
        }
      }
    }
  }
  attr {
    key: "shared_name"
    value {
      s: ""
    }
  }
}
node {
  name: "conv2d_1/kernel/Assign"
  op: "Assign"
  input: "conv2d_1/kernel"
  input: "conv2d_1/kernel/Initializer/truncated_normal"
  attr {
    key: "T"
    value {
      type: DT_FLOAT
    }
  }
  attr {
    key: "_class"
    value {
      list {
        s: "loc:@conv2d_1/kernel"
      }
    }
  }
  attr {
    key: "use_locking"
    value {
      b: true
    }
  }
  attr {
    key: "validate_shape"
    value {
      b: true
    }
  }
}
node {
  name: "conv2d_1/kernel/read"
  op: "Identity"
  input: "conv2d_1/kernel"
  attr {
    key: "T"
    value {
      type: DT_FLOAT
    }
  }
  attr {
    key: "_class"
    value {
      list {
        s: "loc:@conv2d_1/kernel"
      }
    }
  }
}
node {
  name: "conv2d_1/bias/Initializer/zeros"
  op: "Const"
  attr {
    key: "_class"
    value {
      list {
        s: "loc:@conv2d_1/bias"
      }
    }
  }
  attr {
    key: "dtype"
    value {
      type: DT_FLOAT
    }
  }
  attr {
    key: "value"
    value {
      tensor {
        dtype: DT_FLOAT
        tensor_shape {
          dim {
            size: 32
          }
        }
        float_val: 0.0
      }
    }
  }
}
node {
  name: "conv2d_1/bias"
  op: "VariableV2"
  attr {
    key: "_class"
    value {
      list {
        s: "loc:@conv2d_1/bias"
      }
    }
  }
  attr {
    key: "container"
    value {
      s: ""
    }
  }
  attr {
    key: "dtype"
    value {
      type: DT_FLOAT
    }
  }
  attr {
    key: "shape"
    value {
      shape {
        dim {
          size: 32
        }
      }
    }
  }
  attr {
    key: "shared_name"
    value {
      s: ""
    }
  }
}
node {
  name: "conv2d_1/bias/Assign"
  op: "Assign"
  input: "conv2d_1/bias"
  input: "conv2d_1/bias/Initializer/zeros"
  attr {
    key: "T"
    value {
      type: DT_FLOAT
    }
  }
  attr {
    key: "_class"
    value {
      list {
        s: "loc:@conv2d_1/bias"
      }
    }
  }
  attr {
    key: "use_locking"
    value {
      b: true
    }
  }
  attr {
    key: "validate_shape"
    value {
      b: true
    }
  }
}
node {
  name: "conv2d_1/bias/read"
  op: "Identity"
  input: "conv2d_1/bias"
  attr {
    key: "T"
    value {
      type: DT_FLOAT
    }
  }
  attr {
    key: "_class"
    value {
      list {
        s: "loc:@conv2d_1/bias"
      }
    }
  }
}
node {
  name: "conv2d_1/convolution/Shape"
  op: "Const"
  attr {
    key: "dtype"
    value {
      type: DT_INT32
    }
  }
  attr {
    key: "value"
    value {
      tensor {
        dtype: DT_INT32
        tensor_shape {
          dim {
            size: 4
          }
        }
        tensor_content: "\003\000\000\000\003\000\000\000\001\000\000\000 \000\000\000"
      }
    }
  }
}
node {
  name: "conv2d_1/convolution/dilation_rate"
  op: "Const"
  attr {
    key: "dtype"
    value {
      type: DT_INT32
    }
  }
  attr {
    key: "value"
    value {
      tensor {
        dtype: DT_INT32
        tensor_shape {
          dim {
            size: 2
          }
        }
        tensor_content: "\001\000\000\000\001\000\000\000"
      }
    }
  }
}
node {
  name: "conv2d_1/convolution"
  op: "Conv2D"
  input: "Placeholder"
  input: "conv2d_1/kernel/read"
  attr {
    key: "T"
    value {
      type: DT_FLOAT
    }
  }
  attr {
    key: "data_format"
    value {
      s: "NHWC"
    }
  }
  attr {
    key: "padding"
    value {
      s: "VALID"
    }
  }
  attr {
    key: "strides"
    value {
      list {
        i: 1
        i: 1
        i: 1
        i: 1
      }
    }
  }
  attr {
    key: "use_cudnn_on_gpu"
    value {
      b: true
    }
  }
}
node {
  name: "conv2d_1/BiasAdd"
  op: "BiasAdd"
  input: "conv2d_1/convolution"
  input: "conv2d_1/bias/read"
  attr {
    key: "T"
    value {
      type: DT_FLOAT
    }
  }
  attr {
    key: "data_format"
    value {
      s: "NHWC"
    }
  }
}
node {
  name: "conv2d_1/Relu"
  op: "Relu"
  input: "conv2d_1/BiasAdd"
  attr {
    key: "T"
    value {
      type: DT_FLOAT
    }
  }
}
node {
  name: "max_pooling2d_1/MaxPool"
  op: "MaxPool"
  input: "conv2d_1/Relu"
  attr {
    key: "T"
    value {
      type: DT_FLOAT
    }
  }
  attr {
    key: "data_format"
    value {
      s: "NHWC"
    }
  }
  attr {
    key: "ksize"
    value {
      list {
        i: 1
        i: 2
        i: 2
        i: 1
      }
    }
  }
  attr {
    key: "padding"
    value {
      s: "VALID"
    }
  }
  attr {
    key: "strides"
    value {
      list {
        i: 1
        i: 2
        i: 2
        i: 1
      }
    }
  }
}
node {
  name: "conv2d_2/kernel/Initializer/truncated_normal/shape"
  op: "Const"
  attr {
    key: "_class"
    value {
      list {
        s: "loc:@conv2d_2/kernel"
      }
    }
  }
  attr {
    key: "dtype"
    value {
      type: DT_INT32
    }
  }
  attr {
    key: "value"
    value {
      tensor {
        dtype: DT_INT32
        tensor_shape {
          dim {
            size: 4
          }
        }
        tensor_content: "\003\000\000\000\003\000\000\000 \000\000\000 \000\000\000"
      }
    }
  }
}
node {
  name: "conv2d_2/kernel/Initializer/truncated_normal/mean"
  op: "Const"
  attr {
    key: "_class"
    value {
      list {
        s: "loc:@conv2d_2/kernel"
      }
    }
  }
  attr {
    key: "dtype"
    value {
      type: DT_FLOAT
    }
  }
  attr {
    key: "value"
    value {
      tensor {
        dtype: DT_FLOAT
        tensor_shape {
        }
        float_val: 0.0
      }
    }
  }
}
node {
  name: "conv2d_2/kernel/Initializer/truncated_normal/stddev"
  op: "Const"
  attr {
    key: "_class"
    value {
      list {
        s: "loc:@conv2d_2/kernel"
      }
    }
  }
  attr {
    key: "dtype"
    value {
      type: DT_FLOAT
    }
  }
  attr {
    key: "value"
    value {
      tensor {
        dtype: DT_FLOAT
        tensor_shape {
        }
        float_val: 0.10000000149011612
      }
    }
  }
}
node {
  name: "conv2d_2/kernel/Initializer/truncated_normal/TruncatedNormal"
  op: "TruncatedNormal"
  input: "conv2d_2/kernel/Initializer/truncated_normal/shape"
  attr {
    key: "T"
    value {
      type: DT_INT32
    }
  }
  attr {
    key: "_class"
    value {
      list {
        s: "loc:@conv2d_2/kernel"
      }
    }
  }
  attr {
    key: "dtype"
    value {
      type: DT_FLOAT
    }
  }
  attr {
    key: "seed"
    value {
      i: 0
    }
  }
  attr {
    key: "seed2"
    value {
      i: 0
    }
  }
}
node {
  name: "conv2d_2/kernel/Initializer/truncated_normal/mul"
  op: "Mul"
  input: "conv2d_2/kernel/Initializer/truncated_normal/TruncatedNormal"
  input: "conv2d_2/kernel/Initializer/truncated_normal/stddev"
  attr {
    key: "T"
    value {
      type: DT_FLOAT
    }
  }
  attr {
    key: "_class"
    value {
      list {
        s: "loc:@conv2d_2/kernel"
      }
    }
  }
}
node {
  name: "conv2d_2/kernel/Initializer/truncated_normal"
  op: "Add"
  input: "conv2d_2/kernel/Initializer/truncated_normal/mul"
  input: "conv2d_2/kernel/Initializer/truncated_normal/mean"
  attr {
    key: "T"
    value {
      type: DT_FLOAT
    }
  }
  attr {
    key: "_class"
    value {
      list {
        s: "loc:@conv2d_2/kernel"
      }
    }
  }
}
node {
  name: "conv2d_2/kernel"
  op: "VariableV2"
  attr {
    key: "_class"
    value {
      list {
        s: "loc:@conv2d_2/kernel"
      }
    }
  }
  attr {
    key: "container"
    value {
      s: ""
    }
  }
  attr {
    key: "dtype"
    value {
      type: DT_FLOAT
    }
  }
  attr {
    key: "shape"
    value {
      shape {
        dim {
          size: 3
        }
        dim {
          size: 3
        }
        dim {
          size: 32
        }
        dim {
          size: 32
        }
      }
    }
  }
  attr {
    key: "shared_name"
    value {
      s: ""
    }
  }
}
node {
  name: "conv2d_2/kernel/Assign"
  op: "Assign"
  input: "conv2d_2/kernel"
  input: "conv2d_2/kernel/Initializer/truncated_normal"
  attr {
    key: "T"
    value {
      type: DT_FLOAT
    }
  }
  attr {
    key: "_class"
    value {
      list {
        s: "loc:@conv2d_2/kernel"
      }
    }
  }
  attr {
    key: "use_locking"
    value {
      b: true
    }
  }
  attr {
    key: "validate_shape"
    value {
      b: true
    }
  }
}
node {
  name: "conv2d_2/kernel/read"
  op: "Identity"
  input: "conv2d_2/kernel"
  attr {
    key: "T"
    value {
      type: DT_FLOAT
    }
  }
  attr {
    key: "_class"
    value {
      list {
        s: "loc:@conv2d_2/kernel"
      }
    }
  }
}
node {
  name: "conv2d_2/bias/Initializer/zeros"
  op: "Const"
  attr {
    key: "_class"
    value {
      list {
        s: "loc:@conv2d_2/bias"
      }
    }
  }
  attr {
    key: "dtype"
    value {
      type: DT_FLOAT
    }
  }
  attr {
    key: "value"
    value {
      tensor {
        dtype: DT_FLOAT
        tensor_shape {
          dim {
            size: 32
          }
        }
        float_val: 0.0
      }
    }
  }
}
node {
  name: "conv2d_2/bias"
  op: "VariableV2"
  attr {
    key: "_class"
    value {
      list {
        s: "loc:@conv2d_2/bias"
      }
    }
  }
  attr {
    key: "container"
    value {
      s: ""
    }
  }
  attr {
    key: "dtype"
    value {
      type: DT_FLOAT
    }
  }
  attr {
    key: "shape"
    value {
      shape {
        dim {
          size: 32
        }
      }
    }
  }
  attr {
    key: "shared_name"
    value {
      s: ""
    }
  }
}
node {
  name: "conv2d_2/bias/Assign"
  op: "Assign"
  input: "conv2d_2/bias"
  input: "conv2d_2/bias/Initializer/zeros"
  attr {
    key: "T"
    value {
      type: DT_FLOAT
    }
  }
  attr {
    key: "_class"
    value {
      list {
        s: "loc:@conv2d_2/bias"
      }
    }
  }
  attr {
    key: "use_locking"
    value {
      b: true
    }
  }
  attr {
    key: "validate_shape"
    value {
      b: true
    }
  }
}
node {
  name: "conv2d_2/bias/read"
  op: "Identity"
  input: "conv2d_2/bias"
  attr {
    key: "T"
    value {
      type: DT_FLOAT
    }
  }
  attr {
    key: "_class"
    value {
      list {
        s: "loc:@conv2d_2/bias"
      }
    }
  }
}
node {
  name: "conv2d_2/convolution/Shape"
  op: "Const"
  attr {
    key: "dtype"
    value {
      type: DT_INT32
    }
  }
  attr {
    key: "value"
    value {
      tensor {
        dtype: DT_INT32
        tensor_shape {
          dim {
            size: 4
          }
        }
        tensor_content: "\003\000\000\000\003\000\000\000 \000\000\000 \000\000\000"
      }
    }
  }
}
node {
  name: "conv2d_2/convolution/dilation_rate"
  op: "Const"
  attr {
    key: "dtype"
    value {
      type: DT_INT32
    }
  }
  attr {
    key: "value"
    value {
      tensor {
        dtype: DT_INT32
        tensor_shape {
          dim {
            size: 2
          }
        }
        tensor_content: "\001\000\000\000\001\000\000\000"
      }
    }
  }
}
node {
  name: "conv2d_2/convolution"
  op: "Conv2D"
  input: "max_pooling2d_1/MaxPool"
  input: "conv2d_2/kernel/read"
  attr {
    key: "T"
    value {
      type: DT_FLOAT
    }
  }
  attr {
    key: "data_format"
    value {
      s: "NHWC"
    }
  }
  attr {
    key: "padding"
    value {
      s: "VALID"
    }
  }
  attr {
    key: "strides"
    value {
      list {
        i: 1
        i: 1
        i: 1
        i: 1
      }
    }
  }
  attr {
    key: "use_cudnn_on_gpu"
    value {
      b: true
    }
  }
}
node {
  name: "conv2d_2/BiasAdd"
  op: "BiasAdd"
  input: "conv2d_2/convolution"
  input: "conv2d_2/bias/read"
  attr {
    key: "T"
    value {
      type: DT_FLOAT
    }
  }
  attr {
    key: "data_format"
    value {
      s: "NHWC"
    }
  }
}
node {
  name: "conv2d_2/Relu"
  op: "Relu"
  input: "conv2d_2/BiasAdd"
  attr {
    key: "T"
    value {
      type: DT_FLOAT
    }
  }
}
node {
  name: "dropout_1/cond/Switch"
  op: "Switch"
  input: "training"
  input: "training"
  attr {
    key: "T"
    value {
      type: DT_BOOL
    }
  }
}
node {
  name: "dropout_1/cond/switch_t"
  op: "Identity"
  input: "dropout_1/cond/Switch:1"
  attr {
    key: "T"
    value {
      type: DT_BOOL
    }
  }
}
node {
  name: "dropout_1/cond/switch_f"
  op: "Identity"
  input: "dropout_1/cond/Switch"
  attr {
    key: "T"
    value {
      type: DT_BOOL
    }
  }
}
node {
  name: "dropout_1/cond/pred_id"
  op: "Identity"
  input: "training"
  attr {
    key: "T"
    value {
      type: DT_BOOL
    }
  }
}
node {
  name: "dropout_1/cond/dropout/keep_prob"
  op: "Const"
  input: "^dropout_1/cond/switch_t"
  attr {
    key: "dtype"
    value {
      type: DT_FLOAT
    }
  }
  attr {
    key: "value"
    value {
      tensor {
        dtype: DT_FLOAT
        tensor_shape {
        }
        float_val: 0.75
      }
    }
  }
}
node {
  name: "dropout_1/cond/dropout/Shape/Switch"
  op: "Switch"
  input: "conv2d_2/Relu"
  input: "dropout_1/cond/pred_id"
  attr {
    key: "T"
    value {
      type: DT_FLOAT
    }
  }
  attr {
    key: "_class"
    value {
      list {
        s: "loc:@conv2d_2/Relu"
      }
    }
  }
}
node {
  name: "dropout_1/cond/dropout/Shape"
  op: "Shape"
  input: "dropout_1/cond/dropout/Shape/Switch:1"
  attr {
    key: "T"
    value {
      type: DT_FLOAT
    }
  }
  attr {
    key: "out_type"
    value {
      type: DT_INT32
    }
  }
}
node {
  name: "dropout_1/cond/dropout/random_uniform/min"
  op: "Const"
  input: "^dropout_1/cond/switch_t"
  attr {
    key: "dtype"
    value {
      type: DT_FLOAT
    }
  }
  attr {
    key: "value"
    value {
      tensor {
        dtype: DT_FLOAT
        tensor_shape {
        }
        float_val: 0.0
      }
    }
  }
}
node {
  name: "dropout_1/cond/dropout/random_uniform/max"
  op: "Const"
  input: "^dropout_1/cond/switch_t"
  attr {
    key: "dtype"
    value {
      type: DT_FLOAT
    }
  }
  attr {
    key: "value"
    value {
      tensor {
        dtype: DT_FLOAT
        tensor_shape {
        }
        float_val: 1.0
      }
    }
  }
}
node {
  name: "dropout_1/cond/dropout/random_uniform/RandomUniform"
  op: "RandomUniform"
  input: "dropout_1/cond/dropout/Shape"
  attr {
    key: "T"
    value {
      type: DT_INT32
    }
  }
  attr {
    key: "dtype"
    value {
      type: DT_FLOAT
    }
  }
  attr {
    key: "seed"
    value {
      i: 0
    }
  }
  attr {
    key: "seed2"
    value {
      i: 0
    }
  }
}
node {
  name: "dropout_1/cond/dropout/random_uniform/sub"
  op: "Sub"
  input: "dropout_1/cond/dropout/random_uniform/max"
  input: "dropout_1/cond/dropout/random_uniform/min"
  attr {
    key: "T"
    value {
      type: DT_FLOAT
    }
  }
}
node {
  name: "dropout_1/cond/dropout/random_uniform/mul"
  op: "Mul"
  input: "dropout_1/cond/dropout/random_uniform/RandomUniform"
  input: "dropout_1/cond/dropout/random_uniform/sub"
  attr {
    key: "T"
    value {
      type: DT_FLOAT
    }
  }
}
node {
  name: "dropout_1/cond/dropout/random_uniform"
  op: "Add"
  input: "dropout_1/cond/dropout/random_uniform/mul"
  input: "dropout_1/cond/dropout/random_uniform/min"
  attr {
    key: "T"
    value {
      type: DT_FLOAT
    }
  }
}
node {
  name: "dropout_1/cond/dropout/add"
  op: "Add"
  input: "dropout_1/cond/dropout/keep_prob"
  input: "dropout_1/cond/dropout/random_uniform"
  attr {
    key: "T"
    value {
      type: DT_FLOAT
    }
  }
}
node {
  name: "dropout_1/cond/dropout/Floor"
  op: "Floor"
  input: "dropout_1/cond/dropout/add"
  attr {
    key: "T"
    value {
      type: DT_FLOAT
    }
  }
}
node {
  name: "dropout_1/cond/dropout/div"
  op: "RealDiv"
  input: "dropout_1/cond/dropout/Shape/Switch:1"
  input: "dropout_1/cond/dropout/keep_prob"
  attr {
    key: "T"
    value {
      type: DT_FLOAT
    }
  }
}
node {
  name: "dropout_1/cond/dropout/mul"
  op: "Mul"
  input: "dropout_1/cond/dropout/div"
  input: "dropout_1/cond/dropout/Floor"
  attr {
    key: "T"
    value {
      type: DT_FLOAT
    }
  }
}
node {
  name: "dropout_1/cond/Identity/Switch"
  op: "Switch"
  input: "conv2d_2/Relu"
  input: "dropout_1/cond/pred_id"
  attr {
    key: "T"
    value {
      type: DT_FLOAT
    }
  }
  attr {
    key: "_class"
    value {
      list {
        s: "loc:@conv2d_2/Relu"
      }
    }
  }
}
node {
  name: "dropout_1/cond/Identity"
  op: "Identity"
  input: "dropout_1/cond/Identity/Switch"
  attr {
    key: "T"
    value {
      type: DT_FLOAT
    }
  }
}
node {
  name: "dropout_1/cond/Merge"
  op: "Merge"
  input: "dropout_1/cond/Identity"
  input: "dropout_1/cond/dropout/mul"
  attr {
    key: "N"
    value {
      i: 2
    }
  }
  attr {
    key: "T"
    value {
      type: DT_FLOAT
    }
  }
}
node {
  name: "Flatten/Shape"
  op: "Shape"
  input: "dropout_1/cond/Merge"
  attr {
    key: "T"
    value {
      type: DT_FLOAT
    }
  }
  attr {
    key: "out_type"
    value {
      type: DT_INT32
    }
  }
}
node {
  name: "Flatten/Slice/begin"
  op: "Const"
  attr {
    key: "dtype"
    value {
      type: DT_INT32
    }
  }
  attr {
    key: "value"
    value {
      tensor {
        dtype: DT_INT32
        tensor_shape {
          dim {
            size: 1
          }
        }
        int_val: 0
      }
    }
  }
}
node {
  name: "Flatten/Slice/size"
  op: "Const"
  attr {
    key: "dtype"
    value {
      type: DT_INT32
    }
  }
  attr {
    key: "value"
    value {
      tensor {
        dtype: DT_INT32
        tensor_shape {
          dim {
            size: 1
          }
        }
        int_val: 1
      }
    }
  }
}
node {
  name: "Flatten/Slice"
  op: "Slice"
  input: "Flatten/Shape"
  input: "Flatten/Slice/begin"
  input: "Flatten/Slice/size"
  attr {
    key: "Index"
    value {
      type: DT_INT32
    }
  }
  attr {
    key: "T"
    value {
      type: DT_INT32
    }
  }
}
node {
  name: "Flatten/Slice_1/begin"
  op: "Const"
  attr {
    key: "dtype"
    value {
      type: DT_INT32
    }
  }
  attr {
    key: "value"
    value {
      tensor {
        dtype: DT_INT32
        tensor_shape {
          dim {
            size: 1
          }
        }
        int_val: 1
      }
    }
  }
}
node {
  name: "Flatten/Slice_1/size"
  op: "Const"
  attr {
    key: "dtype"
    value {
      type: DT_INT32
    }
  }
  attr {
    key: "value"
    value {
      tensor {
        dtype: DT_INT32
        tensor_shape {
          dim {
            size: 1
          }
        }
        int_val: 3
      }
    }
  }
}
node {
  name: "Flatten/Slice_1"
  op: "Slice"
  input: "Flatten/Shape"
  input: "Flatten/Slice_1/begin"
  input: "Flatten/Slice_1/size"
  attr {
    key: "Index"
    value {
      type: DT_INT32
    }
  }
  attr {
    key: "T"
    value {
      type: DT_INT32
    }
  }
}
node {
  name: "Flatten/Const"
  op: "Const"
  attr {
    key: "dtype"
    value {
      type: DT_INT32
    }
  }
  attr {
    key: "value"
    value {
      tensor {
        dtype: DT_INT32
        tensor_shape {
          dim {
            size: 1
          }
        }
        int_val: 0
      }
    }
  }
}
node {
  name: "Flatten/Prod"
  op: "Prod"
  input: "Flatten/Slice_1"
  input: "Flatten/Const"
  attr {
    key: "T"
    value {
      type: DT_INT32
    }
  }
  attr {
    key: "Tidx"
    value {
      type: DT_INT32
    }
  }
  attr {
    key: "keep_dims"
    value {
      b: false
    }
  }
}
node {
  name: "Flatten/ExpandDims/dim"
  op: "Const"
  attr {
    key: "dtype"
    value {
      type: DT_INT32
    }
  }
  attr {
    key: "value"
    value {
      tensor {
        dtype: DT_INT32
        tensor_shape {
        }
        int_val: 0
      }
    }
  }
}
node {
  name: "Flatten/ExpandDims"
  op: "ExpandDims"
  input: "Flatten/Prod"
  input: "Flatten/ExpandDims/dim"
  attr {
    key: "T"
    value {
      type: DT_INT32
    }
  }
  attr {
    key: "Tdim"
    value {
      type: DT_INT32
    }
  }
}
node {
  name: "Flatten/concat/axis"
  op: "Const"
  attr {
    key: "dtype"
    value {
      type: DT_INT32
    }
  }
  attr {
    key: "value"
    value {
      tensor {
        dtype: DT_INT32
        tensor_shape {
        }
        int_val: 0
      }
    }
  }
}
node {
  name: "Flatten/concat"
  op: "ConcatV2"
  input: "Flatten/Slice"
  input: "Flatten/ExpandDims"
  input: "Flatten/concat/axis"
  attr {
    key: "N"
    value {
      i: 2
    }
  }
  attr {
    key: "T"
    value {
      type: DT_INT32
    }
  }
  attr {
    key: "Tidx"
    value {
      type: DT_INT32
    }
  }
}
node {
  name: "Flatten/Reshape"
  op: "Reshape"
  input: "dropout_1/cond/Merge"
  input: "Flatten/concat"
  attr {
    key: "T"
    value {
      type: DT_FLOAT
    }
  }
  attr {
    key: "Tshape"
    value {
      type: DT_INT32
    }
  }
}
node {
  name: "dense_1/kernel/Initializer/random_uniform/shape"
  op: "Const"
  attr {
    key: "_class"
    value {
      list {
        s: "loc:@dense_1/kernel"
      }
    }
  }
  attr {
    key: "dtype"
    value {
      type: DT_INT32
    }
  }
  attr {
    key: "value"
    value {
      tensor {
        dtype: DT_INT32
        tensor_shape {
          dim {
            size: 2
          }
        }
        tensor_content: " \017\000\000@\000\000\000"
      }
    }
  }
}
node {
  name: "dense_1/kernel/Initializer/random_uniform/min"
  op: "Const"
  attr {
    key: "_class"
    value {
      list {
        s: "loc:@dense_1/kernel"
      }
    }
  }
  attr {
    key: "dtype"
    value {
      type: DT_FLOAT
    }
  }
  attr {
    key: "value"
    value {
      tensor {
        dtype: DT_FLOAT
        tensor_shape {
        }
        float_val: -0.03904344141483307
      }
    }
  }
}
node {
  name: "dense_1/kernel/Initializer/random_uniform/max"
  op: "Const"
  attr {
    key: "_class"
    value {
      list {
        s: "loc:@dense_1/kernel"
      }
    }
  }
  attr {
    key: "dtype"
    value {
      type: DT_FLOAT
    }
  }
  attr {
    key: "value"
    value {
      tensor {
        dtype: DT_FLOAT
        tensor_shape {
        }
        float_val: 0.03904344141483307
      }
    }
  }
}
node {
  name: "dense_1/kernel/Initializer/random_uniform/RandomUniform"
  op: "RandomUniform"
  input: "dense_1/kernel/Initializer/random_uniform/shape"
  attr {
    key: "T"
    value {
      type: DT_INT32
    }
  }
  attr {
    key: "_class"
    value {
      list {
        s: "loc:@dense_1/kernel"
      }
    }
  }
  attr {
    key: "dtype"
    value {
      type: DT_FLOAT
    }
  }
  attr {
    key: "seed"
    value {
      i: 0
    }
  }
  attr {
    key: "seed2"
    value {
      i: 0
    }
  }
}
node {
  name: "dense_1/kernel/Initializer/random_uniform/sub"
  op: "Sub"
  input: "dense_1/kernel/Initializer/random_uniform/max"
  input: "dense_1/kernel/Initializer/random_uniform/min"
  attr {
    key: "T"
    value {
      type: DT_FLOAT
    }
  }
  attr {
    key: "_class"
    value {
      list {
        s: "loc:@dense_1/kernel"
      }
    }
  }
}
node {
  name: "dense_1/kernel/Initializer/random_uniform/mul"
  op: "Mul"
  input: "dense_1/kernel/Initializer/random_uniform/RandomUniform"
  input: "dense_1/kernel/Initializer/random_uniform/sub"
  attr {
    key: "T"
    value {
      type: DT_FLOAT
    }
  }
  attr {
    key: "_class"
    value {
      list {
        s: "loc:@dense_1/kernel"
      }
    }
  }
}
node {
  name: "dense_1/kernel/Initializer/random_uniform"
  op: "Add"
  input: "dense_1/kernel/Initializer/random_uniform/mul"
  input: "dense_1/kernel/Initializer/random_uniform/min"
  attr {
    key: "T"
    value {
      type: DT_FLOAT
    }
  }
  attr {
    key: "_class"
    value {
      list {
        s: "loc:@dense_1/kernel"
      }
    }
  }
}
node {
  name: "dense_1/kernel"
  op: "VariableV2"
  attr {
    key: "_class"
    value {
      list {
        s: "loc:@dense_1/kernel"
      }
    }
  }
  attr {
    key: "container"
    value {
      s: ""
    }
  }
  attr {
    key: "dtype"
    value {
      type: DT_FLOAT
    }
  }
  attr {
    key: "shape"
    value {
      shape {
        dim {
          size: 3872
        }
        dim {
          size: 64
        }
      }
    }
  }
  attr {
    key: "shared_name"
    value {
      s: ""
    }
  }
}
node {
  name: "dense_1/kernel/Assign"
  op: "Assign"
  input: "dense_1/kernel"
  input: "dense_1/kernel/Initializer/random_uniform"
  attr {
    key: "T"
    value {
      type: DT_FLOAT
    }
  }
  attr {
    key: "_class"
    value {
      list {
        s: "loc:@dense_1/kernel"
      }
    }
  }
  attr {
    key: "use_locking"
    value {
      b: true
    }
  }
  attr {
    key: "validate_shape"
    value {
      b: true
    }
  }
}
node {
  name: "dense_1/kernel/read"
  op: "Identity"
  input: "dense_1/kernel"
  attr {
    key: "T"
    value {
      type: DT_FLOAT
    }
  }
  attr {
    key: "_class"
    value {
      list {
        s: "loc:@dense_1/kernel"
      }
    }
  }
}
node {
  name: "dense_1/bias/Initializer/zeros"
  op: "Const"
  attr {
    key: "_class"
    value {
      list {
        s: "loc:@dense_1/bias"
      }
    }
  }
  attr {
    key: "dtype"
    value {
      type: DT_FLOAT
    }
  }
  attr {
    key: "value"
    value {
      tensor {
        dtype: DT_FLOAT
        tensor_shape {
          dim {
            size: 64
          }
        }
        float_val: 0.0
      }
    }
  }
}
node {
  name: "dense_1/bias"
  op: "VariableV2"
  attr {
    key: "_class"
    value {
      list {
        s: "loc:@dense_1/bias"
      }
    }
  }
  attr {
    key: "container"
    value {
      s: ""
    }
  }
  attr {
    key: "dtype"
    value {
      type: DT_FLOAT
    }
  }
  attr {
    key: "shape"
    value {
      shape {
        dim {
          size: 64
        }
      }
    }
  }
  attr {
    key: "shared_name"
    value {
      s: ""
    }
  }
}
node {
  name: "dense_1/bias/Assign"
  op: "Assign"
  input: "dense_1/bias"
  input: "dense_1/bias/Initializer/zeros"
  attr {
    key: "T"
    value {
      type: DT_FLOAT
    }
  }
  attr {
    key: "_class"
    value {
      list {
        s: "loc:@dense_1/bias"
      }
    }
  }
  attr {
    key: "use_locking"
    value {
      b: true
    }
  }
  attr {
    key: "validate_shape"
    value {
      b: true
    }
  }
}
node {
  name: "dense_1/bias/read"
  op: "Identity"
  input: "dense_1/bias"
  attr {
    key: "T"
    value {
      type: DT_FLOAT
    }
  }
  attr {
    key: "_class"
    value {
      list {
        s: "loc:@dense_1/bias"
      }
    }
  }
}
node {
  name: "dense_1/MatMul"
  op: "MatMul"
  input: "Flatten/Reshape"
  input: "dense_1/kernel/read"
  attr {
    key: "T"
    value {
      type: DT_FLOAT
    }
  }
  attr {
    key: "transpose_a"
    value {
      b: false
    }
  }
  attr {
    key: "transpose_b"
    value {
      b: false
    }
  }
}
node {
  name: "dense_1/BiasAdd"
  op: "BiasAdd"
  input: "dense_1/MatMul"
  input: "dense_1/bias/read"
  attr {
    key: "T"
    value {
      type: DT_FLOAT
    }
  }
  attr {
    key: "data_format"
    value {
      s: "NHWC"
    }
  }
}
node {
  name: "dense_1/Relu"
  op: "Relu"
  input: "dense_1/BiasAdd"
  attr {
    key: "T"
    value {
      type: DT_FLOAT
    }
  }
}
node {
  name: "dropout_2/cond/Switch"
  op: "Switch"
  input: "training"
  input: "training"
  attr {
    key: "T"
    value {
      type: DT_BOOL
    }
  }
}
node {
  name: "dropout_2/cond/switch_t"
  op: "Identity"
  input: "dropout_2/cond/Switch:1"
  attr {
    key: "T"
    value {
      type: DT_BOOL
    }
  }
}
node {
  name: "dropout_2/cond/switch_f"
  op: "Identity"
  input: "dropout_2/cond/Switch"
  attr {
    key: "T"
    value {
      type: DT_BOOL
    }
  }
}
node {
  name: "dropout_2/cond/pred_id"
  op: "Identity"
  input: "training"
  attr {
    key: "T"
    value {
      type: DT_BOOL
    }
  }
}
node {
  name: "dropout_2/cond/dropout/keep_prob"
  op: "Const"
  input: "^dropout_2/cond/switch_t"
  attr {
    key: "dtype"
    value {
      type: DT_FLOAT
    }
  }
  attr {
    key: "value"
    value {
      tensor {
        dtype: DT_FLOAT
        tensor_shape {
        }
        float_val: 0.5
      }
    }
  }
}
node {
  name: "dropout_2/cond/dropout/Shape/Switch"
  op: "Switch"
  input: "dense_1/Relu"
  input: "dropout_2/cond/pred_id"
  attr {
    key: "T"
    value {
      type: DT_FLOAT
    }
  }
  attr {
    key: "_class"
    value {
      list {
        s: "loc:@dense_1/Relu"
      }
    }
  }
}
node {
  name: "dropout_2/cond/dropout/Shape"
  op: "Shape"
  input: "dropout_2/cond/dropout/Shape/Switch:1"
  attr {
    key: "T"
    value {
      type: DT_FLOAT
    }
  }
  attr {
    key: "out_type"
    value {
      type: DT_INT32
    }
  }
}
node {
  name: "dropout_2/cond/dropout/random_uniform/min"
  op: "Const"
  input: "^dropout_2/cond/switch_t"
  attr {
    key: "dtype"
    value {
      type: DT_FLOAT
    }
  }
  attr {
    key: "value"
    value {
      tensor {
        dtype: DT_FLOAT
        tensor_shape {
        }
        float_val: 0.0
      }
    }
  }
}
node {
  name: "dropout_2/cond/dropout/random_uniform/max"
  op: "Const"
  input: "^dropout_2/cond/switch_t"
  attr {
    key: "dtype"
    value {
      type: DT_FLOAT
    }
  }
  attr {
    key: "value"
    value {
      tensor {
        dtype: DT_FLOAT
        tensor_shape {
        }
        float_val: 1.0
      }
    }
  }
}
node {
  name: "dropout_2/cond/dropout/random_uniform/RandomUniform"
  op: "RandomUniform"
  input: "dropout_2/cond/dropout/Shape"
  attr {
    key: "T"
    value {
      type: DT_INT32
    }
  }
  attr {
    key: "dtype"
    value {
      type: DT_FLOAT
    }
  }
  attr {
    key: "seed"
    value {
      i: 0
    }
  }
  attr {
    key: "seed2"
    value {
      i: 0
    }
  }
}
node {
  name: "dropout_2/cond/dropout/random_uniform/sub"
  op: "Sub"
  input: "dropout_2/cond/dropout/random_uniform/max"
  input: "dropout_2/cond/dropout/random_uniform/min"
  attr {
    key: "T"
    value {
      type: DT_FLOAT
    }
  }
}
node {
  name: "dropout_2/cond/dropout/random_uniform/mul"
  op: "Mul"
  input: "dropout_2/cond/dropout/random_uniform/RandomUniform"
  input: "dropout_2/cond/dropout/random_uniform/sub"
  attr {
    key: "T"
    value {
      type: DT_FLOAT
    }
  }
}
node {
  name: "dropout_2/cond/dropout/random_uniform"
  op: "Add"
  input: "dropout_2/cond/dropout/random_uniform/mul"
  input: "dropout_2/cond/dropout/random_uniform/min"
  attr {
    key: "T"
    value {
      type: DT_FLOAT
    }
  }
}
node {
  name: "dropout_2/cond/dropout/add"
  op: "Add"
  input: "dropout_2/cond/dropout/keep_prob"
  input: "dropout_2/cond/dropout/random_uniform"
  attr {
    key: "T"
    value {
      type: DT_FLOAT
    }
  }
}
node {
  name: "dropout_2/cond/dropout/Floor"
  op: "Floor"
  input: "dropout_2/cond/dropout/add"
  attr {
    key: "T"
    value {
      type: DT_FLOAT
    }
  }
}
node {
  name: "dropout_2/cond/dropout/div"
  op: "RealDiv"
  input: "dropout_2/cond/dropout/Shape/Switch:1"
  input: "dropout_2/cond/dropout/keep_prob"
  attr {
    key: "T"
    value {
      type: DT_FLOAT
    }
  }
}
node {
  name: "dropout_2/cond/dropout/mul"
  op: "Mul"
  input: "dropout_2/cond/dropout/div"
  input: "dropout_2/cond/dropout/Floor"
  attr {
    key: "T"
    value {
      type: DT_FLOAT
    }
  }
}
node {
  name: "dropout_2/cond/Identity/Switch"
  op: "Switch"
  input: "dense_1/Relu"
  input: "dropout_2/cond/pred_id"
  attr {
    key: "T"
    value {
      type: DT_FLOAT
    }
  }
  attr {
    key: "_class"
    value {
      list {
        s: "loc:@dense_1/Relu"
      }
    }
  }
}
node {
  name: "dropout_2/cond/Identity"
  op: "Identity"
  input: "dropout_2/cond/Identity/Switch"
  attr {
    key: "T"
    value {
      type: DT_FLOAT
    }
  }
}
node {
  name: "dropout_2/cond/Merge"
  op: "Merge"
  input: "dropout_2/cond/Identity"
  input: "dropout_2/cond/dropout/mul"
  attr {
    key: "N"
    value {
      i: 2
    }
  }
  attr {
    key: "T"
    value {
      type: DT_FLOAT
    }
  }
}
node {
  name: "dense_2/kernel/Initializer/random_uniform/shape"
  op: "Const"
  attr {
    key: "_class"
    value {
      list {
        s: "loc:@dense_2/kernel"
      }
    }
  }
  attr {
    key: "dtype"
    value {
      type: DT_INT32
    }
  }
  attr {
    key: "value"
    value {
      tensor {
        dtype: DT_INT32
        tensor_shape {
          dim {
            size: 2
          }
        }
        tensor_content: "@\000\000\000\n\000\000\000"
      }
    }
  }
}
node {
  name: "dense_2/kernel/Initializer/random_uniform/min"
  op: "Const"
  attr {
    key: "_class"
    value {
      list {
        s: "loc:@dense_2/kernel"
      }
    }
  }
  attr {
    key: "dtype"
    value {
      type: DT_FLOAT
    }
  }
  attr {
    key: "value"
    value {
      tensor {
        dtype: DT_FLOAT
        tensor_shape {
        }
        float_val: -0.2847473919391632
      }
    }
  }
}
node {
  name: "dense_2/kernel/Initializer/random_uniform/max"
  op: "Const"
  attr {
    key: "_class"
    value {
      list {
        s: "loc:@dense_2/kernel"
      }
    }
  }
  attr {
    key: "dtype"
    value {
      type: DT_FLOAT
    }
  }
  attr {
    key: "value"
    value {
      tensor {
        dtype: DT_FLOAT
        tensor_shape {
        }
        float_val: 0.2847473919391632
      }
    }
  }
}
node {
  name: "dense_2/kernel/Initializer/random_uniform/RandomUniform"
  op: "RandomUniform"
  input: "dense_2/kernel/Initializer/random_uniform/shape"
  attr {
    key: "T"
    value {
      type: DT_INT32
    }
  }
  attr {
    key: "_class"
    value {
      list {
        s: "loc:@dense_2/kernel"
      }
    }
  }
  attr {
    key: "dtype"
    value {
      type: DT_FLOAT
    }
  }
  attr {
    key: "seed"
    value {
      i: 0
    }
  }
  attr {
    key: "seed2"
    value {
      i: 0
    }
  }
}
node {
  name: "dense_2/kernel/Initializer/random_uniform/sub"
  op: "Sub"
  input: "dense_2/kernel/Initializer/random_uniform/max"
  input: "dense_2/kernel/Initializer/random_uniform/min"
  attr {
    key: "T"
    value {
      type: DT_FLOAT
    }
  }
  attr {
    key: "_class"
    value {
      list {
        s: "loc:@dense_2/kernel"
      }
    }
  }
}
node {
  name: "dense_2/kernel/Initializer/random_uniform/mul"
  op: "Mul"
  input: "dense_2/kernel/Initializer/random_uniform/RandomUniform"
  input: "dense_2/kernel/Initializer/random_uniform/sub"
  attr {
    key: "T"
    value {
      type: DT_FLOAT
    }
  }
  attr {
    key: "_class"
    value {
      list {
        s: "loc:@dense_2/kernel"
      }
    }
  }
}
node {
  name: "dense_2/kernel/Initializer/random_uniform"
  op: "Add"
  input: "dense_2/kernel/Initializer/random_uniform/mul"
  input: "dense_2/kernel/Initializer/random_uniform/min"
  attr {
    key: "T"
    value {
      type: DT_FLOAT
    }
  }
  attr {
    key: "_class"
    value {
      list {
        s: "loc:@dense_2/kernel"
      }
    }
  }
}
node {
  name: "dense_2/kernel"
  op: "VariableV2"
  attr {
    key: "_class"
    value {
      list {
        s: "loc:@dense_2/kernel"
      }
    }
  }
  attr {
    key: "container"
    value {
      s: ""
    }
  }
  attr {
    key: "dtype"
    value {
      type: DT_FLOAT
    }
  }
  attr {
    key: "shape"
    value {
      shape {
        dim {
          size: 64
        }
        dim {
          size: 10
        }
      }
    }
  }
  attr {
    key: "shared_name"
    value {
      s: ""
    }
  }
}
node {
  name: "dense_2/kernel/Assign"
  op: "Assign"
  input: "dense_2/kernel"
  input: "dense_2/kernel/Initializer/random_uniform"
  attr {
    key: "T"
    value {
      type: DT_FLOAT
    }
  }
  attr {
    key: "_class"
    value {
      list {
        s: "loc:@dense_2/kernel"
      }
    }
  }
  attr {
    key: "use_locking"
    value {
      b: true
    }
  }
  attr {
    key: "validate_shape"
    value {
      b: true
    }
  }
}
node {
  name: "dense_2/kernel/read"
  op: "Identity"
  input: "dense_2/kernel"
  attr {
    key: "T"
    value {
      type: DT_FLOAT
    }
  }
  attr {
    key: "_class"
    value {
      list {
        s: "loc:@dense_2/kernel"
      }
    }
  }
}
node {
  name: "dense_2/bias/Initializer/zeros"
  op: "Const"
  attr {
    key: "_class"
    value {
      list {
        s: "loc:@dense_2/bias"
      }
    }
  }
  attr {
    key: "dtype"
    value {
      type: DT_FLOAT
    }
  }
  attr {
    key: "value"
    value {
      tensor {
        dtype: DT_FLOAT
        tensor_shape {
          dim {
            size: 10
          }
        }
        float_val: 0.0
      }
    }
  }
}
node {
  name: "dense_2/bias"
  op: "VariableV2"
  attr {
    key: "_class"
    value {
      list {
        s: "loc:@dense_2/bias"
      }
    }
  }
  attr {
    key: "container"
    value {
      s: ""
    }
  }
  attr {
    key: "dtype"
    value {
      type: DT_FLOAT
    }
  }
  attr {
    key: "shape"
    value {
      shape {
        dim {
          size: 10
        }
      }
    }
  }
  attr {
    key: "shared_name"
    value {
      s: ""
    }
  }
}
node {
  name: "dense_2/bias/Assign"
  op: "Assign"
  input: "dense_2/bias"
  input: "dense_2/bias/Initializer/zeros"
  attr {
    key: "T"
    value {
      type: DT_FLOAT
    }
  }
  attr {
    key: "_class"
    value {
      list {
        s: "loc:@dense_2/bias"
      }
    }
  }
  attr {
    key: "use_locking"
    value {
      b: true
    }
  }
  attr {
    key: "validate_shape"
    value {
      b: true
    }
  }
}
node {
  name: "dense_2/bias/read"
  op: "Identity"
  input: "dense_2/bias"
  attr {
    key: "T"
    value {
      type: DT_FLOAT
    }
  }
  attr {
    key: "_class"
    value {
      list {
        s: "loc:@dense_2/bias"
      }
    }
  }
}
node {
  name: "dense_2/MatMul"
  op: "MatMul"
  input: "dropout_2/cond/Merge"
  input: "dense_2/kernel/read"
  attr {
    key: "T"
    value {
      type: DT_FLOAT
    }
  }
  attr {
    key: "transpose_a"
    value {
      b: false
    }
  }
  attr {
    key: "transpose_b"
    value {
      b: false
    }
  }
}
node {
  name: "dense_2/BiasAdd"
  op: "BiasAdd"
  input: "dense_2/MatMul"
  input: "dense_2/bias/read"
  attr {
    key: "T"
    value {
      type: DT_FLOAT
    }
  }
  attr {
    key: "data_format"
    value {
      s: "NHWC"
    }
  }
}
node {
  name: "loss/Rank"
  op: "Const"
  attr {
    key: "dtype"
    value {
      type: DT_INT32
    }
  }
  attr {
    key: "value"
    value {
      tensor {
        dtype: DT_INT32
        tensor_shape {
        }
        int_val: 2
      }
    }
  }
}
node {
  name: "loss/Shape"
  op: "Shape"
  input: "dense_2/BiasAdd"
  attr {
    key: "T"
    value {
      type: DT_FLOAT
    }
  }
  attr {
    key: "out_type"
    value {
      type: DT_INT32
    }
  }
}
node {
  name: "loss/Rank_1"
  op: "Const"
  attr {
    key: "dtype"
    value {
      type: DT_INT32
    }
  }
  attr {
    key: "value"
    value {
      tensor {
        dtype: DT_INT32
        tensor_shape {
        }
        int_val: 2
      }
    }
  }
}
node {
  name: "loss/Shape_1"
  op: "Shape"
  input: "dense_2/BiasAdd"
  attr {
    key: "T"
    value {
      type: DT_FLOAT
    }
  }
  attr {
    key: "out_type"
    value {
      type: DT_INT32
    }
  }
}
node {
  name: "loss/Sub/y"
  op: "Const"
  attr {
    key: "dtype"
    value {
      type: DT_INT32
    }
  }
  attr {
    key: "value"
    value {
      tensor {
        dtype: DT_INT32
        tensor_shape {
        }
        int_val: 1
      }
    }
  }
}
node {
  name: "loss/Sub"
  op: "Sub"
  input: "loss/Rank_1"
  input: "loss/Sub/y"
  attr {
    key: "T"
    value {
      type: DT_INT32
    }
  }
}
node {
  name: "loss/Slice/begin"
  op: "Pack"
  input: "loss/Sub"
  attr {
    key: "N"
    value {
      i: 1
    }
  }
  attr {
    key: "T"
    value {
      type: DT_INT32
    }
  }
  attr {
    key: "axis"
    value {
      i: 0
    }
  }
}
node {
  name: "loss/Slice/size"
  op: "Const"
  attr {
    key: "dtype"
    value {
      type: DT_INT32
    }
  }
  attr {
    key: "value"
    value {
      tensor {
        dtype: DT_INT32
        tensor_shape {
          dim {
            size: 1
          }
        }
        int_val: 1
      }
    }
  }
}
node {
  name: "loss/Slice"
  op: "Slice"
  input: "loss/Shape_1"
  input: "loss/Slice/begin"
  input: "loss/Slice/size"
  attr {
    key: "Index"
    value {
      type: DT_INT32
    }
  }
  attr {
    key: "T"
    value {
      type: DT_INT32
    }
  }
}
node {
  name: "loss/concat/values_0"
  op: "Const"
  attr {
    key: "dtype"
    value {
      type: DT_INT32
    }
  }
  attr {
    key: "value"
    value {
      tensor {
        dtype: DT_INT32
        tensor_shape {
          dim {
            size: 1
          }
        }
        int_val: -1
      }
    }
  }
}
node {
  name: "loss/concat/axis"
  op: "Const"
  attr {
    key: "dtype"
    value {
      type: DT_INT32
    }
  }
  attr {
    key: "value"
    value {
      tensor {
        dtype: DT_INT32
        tensor_shape {
        }
        int_val: 0
      }
    }
  }
}
node {
  name: "loss/concat"
  op: "ConcatV2"
  input: "loss/concat/values_0"
  input: "loss/Slice"
  input: "loss/concat/axis"
  attr {
    key: "N"
    value {
      i: 2
    }
  }
  attr {
    key: "T"
    value {
      type: DT_INT32
    }
  }
  attr {
    key: "Tidx"
    value {
      type: DT_INT32
    }
  }
}
node {
  name: "loss/Reshape"
  op: "Reshape"
  input: "dense_2/BiasAdd"
  input: "loss/concat"
  attr {
    key: "T"
    value {
      type: DT_FLOAT
    }
  }
  attr {
    key: "Tshape"
    value {
      type: DT_INT32
    }
  }
}
node {
  name: "loss/Rank_2"
  op: "Const"
  attr {
    key: "dtype"
    value {
      type: DT_INT32
    }
  }
  attr {
    key: "value"
    value {
      tensor {
        dtype: DT_INT32
        tensor_shape {
        }
        int_val: 2
      }
    }
  }
}
node {
  name: "loss/Shape_2"
  op: "Shape"
  input: "Placeholder_1"
  attr {
    key: "T"
    value {
      type: DT_FLOAT
    }
  }
  attr {
    key: "out_type"
    value {
      type: DT_INT32
    }
  }
}
node {
  name: "loss/Sub_1/y"
  op: "Const"
  attr {
    key: "dtype"
    value {
      type: DT_INT32
    }
  }
  attr {
    key: "value"
    value {
      tensor {
        dtype: DT_INT32
        tensor_shape {
        }
        int_val: 1
      }
    }
  }
}
node {
  name: "loss/Sub_1"
  op: "Sub"
  input: "loss/Rank_2"
  input: "loss/Sub_1/y"
  attr {
    key: "T"
    value {
      type: DT_INT32
    }
  }
}
node {
  name: "loss/Slice_1/begin"
  op: "Pack"
  input: "loss/Sub_1"
  attr {
    key: "N"
    value {
      i: 1
    }
  }
  attr {
    key: "T"
    value {
      type: DT_INT32
    }
  }
  attr {
    key: "axis"
    value {
      i: 0
    }
  }
}
node {
  name: "loss/Slice_1/size"
  op: "Const"
  attr {
    key: "dtype"
    value {
      type: DT_INT32
    }
  }
  attr {
    key: "value"
    value {
      tensor {
        dtype: DT_INT32
        tensor_shape {
          dim {
            size: 1
          }
        }
        int_val: 1
      }
    }
  }
}
node {
  name: "loss/Slice_1"
  op: "Slice"
  input: "loss/Shape_2"
  input: "loss/Slice_1/begin"
  input: "loss/Slice_1/size"
  attr {
    key: "Index"
    value {
      type: DT_INT32
    }
  }
  attr {
    key: "T"
    value {
      type: DT_INT32
    }
  }
}
node {
  name: "loss/concat_1/values_0"
  op: "Const"
  attr {
    key: "dtype"
    value {
      type: DT_INT32
    }
  }
  attr {
    key: "value"
    value {
      tensor {
        dtype: DT_INT32
        tensor_shape {
          dim {
            size: 1
          }
        }
        int_val: -1
      }
    }
  }
}
node {
  name: "loss/concat_1/axis"
  op: "Const"
  attr {
    key: "dtype"
    value {
      type: DT_INT32
    }
  }
  attr {
    key: "value"
    value {
      tensor {
        dtype: DT_INT32
        tensor_shape {
        }
        int_val: 0
      }
    }
  }
}
node {
  name: "loss/concat_1"
  op: "ConcatV2"
  input: "loss/concat_1/values_0"
  input: "loss/Slice_1"
  input: "loss/concat_1/axis"
  attr {
    key: "N"
    value {
      i: 2
    }
  }
  attr {
    key: "T"
    value {
      type: DT_INT32
    }
  }
  attr {
    key: "Tidx"
    value {
      type: DT_INT32
    }
  }
}
node {
  name: "loss/Reshape_1"
  op: "Reshape"
  input: "Placeholder_1"
  input: "loss/concat_1"
  attr {
    key: "T"
    value {
      type: DT_FLOAT
    }
  }
  attr {
    key: "Tshape"
    value {
      type: DT_INT32
    }
  }
}
node {
  name: "loss/SoftmaxCrossEntropyWithLogits"
  op: "SoftmaxCrossEntropyWithLogits"
  input: "loss/Reshape"
  input: "loss/Reshape_1"
  attr {
    key: "T"
    value {
      type: DT_FLOAT
    }
  }
}
node {
  name: "loss/Sub_2/y"
  op: "Const"
  attr {
    key: "dtype"
    value {
      type: DT_INT32
    }
  }
  attr {
    key: "value"
    value {
      tensor {
        dtype: DT_INT32
        tensor_shape {
        }
        int_val: 1
      }
    }
  }
}
node {
  name: "loss/Sub_2"
  op: "Sub"
  input: "loss/Rank"
  input: "loss/Sub_2/y"
  attr {
    key: "T"
    value {
      type: DT_INT32
    }
  }
}
node {
  name: "loss/Slice_2/begin"
  op: "Const"
  attr {
    key: "dtype"
    value {
      type: DT_INT32
    }
  }
  attr {
    key: "value"
    value {
      tensor {
        dtype: DT_INT32
        tensor_shape {
          dim {
            size: 1
          }
        }
        int_val: 0
      }
    }
  }
}
node {
  name: "loss/Slice_2/size"
  op: "Pack"
  input: "loss/Sub_2"
  attr {
    key: "N"
    value {
      i: 1
    }
  }
  attr {
    key: "T"
    value {
      type: DT_INT32
    }
  }
  attr {
    key: "axis"
    value {
      i: 0
    }
  }
}
node {
  name: "loss/Slice_2"
  op: "Slice"
  input: "loss/Shape"
  input: "loss/Slice_2/begin"
  input: "loss/Slice_2/size"
  attr {
    key: "Index"
    value {
      type: DT_INT32
    }
  }
  attr {
    key: "T"
    value {
      type: DT_INT32
    }
  }
}
node {
  name: "loss/Reshape_2"
  op: "Reshape"
  input: "loss/SoftmaxCrossEntropyWithLogits"
  input: "loss/Slice_2"
  attr {
    key: "T"
    value {
      type: DT_FLOAT
    }
  }
  attr {
    key: "Tshape"
    value {
      type: DT_INT32
    }
  }
}
node {
  name: "loss/Const"
  op: "Const"
  attr {
    key: "dtype"
    value {
      type: DT_INT32
    }
  }
  attr {
    key: "value"
    value {
      tensor {
        dtype: DT_INT32
        tensor_shape {
          dim {
            size: 1
          }
        }
        int_val: 0
      }
    }
  }
}
node {
  name: "loss/Mean"
  op: "Mean"
  input: "loss/Reshape_2"
  input: "loss/Const"
  attr {
    key: "T"
    value {
      type: DT_FLOAT
    }
  }
  attr {
    key: "Tidx"
    value {
      type: DT_INT32
    }
  }
  attr {
    key: "keep_dims"
    value {
      b: false
    }
  }
}
node {
  name: "gradients/Shape"
  op: "Const"
  attr {
    key: "dtype"
    value {
      type: DT_INT32
    }
  }
  attr {
    key: "value"
    value {
      tensor {
        dtype: DT_INT32
        tensor_shape {
          dim {
          }
        }
      }
    }
  }
}
node {
  name: "gradients/Const"
  op: "Const"
  attr {
    key: "dtype"
    value {
      type: DT_FLOAT
    }
  }
  attr {
    key: "value"
    value {
      tensor {
        dtype: DT_FLOAT
        tensor_shape {
        }
        float_val: 1.0
      }
    }
  }
}
node {
  name: "gradients/Fill"
  op: "Fill"
  input: "gradients/Shape"
  input: "gradients/Const"
  attr {
    key: "T"
    value {
      type: DT_FLOAT
    }
  }
}
node {
  name: "gradients/loss/Mean_grad/Reshape/shape"
  op: "Const"
  attr {
    key: "dtype"
    value {
      type: DT_INT32
    }
  }
  attr {
    key: "value"
    value {
      tensor {
        dtype: DT_INT32
        tensor_shape {
          dim {
            size: 1
          }
        }
        int_val: 1
      }
    }
  }
}
node {
  name: "gradients/loss/Mean_grad/Reshape"
  op: "Reshape"
  input: "gradients/Fill"
  input: "gradients/loss/Mean_grad/Reshape/shape"
  attr {
    key: "T"
    value {
      type: DT_FLOAT
    }
  }
  attr {
    key: "Tshape"
    value {
      type: DT_INT32
    }
  }
}
node {
  name: "gradients/loss/Mean_grad/Shape"
  op: "Shape"
  input: "loss/Reshape_2"
  attr {
    key: "T"
    value {
      type: DT_FLOAT
    }
  }
  attr {
    key: "out_type"
    value {
      type: DT_INT32
    }
  }
}
node {
  name: "gradients/loss/Mean_grad/Tile"
  op: "Tile"
  input: "gradients/loss/Mean_grad/Reshape"
  input: "gradients/loss/Mean_grad/Shape"
  attr {
    key: "T"
    value {
      type: DT_FLOAT
    }
  }
  attr {
    key: "Tmultiples"
    value {
      type: DT_INT32
    }
  }
}
node {
  name: "gradients/loss/Mean_grad/Shape_1"
  op: "Shape"
  input: "loss/Reshape_2"
  attr {
    key: "T"
    value {
      type: DT_FLOAT
    }
  }
  attr {
    key: "out_type"
    value {
      type: DT_INT32
    }
  }
}
node {
  name: "gradients/loss/Mean_grad/Shape_2"
  op: "Const"
  attr {
    key: "dtype"
    value {
      type: DT_INT32
    }
  }
  attr {
    key: "value"
    value {
      tensor {
        dtype: DT_INT32
        tensor_shape {
          dim {
          }
        }
      }
    }
  }
}
node {
  name: "gradients/loss/Mean_grad/Const"
  op: "Const"
  attr {
    key: "dtype"
    value {
      type: DT_INT32
    }
  }
  attr {
    key: "value"
    value {
      tensor {
        dtype: DT_INT32
        tensor_shape {
          dim {
            size: 1
          }
        }
        int_val: 0
      }
    }
  }
}
node {
  name: "gradients/loss/Mean_grad/Prod"
  op: "Prod"
  input: "gradients/loss/Mean_grad/Shape_1"
  input: "gradients/loss/Mean_grad/Const"
  attr {
    key: "T"
    value {
      type: DT_INT32
    }
  }
  attr {
    key: "Tidx"
    value {
      type: DT_INT32
    }
  }
  attr {
    key: "keep_dims"
    value {
      b: false
    }
  }
}
node {
  name: "gradients/loss/Mean_grad/Const_1"
  op: "Const"
  attr {
    key: "dtype"
    value {
      type: DT_INT32
    }
  }
  attr {
    key: "value"
    value {
      tensor {
        dtype: DT_INT32
        tensor_shape {
          dim {
            size: 1
          }
        }
        int_val: 0
      }
    }
  }
}
node {
  name: "gradients/loss/Mean_grad/Prod_1"
  op: "Prod"
  input: "gradients/loss/Mean_grad/Shape_2"
  input: "gradients/loss/Mean_grad/Const_1"
  attr {
    key: "T"
    value {
      type: DT_INT32
    }
  }
  attr {
    key: "Tidx"
    value {
      type: DT_INT32
    }
  }
  attr {
    key: "keep_dims"
    value {
      b: false
    }
  }
}
node {
  name: "gradients/loss/Mean_grad/Maximum/y"
  op: "Const"
  attr {
    key: "dtype"
    value {
      type: DT_INT32
    }
  }
  attr {
    key: "value"
    value {
      tensor {
        dtype: DT_INT32
        tensor_shape {
        }
        int_val: 1
      }
    }
  }
}
node {
  name: "gradients/loss/Mean_grad/Maximum"
  op: "Maximum"
  input: "gradients/loss/Mean_grad/Prod_1"
  input: "gradients/loss/Mean_grad/Maximum/y"
  attr {
    key: "T"
    value {
      type: DT_INT32
    }
  }
}
node {
  name: "gradients/loss/Mean_grad/floordiv"
  op: "FloorDiv"
  input: "gradients/loss/Mean_grad/Prod"
  input: "gradients/loss/Mean_grad/Maximum"
  attr {
    key: "T"
    value {
      type: DT_INT32
    }
  }
}
node {
  name: "gradients/loss/Mean_grad/Cast"
  op: "Cast"
  input: "gradients/loss/Mean_grad/floordiv"
  attr {
    key: "DstT"
    value {
      type: DT_FLOAT
    }
  }
  attr {
    key: "SrcT"
    value {
      type: DT_INT32
    }
  }
}
node {
  name: "gradients/loss/Mean_grad/truediv"
  op: "RealDiv"
  input: "gradients/loss/Mean_grad/Tile"
  input: "gradients/loss/Mean_grad/Cast"
  attr {
    key: "T"
    value {
      type: DT_FLOAT
    }
  }
}
node {
  name: "gradients/loss/Reshape_2_grad/Shape"
  op: "Shape"
  input: "loss/SoftmaxCrossEntropyWithLogits"
  attr {
    key: "T"
    value {
      type: DT_FLOAT
    }
  }
  attr {
    key: "out_type"
    value {
      type: DT_INT32
    }
  }
}
node {
  name: "gradients/loss/Reshape_2_grad/Reshape"
  op: "Reshape"
  input: "gradients/loss/Mean_grad/truediv"
  input: "gradients/loss/Reshape_2_grad/Shape"
  attr {
    key: "T"
    value {
      type: DT_FLOAT
    }
  }
  attr {
    key: "Tshape"
    value {
      type: DT_INT32
    }
  }
}
node {
  name: "gradients/zeros_like"
  op: "ZerosLike"
  input: "loss/SoftmaxCrossEntropyWithLogits:1"
  attr {
    key: "T"
    value {
      type: DT_FLOAT
    }
  }
}
node {
  name: "gradients/loss/SoftmaxCrossEntropyWithLogits_grad/ExpandDims/dim"
  op: "Const"
  attr {
    key: "dtype"
    value {
      type: DT_INT32
    }
  }
  attr {
    key: "value"
    value {
      tensor {
        dtype: DT_INT32
        tensor_shape {
        }
        int_val: -1
      }
    }
  }
}
node {
  name: "gradients/loss/SoftmaxCrossEntropyWithLogits_grad/ExpandDims"
  op: "ExpandDims"
  input: "gradients/loss/Reshape_2_grad/Reshape"
  input: "gradients/loss/SoftmaxCrossEntropyWithLogits_grad/ExpandDims/dim"
  attr {
    key: "T"
    value {
      type: DT_FLOAT
    }
  }
  attr {
    key: "Tdim"
    value {
      type: DT_INT32
    }
  }
}
node {
  name: "gradients/loss/SoftmaxCrossEntropyWithLogits_grad/mul"
  op: "Mul"
  input: "gradients/loss/SoftmaxCrossEntropyWithLogits_grad/ExpandDims"
  input: "loss/SoftmaxCrossEntropyWithLogits:1"
  attr {
    key: "T"
    value {
      type: DT_FLOAT
    }
  }
}
node {
  name: "gradients/loss/Reshape_grad/Shape"
  op: "Shape"
  input: "dense_2/BiasAdd"
  attr {
    key: "T"
    value {
      type: DT_FLOAT
    }
  }
  attr {
    key: "out_type"
    value {
      type: DT_INT32
    }
  }
}
node {
  name: "gradients/loss/Reshape_grad/Reshape"
  op: "Reshape"
  input: "gradients/loss/SoftmaxCrossEntropyWithLogits_grad/mul"
  input: "gradients/loss/Reshape_grad/Shape"
  attr {
    key: "T"
    value {
      type: DT_FLOAT
    }
  }
  attr {
    key: "Tshape"
    value {
      type: DT_INT32
    }
  }
}
node {
  name: "gradients/dense_2/BiasAdd_grad/BiasAddGrad"
  op: "BiasAddGrad"
  input: "gradients/loss/Reshape_grad/Reshape"
  attr {
    key: "T"
    value {
      type: DT_FLOAT
    }
  }
  attr {
    key: "data_format"
    value {
      s: "NHWC"
    }
  }
}
node {
  name: "gradients/dense_2/BiasAdd_grad/tuple/group_deps"
  op: "NoOp"
  input: "^gradients/loss/Reshape_grad/Reshape"
  input: "^gradients/dense_2/BiasAdd_grad/BiasAddGrad"
}
node {
  name: "gradients/dense_2/BiasAdd_grad/tuple/control_dependency"
  op: "Identity"
  input: "gradients/loss/Reshape_grad/Reshape"
  input: "^gradients/dense_2/BiasAdd_grad/tuple/group_deps"
  attr {
    key: "T"
    value {
      type: DT_FLOAT
    }
  }
  attr {
    key: "_class"
    value {
      list {
        s: "loc:@gradients/loss/Reshape_grad/Reshape"
      }
    }
  }
}
node {
  name: "gradients/dense_2/BiasAdd_grad/tuple/control_dependency_1"
  op: "Identity"
  input: "gradients/dense_2/BiasAdd_grad/BiasAddGrad"
  input: "^gradients/dense_2/BiasAdd_grad/tuple/group_deps"
  attr {
    key: "T"
    value {
      type: DT_FLOAT
    }
  }
  attr {
    key: "_class"
    value {
      list {
        s: "loc:@gradients/dense_2/BiasAdd_grad/BiasAddGrad"
      }
    }
  }
}
node {
  name: "gradients/dense_2/MatMul_grad/MatMul"
  op: "MatMul"
  input: "gradients/dense_2/BiasAdd_grad/tuple/control_dependency"
  input: "dense_2/kernel/read"
  attr {
    key: "T"
    value {
      type: DT_FLOAT
    }
  }
  attr {
    key: "transpose_a"
    value {
      b: false
    }
  }
  attr {
    key: "transpose_b"
    value {
      b: true
    }
  }
}
node {
  name: "gradients/dense_2/MatMul_grad/MatMul_1"
  op: "MatMul"
  input: "dropout_2/cond/Merge"
  input: "gradients/dense_2/BiasAdd_grad/tuple/control_dependency"
  attr {
    key: "T"
    value {
      type: DT_FLOAT
    }
  }
  attr {
    key: "transpose_a"
    value {
      b: true
    }
  }
  attr {
    key: "transpose_b"
    value {
      b: false
    }
  }
}
node {
  name: "gradients/dense_2/MatMul_grad/tuple/group_deps"
  op: "NoOp"
  input: "^gradients/dense_2/MatMul_grad/MatMul"
  input: "^gradients/dense_2/MatMul_grad/MatMul_1"
}
node {
  name: "gradients/dense_2/MatMul_grad/tuple/control_dependency"
  op: "Identity"
  input: "gradients/dense_2/MatMul_grad/MatMul"
  input: "^gradients/dense_2/MatMul_grad/tuple/group_deps"
  attr {
    key: "T"
    value {
      type: DT_FLOAT
    }
  }
  attr {
    key: "_class"
    value {
      list {
        s: "loc:@gradients/dense_2/MatMul_grad/MatMul"
      }
    }
  }
}
node {
  name: "gradients/dense_2/MatMul_grad/tuple/control_dependency_1"
  op: "Identity"
  input: "gradients/dense_2/MatMul_grad/MatMul_1"
  input: "^gradients/dense_2/MatMul_grad/tuple/group_deps"
  attr {
    key: "T"
    value {
      type: DT_FLOAT
    }
  }
  attr {
    key: "_class"
    value {
      list {
        s: "loc:@gradients/dense_2/MatMul_grad/MatMul_1"
      }
    }
  }
}
node {
  name: "gradients/dropout_2/cond/Merge_grad/cond_grad"
  op: "Switch"
  input: "gradients/dense_2/MatMul_grad/tuple/control_dependency"
  input: "dropout_2/cond/pred_id"
  attr {
    key: "T"
    value {
      type: DT_FLOAT
    }
  }
  attr {
    key: "_class"
    value {
      list {
        s: "loc:@gradients/dense_2/MatMul_grad/MatMul"
      }
    }
  }
}
node {
  name: "gradients/dropout_2/cond/Merge_grad/tuple/group_deps"
  op: "NoOp"
  input: "^gradients/dropout_2/cond/Merge_grad/cond_grad"
}
node {
  name: "gradients/dropout_2/cond/Merge_grad/tuple/control_dependency"
  op: "Identity"
  input: "gradients/dropout_2/cond/Merge_grad/cond_grad"
  input: "^gradients/dropout_2/cond/Merge_grad/tuple/group_deps"
  attr {
    key: "T"
    value {
      type: DT_FLOAT
    }
  }
  attr {
    key: "_class"
    value {
      list {
        s: "loc:@gradients/dense_2/MatMul_grad/MatMul"
      }
    }
  }
}
node {
  name: "gradients/dropout_2/cond/Merge_grad/tuple/control_dependency_1"
  op: "Identity"
  input: "gradients/dropout_2/cond/Merge_grad/cond_grad:1"
  input: "^gradients/dropout_2/cond/Merge_grad/tuple/group_deps"
  attr {
    key: "T"
    value {
      type: DT_FLOAT
    }
  }
  attr {
    key: "_class"
    value {
      list {
        s: "loc:@gradients/dense_2/MatMul_grad/MatMul"
      }
    }
  }
}
node {
  name: "gradients/dropout_2/cond/dropout/mul_grad/Shape"
  op: "Shape"
  input: "dropout_2/cond/dropout/div"
  attr {
    key: "T"
    value {
      type: DT_FLOAT
    }
  }
  attr {
    key: "out_type"
    value {
      type: DT_INT32
    }
  }
}
node {
  name: "gradients/dropout_2/cond/dropout/mul_grad/Shape_1"
  op: "Shape"
  input: "dropout_2/cond/dropout/Floor"
  attr {
    key: "T"
    value {
      type: DT_FLOAT
    }
  }
  attr {
    key: "out_type"
    value {
      type: DT_INT32
    }
  }
}
node {
  name: "gradients/dropout_2/cond/dropout/mul_grad/BroadcastGradientArgs"
  op: "BroadcastGradientArgs"
  input: "gradients/dropout_2/cond/dropout/mul_grad/Shape"
  input: "gradients/dropout_2/cond/dropout/mul_grad/Shape_1"
  attr {
    key: "T"
    value {
      type: DT_INT32
    }
  }
}
node {
  name: "gradients/dropout_2/cond/dropout/mul_grad/mul"
  op: "Mul"
  input: "gradients/dropout_2/cond/Merge_grad/tuple/control_dependency_1"
  input: "dropout_2/cond/dropout/Floor"
  attr {
    key: "T"
    value {
      type: DT_FLOAT
    }
  }
}
node {
  name: "gradients/dropout_2/cond/dropout/mul_grad/Sum"
  op: "Sum"
  input: "gradients/dropout_2/cond/dropout/mul_grad/mul"
  input: "gradients/dropout_2/cond/dropout/mul_grad/BroadcastGradientArgs"
  attr {
    key: "T"
    value {
      type: DT_FLOAT
    }
  }
  attr {
    key: "Tidx"
    value {
      type: DT_INT32
    }
  }
  attr {
    key: "keep_dims"
    value {
      b: false
    }
  }
}
node {
  name: "gradients/dropout_2/cond/dropout/mul_grad/Reshape"
  op: "Reshape"
  input: "gradients/dropout_2/cond/dropout/mul_grad/Sum"
  input: "gradients/dropout_2/cond/dropout/mul_grad/Shape"
  attr {
    key: "T"
    value {
      type: DT_FLOAT
    }
  }
  attr {
    key: "Tshape"
    value {
      type: DT_INT32
    }
  }
}
node {
  name: "gradients/dropout_2/cond/dropout/mul_grad/mul_1"
  op: "Mul"
  input: "dropout_2/cond/dropout/div"
  input: "gradients/dropout_2/cond/Merge_grad/tuple/control_dependency_1"
  attr {
    key: "T"
    value {
      type: DT_FLOAT
    }
  }
}
node {
  name: "gradients/dropout_2/cond/dropout/mul_grad/Sum_1"
  op: "Sum"
  input: "gradients/dropout_2/cond/dropout/mul_grad/mul_1"
  input: "gradients/dropout_2/cond/dropout/mul_grad/BroadcastGradientArgs:1"
  attr {
    key: "T"
    value {
      type: DT_FLOAT
    }
  }
  attr {
    key: "Tidx"
    value {
      type: DT_INT32
    }
  }
  attr {
    key: "keep_dims"
    value {
      b: false
    }
  }
}
node {
  name: "gradients/dropout_2/cond/dropout/mul_grad/Reshape_1"
  op: "Reshape"
  input: "gradients/dropout_2/cond/dropout/mul_grad/Sum_1"
  input: "gradients/dropout_2/cond/dropout/mul_grad/Shape_1"
  attr {
    key: "T"
    value {
      type: DT_FLOAT
    }
  }
  attr {
    key: "Tshape"
    value {
      type: DT_INT32
    }
  }
}
node {
  name: "gradients/dropout_2/cond/dropout/mul_grad/tuple/group_deps"
  op: "NoOp"
  input: "^gradients/dropout_2/cond/dropout/mul_grad/Reshape"
  input: "^gradients/dropout_2/cond/dropout/mul_grad/Reshape_1"
}
node {
  name: "gradients/dropout_2/cond/dropout/mul_grad/tuple/control_dependency"
  op: "Identity"
  input: "gradients/dropout_2/cond/dropout/mul_grad/Reshape"
  input: "^gradients/dropout_2/cond/dropout/mul_grad/tuple/group_deps"
  attr {
    key: "T"
    value {
      type: DT_FLOAT
    }
  }
  attr {
    key: "_class"
    value {
      list {
        s: "loc:@gradients/dropout_2/cond/dropout/mul_grad/Reshape"
      }
    }
  }
}
node {
  name: "gradients/dropout_2/cond/dropout/mul_grad/tuple/control_dependency_1"
  op: "Identity"
  input: "gradients/dropout_2/cond/dropout/mul_grad/Reshape_1"
  input: "^gradients/dropout_2/cond/dropout/mul_grad/tuple/group_deps"
  attr {
    key: "T"
    value {
      type: DT_FLOAT
    }
  }
  attr {
    key: "_class"
    value {
      list {
        s: "loc:@gradients/dropout_2/cond/dropout/mul_grad/Reshape_1"
      }
    }
  }
}
node {
  name: "gradients/Switch"
  op: "Switch"
  input: "dense_1/Relu"
  input: "dropout_2/cond/pred_id"
  attr {
    key: "T"
    value {
      type: DT_FLOAT
    }
  }
}
node {
  name: "gradients/Shape_1"
  op: "Shape"
  input: "gradients/Switch:1"
  attr {
    key: "T"
    value {
      type: DT_FLOAT
    }
  }
  attr {
    key: "out_type"
    value {
      type: DT_INT32
    }
  }
}
node {
  name: "gradients/zeros/Const"
  op: "Const"
  attr {
    key: "dtype"
    value {
      type: DT_FLOAT
    }
  }
  attr {
    key: "value"
    value {
      tensor {
        dtype: DT_FLOAT
        tensor_shape {
        }
        float_val: 0.0
      }
    }
  }
}
node {
  name: "gradients/zeros"
  op: "Fill"
  input: "gradients/Shape_1"
  input: "gradients/zeros/Const"
  attr {
    key: "T"
    value {
      type: DT_FLOAT
    }
  }
}
node {
  name: "gradients/dropout_2/cond/Identity/Switch_grad/cond_grad"
  op: "Merge"
  input: "gradients/dropout_2/cond/Merge_grad/tuple/control_dependency"
  input: "gradients/zeros"
  attr {
    key: "N"
    value {
      i: 2
    }
  }
  attr {
    key: "T"
    value {
      type: DT_FLOAT
    }
  }
}
node {
  name: "gradients/dropout_2/cond/dropout/div_grad/Shape"
  op: "Shape"
  input: "dropout_2/cond/dropout/Shape/Switch:1"
  attr {
    key: "T"
    value {
      type: DT_FLOAT
    }
  }
  attr {
    key: "out_type"
    value {
      type: DT_INT32
    }
  }
}
node {
  name: "gradients/dropout_2/cond/dropout/div_grad/Shape_1"
  op: "Const"
  attr {
    key: "dtype"
    value {
      type: DT_INT32
    }
  }
  attr {
    key: "value"
    value {
      tensor {
        dtype: DT_INT32
        tensor_shape {
          dim {
          }
        }
      }
    }
  }
}
node {
  name: "gradients/dropout_2/cond/dropout/div_grad/BroadcastGradientArgs"
  op: "BroadcastGradientArgs"
  input: "gradients/dropout_2/cond/dropout/div_grad/Shape"
  input: "gradients/dropout_2/cond/dropout/div_grad/Shape_1"
  attr {
    key: "T"
    value {
      type: DT_INT32
    }
  }
}
node {
  name: "gradients/dropout_2/cond/dropout/div_grad/RealDiv"
  op: "RealDiv"
  input: "gradients/dropout_2/cond/dropout/mul_grad/tuple/control_dependency"
  input: "dropout_2/cond/dropout/keep_prob"
  attr {
    key: "T"
    value {
      type: DT_FLOAT
    }
  }
}
node {
  name: "gradients/dropout_2/cond/dropout/div_grad/Sum"
  op: "Sum"
  input: "gradients/dropout_2/cond/dropout/div_grad/RealDiv"
  input: "gradients/dropout_2/cond/dropout/div_grad/BroadcastGradientArgs"
  attr {
    key: "T"
    value {
      type: DT_FLOAT
    }
  }
  attr {
    key: "Tidx"
    value {
      type: DT_INT32
    }
  }
  attr {
    key: "keep_dims"
    value {
      b: false
    }
  }
}
node {
  name: "gradients/dropout_2/cond/dropout/div_grad/Reshape"
  op: "Reshape"
  input: "gradients/dropout_2/cond/dropout/div_grad/Sum"
  input: "gradients/dropout_2/cond/dropout/div_grad/Shape"
  attr {
    key: "T"
    value {
      type: DT_FLOAT
    }
  }
  attr {
    key: "Tshape"
    value {
      type: DT_INT32
    }
  }
}
node {
  name: "gradients/dropout_2/cond/dropout/div_grad/Neg"
  op: "Neg"
  input: "dropout_2/cond/dropout/Shape/Switch:1"
  attr {
    key: "T"
    value {
      type: DT_FLOAT
    }
  }
}
node {
  name: "gradients/dropout_2/cond/dropout/div_grad/RealDiv_1"
  op: "RealDiv"
  input: "gradients/dropout_2/cond/dropout/div_grad/Neg"
  input: "dropout_2/cond/dropout/keep_prob"
  attr {
    key: "T"
    value {
      type: DT_FLOAT
    }
  }
}
node {
  name: "gradients/dropout_2/cond/dropout/div_grad/RealDiv_2"
  op: "RealDiv"
  input: "gradients/dropout_2/cond/dropout/div_grad/RealDiv_1"
  input: "dropout_2/cond/dropout/keep_prob"
  attr {
    key: "T"
    value {
      type: DT_FLOAT
    }
  }
}
node {
  name: "gradients/dropout_2/cond/dropout/div_grad/mul"
  op: "Mul"
  input: "gradients/dropout_2/cond/dropout/mul_grad/tuple/control_dependency"
  input: "gradients/dropout_2/cond/dropout/div_grad/RealDiv_2"
  attr {
    key: "T"
    value {
      type: DT_FLOAT
    }
  }
}
node {
  name: "gradients/dropout_2/cond/dropout/div_grad/Sum_1"
  op: "Sum"
  input: "gradients/dropout_2/cond/dropout/div_grad/mul"
  input: "gradients/dropout_2/cond/dropout/div_grad/BroadcastGradientArgs:1"
  attr {
    key: "T"
    value {
      type: DT_FLOAT
    }
  }
  attr {
    key: "Tidx"
    value {
      type: DT_INT32
    }
  }
  attr {
    key: "keep_dims"
    value {
      b: false
    }
  }
}
node {
  name: "gradients/dropout_2/cond/dropout/div_grad/Reshape_1"
  op: "Reshape"
  input: "gradients/dropout_2/cond/dropout/div_grad/Sum_1"
  input: "gradients/dropout_2/cond/dropout/div_grad/Shape_1"
  attr {
    key: "T"
    value {
      type: DT_FLOAT
    }
  }
  attr {
    key: "Tshape"
    value {
      type: DT_INT32
    }
  }
}
node {
  name: "gradients/dropout_2/cond/dropout/div_grad/tuple/group_deps"
  op: "NoOp"
  input: "^gradients/dropout_2/cond/dropout/div_grad/Reshape"
  input: "^gradients/dropout_2/cond/dropout/div_grad/Reshape_1"
}
node {
  name: "gradients/dropout_2/cond/dropout/div_grad/tuple/control_dependency"
  op: "Identity"
  input: "gradients/dropout_2/cond/dropout/div_grad/Reshape"
  input: "^gradients/dropout_2/cond/dropout/div_grad/tuple/group_deps"
  attr {
    key: "T"
    value {
      type: DT_FLOAT
    }
  }
  attr {
    key: "_class"
    value {
      list {
        s: "loc:@gradients/dropout_2/cond/dropout/div_grad/Reshape"
      }
    }
  }
}
node {
  name: "gradients/dropout_2/cond/dropout/div_grad/tuple/control_dependency_1"
  op: "Identity"
  input: "gradients/dropout_2/cond/dropout/div_grad/Reshape_1"
  input: "^gradients/dropout_2/cond/dropout/div_grad/tuple/group_deps"
  attr {
    key: "T"
    value {
      type: DT_FLOAT
    }
  }
  attr {
    key: "_class"
    value {
      list {
        s: "loc:@gradients/dropout_2/cond/dropout/div_grad/Reshape_1"
      }
    }
  }
}
node {
  name: "gradients/Switch_1"
  op: "Switch"
  input: "dense_1/Relu"
  input: "dropout_2/cond/pred_id"
  attr {
    key: "T"
    value {
      type: DT_FLOAT
    }
  }
}
node {
  name: "gradients/Shape_2"
  op: "Shape"
  input: "gradients/Switch_1"
  attr {
    key: "T"
    value {
      type: DT_FLOAT
    }
  }
  attr {
    key: "out_type"
    value {
      type: DT_INT32
    }
  }
}
node {
  name: "gradients/zeros_1/Const"
  op: "Const"
  attr {
    key: "dtype"
    value {
      type: DT_FLOAT
    }
  }
  attr {
    key: "value"
    value {
      tensor {
        dtype: DT_FLOAT
        tensor_shape {
        }
        float_val: 0.0
      }
    }
  }
}
node {
  name: "gradients/zeros_1"
  op: "Fill"
  input: "gradients/Shape_2"
  input: "gradients/zeros_1/Const"
  attr {
    key: "T"
    value {
      type: DT_FLOAT
    }
  }
}
node {
  name: "gradients/dropout_2/cond/dropout/Shape/Switch_grad/cond_grad"
  op: "Merge"
  input: "gradients/dropout_2/cond/dropout/div_grad/tuple/control_dependency"
  input: "gradients/zeros_1"
  attr {
    key: "N"
    value {
      i: 2
    }
  }
  attr {
    key: "T"
    value {
      type: DT_FLOAT
    }
  }
}
node {
  name: "gradients/AddN"
  op: "AddN"
  input: "gradients/dropout_2/cond/Identity/Switch_grad/cond_grad"
  input: "gradients/dropout_2/cond/dropout/Shape/Switch_grad/cond_grad"
  attr {
    key: "N"
    value {
      i: 2
    }
  }
  attr {
    key: "T"
    value {
      type: DT_FLOAT
    }
  }
  attr {
    key: "_class"
    value {
      list {
        s: "loc:@gradients/dropout_2/cond/Identity/Switch_grad/cond_grad"
      }
    }
  }
}
node {
  name: "gradients/dense_1/Relu_grad/ReluGrad"
  op: "ReluGrad"
  input: "gradients/AddN"
  input: "dense_1/Relu"
  attr {
    key: "T"
    value {
      type: DT_FLOAT
    }
  }
}
node {
  name: "gradients/dense_1/BiasAdd_grad/BiasAddGrad"
  op: "BiasAddGrad"
  input: "gradients/dense_1/Relu_grad/ReluGrad"
  attr {
    key: "T"
    value {
      type: DT_FLOAT
    }
  }
  attr {
    key: "data_format"
    value {
      s: "NHWC"
    }
  }
}
node {
  name: "gradients/dense_1/BiasAdd_grad/tuple/group_deps"
  op: "NoOp"
  input: "^gradients/dense_1/Relu_grad/ReluGrad"
  input: "^gradients/dense_1/BiasAdd_grad/BiasAddGrad"
}
node {
  name: "gradients/dense_1/BiasAdd_grad/tuple/control_dependency"
  op: "Identity"
  input: "gradients/dense_1/Relu_grad/ReluGrad"
  input: "^gradients/dense_1/BiasAdd_grad/tuple/group_deps"
  attr {
    key: "T"
    value {
      type: DT_FLOAT
    }
  }
  attr {
    key: "_class"
    value {
      list {
        s: "loc:@gradients/dense_1/Relu_grad/ReluGrad"
      }
    }
  }
}
node {
  name: "gradients/dense_1/BiasAdd_grad/tuple/control_dependency_1"
  op: "Identity"
  input: "gradients/dense_1/BiasAdd_grad/BiasAddGrad"
  input: "^gradients/dense_1/BiasAdd_grad/tuple/group_deps"
  attr {
    key: "T"
    value {
      type: DT_FLOAT
    }
  }
  attr {
    key: "_class"
    value {
      list {
        s: "loc:@gradients/dense_1/BiasAdd_grad/BiasAddGrad"
      }
    }
  }
}
node {
  name: "gradients/dense_1/MatMul_grad/MatMul"
  op: "MatMul"
  input: "gradients/dense_1/BiasAdd_grad/tuple/control_dependency"
  input: "dense_1/kernel/read"
  attr {
    key: "T"
    value {
      type: DT_FLOAT
    }
  }
  attr {
    key: "transpose_a"
    value {
      b: false
    }
  }
  attr {
    key: "transpose_b"
    value {
      b: true
    }
  }
}
node {
  name: "gradients/dense_1/MatMul_grad/MatMul_1"
  op: "MatMul"
  input: "Flatten/Reshape"
  input: "gradients/dense_1/BiasAdd_grad/tuple/control_dependency"
  attr {
    key: "T"
    value {
      type: DT_FLOAT
    }
  }
  attr {
    key: "transpose_a"
    value {
      b: true
    }
  }
  attr {
    key: "transpose_b"
    value {
      b: false
    }
  }
}
node {
  name: "gradients/dense_1/MatMul_grad/tuple/group_deps"
  op: "NoOp"
  input: "^gradients/dense_1/MatMul_grad/MatMul"
  input: "^gradients/dense_1/MatMul_grad/MatMul_1"
}
node {
  name: "gradients/dense_1/MatMul_grad/tuple/control_dependency"
  op: "Identity"
  input: "gradients/dense_1/MatMul_grad/MatMul"
  input: "^gradients/dense_1/MatMul_grad/tuple/group_deps"
  attr {
    key: "T"
    value {
      type: DT_FLOAT
    }
  }
  attr {
    key: "_class"
    value {
      list {
        s: "loc:@gradients/dense_1/MatMul_grad/MatMul"
      }
    }
  }
}
node {
  name: "gradients/dense_1/MatMul_grad/tuple/control_dependency_1"
  op: "Identity"
  input: "gradients/dense_1/MatMul_grad/MatMul_1"
  input: "^gradients/dense_1/MatMul_grad/tuple/group_deps"
  attr {
    key: "T"
    value {
      type: DT_FLOAT
    }
  }
  attr {
    key: "_class"
    value {
      list {
        s: "loc:@gradients/dense_1/MatMul_grad/MatMul_1"
      }
    }
  }
}
node {
  name: "gradients/Flatten/Reshape_grad/Shape"
  op: "Shape"
  input: "dropout_1/cond/Merge"
  attr {
    key: "T"
    value {
      type: DT_FLOAT
    }
  }
  attr {
    key: "out_type"
    value {
      type: DT_INT32
    }
  }
}
node {
  name: "gradients/Flatten/Reshape_grad/Reshape"
  op: "Reshape"
  input: "gradients/dense_1/MatMul_grad/tuple/control_dependency"
  input: "gradients/Flatten/Reshape_grad/Shape"
  attr {
    key: "T"
    value {
      type: DT_FLOAT
    }
  }
  attr {
    key: "Tshape"
    value {
      type: DT_INT32
    }
  }
}
node {
  name: "gradients/dropout_1/cond/Merge_grad/cond_grad"
  op: "Switch"
  input: "gradients/Flatten/Reshape_grad/Reshape"
  input: "dropout_1/cond/pred_id"
  attr {
    key: "T"
    value {
      type: DT_FLOAT
    }
  }
  attr {
    key: "_class"
    value {
      list {
        s: "loc:@gradients/Flatten/Reshape_grad/Reshape"
      }
    }
  }
}
node {
  name: "gradients/dropout_1/cond/Merge_grad/tuple/group_deps"
  op: "NoOp"
  input: "^gradients/dropout_1/cond/Merge_grad/cond_grad"
}
node {
  name: "gradients/dropout_1/cond/Merge_grad/tuple/control_dependency"
  op: "Identity"
  input: "gradients/dropout_1/cond/Merge_grad/cond_grad"
  input: "^gradients/dropout_1/cond/Merge_grad/tuple/group_deps"
  attr {
    key: "T"
    value {
      type: DT_FLOAT
    }
  }
  attr {
    key: "_class"
    value {
      list {
        s: "loc:@gradients/Flatten/Reshape_grad/Reshape"
      }
    }
  }
}
node {
  name: "gradients/dropout_1/cond/Merge_grad/tuple/control_dependency_1"
  op: "Identity"
  input: "gradients/dropout_1/cond/Merge_grad/cond_grad:1"
  input: "^gradients/dropout_1/cond/Merge_grad/tuple/group_deps"
  attr {
    key: "T"
    value {
      type: DT_FLOAT
    }
  }
  attr {
    key: "_class"
    value {
      list {
        s: "loc:@gradients/Flatten/Reshape_grad/Reshape"
      }
    }
  }
}
node {
  name: "gradients/dropout_1/cond/dropout/mul_grad/Shape"
  op: "Shape"
  input: "dropout_1/cond/dropout/div"
  attr {
    key: "T"
    value {
      type: DT_FLOAT
    }
  }
  attr {
    key: "out_type"
    value {
      type: DT_INT32
    }
  }
}
node {
  name: "gradients/dropout_1/cond/dropout/mul_grad/Shape_1"
  op: "Shape"
  input: "dropout_1/cond/dropout/Floor"
  attr {
    key: "T"
    value {
      type: DT_FLOAT
    }
  }
  attr {
    key: "out_type"
    value {
      type: DT_INT32
    }
  }
}
node {
  name: "gradients/dropout_1/cond/dropout/mul_grad/BroadcastGradientArgs"
  op: "BroadcastGradientArgs"
  input: "gradients/dropout_1/cond/dropout/mul_grad/Shape"
  input: "gradients/dropout_1/cond/dropout/mul_grad/Shape_1"
  attr {
    key: "T"
    value {
      type: DT_INT32
    }
  }
}
node {
  name: "gradients/dropout_1/cond/dropout/mul_grad/mul"
  op: "Mul"
  input: "gradients/dropout_1/cond/Merge_grad/tuple/control_dependency_1"
  input: "dropout_1/cond/dropout/Floor"
  attr {
    key: "T"
    value {
      type: DT_FLOAT
    }
  }
}
node {
  name: "gradients/dropout_1/cond/dropout/mul_grad/Sum"
  op: "Sum"
  input: "gradients/dropout_1/cond/dropout/mul_grad/mul"
  input: "gradients/dropout_1/cond/dropout/mul_grad/BroadcastGradientArgs"
  attr {
    key: "T"
    value {
      type: DT_FLOAT
    }
  }
  attr {
    key: "Tidx"
    value {
      type: DT_INT32
    }
  }
  attr {
    key: "keep_dims"
    value {
      b: false
    }
  }
}
node {
  name: "gradients/dropout_1/cond/dropout/mul_grad/Reshape"
  op: "Reshape"
  input: "gradients/dropout_1/cond/dropout/mul_grad/Sum"
  input: "gradients/dropout_1/cond/dropout/mul_grad/Shape"
  attr {
    key: "T"
    value {
      type: DT_FLOAT
    }
  }
  attr {
    key: "Tshape"
    value {
      type: DT_INT32
    }
  }
}
node {
  name: "gradients/dropout_1/cond/dropout/mul_grad/mul_1"
  op: "Mul"
  input: "dropout_1/cond/dropout/div"
  input: "gradients/dropout_1/cond/Merge_grad/tuple/control_dependency_1"
  attr {
    key: "T"
    value {
      type: DT_FLOAT
    }
  }
}
node {
  name: "gradients/dropout_1/cond/dropout/mul_grad/Sum_1"
  op: "Sum"
  input: "gradients/dropout_1/cond/dropout/mul_grad/mul_1"
  input: "gradients/dropout_1/cond/dropout/mul_grad/BroadcastGradientArgs:1"
  attr {
    key: "T"
    value {
      type: DT_FLOAT
    }
  }
  attr {
    key: "Tidx"
    value {
      type: DT_INT32
    }
  }
  attr {
    key: "keep_dims"
    value {
      b: false
    }
  }
}
node {
  name: "gradients/dropout_1/cond/dropout/mul_grad/Reshape_1"
  op: "Reshape"
  input: "gradients/dropout_1/cond/dropout/mul_grad/Sum_1"
  input: "gradients/dropout_1/cond/dropout/mul_grad/Shape_1"
  attr {
    key: "T"
    value {
      type: DT_FLOAT
    }
  }
  attr {
    key: "Tshape"
    value {
      type: DT_INT32
    }
  }
}
node {
  name: "gradients/dropout_1/cond/dropout/mul_grad/tuple/group_deps"
  op: "NoOp"
  input: "^gradients/dropout_1/cond/dropout/mul_grad/Reshape"
  input: "^gradients/dropout_1/cond/dropout/mul_grad/Reshape_1"
}
node {
  name: "gradients/dropout_1/cond/dropout/mul_grad/tuple/control_dependency"
  op: "Identity"
  input: "gradients/dropout_1/cond/dropout/mul_grad/Reshape"
  input: "^gradients/dropout_1/cond/dropout/mul_grad/tuple/group_deps"
  attr {
    key: "T"
    value {
      type: DT_FLOAT
    }
  }
  attr {
    key: "_class"
    value {
      list {
        s: "loc:@gradients/dropout_1/cond/dropout/mul_grad/Reshape"
      }
    }
  }
}
node {
  name: "gradients/dropout_1/cond/dropout/mul_grad/tuple/control_dependency_1"
  op: "Identity"
  input: "gradients/dropout_1/cond/dropout/mul_grad/Reshape_1"
  input: "^gradients/dropout_1/cond/dropout/mul_grad/tuple/group_deps"
  attr {
    key: "T"
    value {
      type: DT_FLOAT
    }
  }
  attr {
    key: "_class"
    value {
      list {
        s: "loc:@gradients/dropout_1/cond/dropout/mul_grad/Reshape_1"
      }
    }
  }
}
node {
  name: "gradients/Switch_2"
  op: "Switch"
  input: "conv2d_2/Relu"
  input: "dropout_1/cond/pred_id"
  attr {
    key: "T"
    value {
      type: DT_FLOAT
    }
  }
}
node {
  name: "gradients/Shape_3"
  op: "Shape"
  input: "gradients/Switch_2:1"
  attr {
    key: "T"
    value {
      type: DT_FLOAT
    }
  }
  attr {
    key: "out_type"
    value {
      type: DT_INT32
    }
  }
}
node {
  name: "gradients/zeros_2/Const"
  op: "Const"
  attr {
    key: "dtype"
    value {
      type: DT_FLOAT
    }
  }
  attr {
    key: "value"
    value {
      tensor {
        dtype: DT_FLOAT
        tensor_shape {
        }
        float_val: 0.0
      }
    }
  }
}
node {
  name: "gradients/zeros_2"
  op: "Fill"
  input: "gradients/Shape_3"
  input: "gradients/zeros_2/Const"
  attr {
    key: "T"
    value {
      type: DT_FLOAT
    }
  }
}
node {
  name: "gradients/dropout_1/cond/Identity/Switch_grad/cond_grad"
  op: "Merge"
  input: "gradients/dropout_1/cond/Merge_grad/tuple/control_dependency"
  input: "gradients/zeros_2"
  attr {
    key: "N"
    value {
      i: 2
    }
  }
  attr {
    key: "T"
    value {
      type: DT_FLOAT
    }
  }
}
node {
  name: "gradients/dropout_1/cond/dropout/div_grad/Shape"
  op: "Shape"
  input: "dropout_1/cond/dropout/Shape/Switch:1"
  attr {
    key: "T"
    value {
      type: DT_FLOAT
    }
  }
  attr {
    key: "out_type"
    value {
      type: DT_INT32
    }
  }
}
node {
  name: "gradients/dropout_1/cond/dropout/div_grad/Shape_1"
  op: "Const"
  attr {
    key: "dtype"
    value {
      type: DT_INT32
    }
  }
  attr {
    key: "value"
    value {
      tensor {
        dtype: DT_INT32
        tensor_shape {
          dim {
          }
        }
      }
    }
  }
}
node {
  name: "gradients/dropout_1/cond/dropout/div_grad/BroadcastGradientArgs"
  op: "BroadcastGradientArgs"
  input: "gradients/dropout_1/cond/dropout/div_grad/Shape"
  input: "gradients/dropout_1/cond/dropout/div_grad/Shape_1"
  attr {
    key: "T"
    value {
      type: DT_INT32
    }
  }
}
node {
  name: "gradients/dropout_1/cond/dropout/div_grad/RealDiv"
  op: "RealDiv"
  input: "gradients/dropout_1/cond/dropout/mul_grad/tuple/control_dependency"
  input: "dropout_1/cond/dropout/keep_prob"
  attr {
    key: "T"
    value {
      type: DT_FLOAT
    }
  }
}
node {
  name: "gradients/dropout_1/cond/dropout/div_grad/Sum"
  op: "Sum"
  input: "gradients/dropout_1/cond/dropout/div_grad/RealDiv"
  input: "gradients/dropout_1/cond/dropout/div_grad/BroadcastGradientArgs"
  attr {
    key: "T"
    value {
      type: DT_FLOAT
    }
  }
  attr {
    key: "Tidx"
    value {
      type: DT_INT32
    }
  }
  attr {
    key: "keep_dims"
    value {
      b: false
    }
  }
}
node {
  name: "gradients/dropout_1/cond/dropout/div_grad/Reshape"
  op: "Reshape"
  input: "gradients/dropout_1/cond/dropout/div_grad/Sum"
  input: "gradients/dropout_1/cond/dropout/div_grad/Shape"
  attr {
    key: "T"
    value {
      type: DT_FLOAT
    }
  }
  attr {
    key: "Tshape"
    value {
      type: DT_INT32
    }
  }
}
node {
  name: "gradients/dropout_1/cond/dropout/div_grad/Neg"
  op: "Neg"
  input: "dropout_1/cond/dropout/Shape/Switch:1"
  attr {
    key: "T"
    value {
      type: DT_FLOAT
    }
  }
}
node {
  name: "gradients/dropout_1/cond/dropout/div_grad/RealDiv_1"
  op: "RealDiv"
  input: "gradients/dropout_1/cond/dropout/div_grad/Neg"
  input: "dropout_1/cond/dropout/keep_prob"
  attr {
    key: "T"
    value {
      type: DT_FLOAT
    }
  }
}
node {
  name: "gradients/dropout_1/cond/dropout/div_grad/RealDiv_2"
  op: "RealDiv"
  input: "gradients/dropout_1/cond/dropout/div_grad/RealDiv_1"
  input: "dropout_1/cond/dropout/keep_prob"
  attr {
    key: "T"
    value {
      type: DT_FLOAT
    }
  }
}
node {
  name: "gradients/dropout_1/cond/dropout/div_grad/mul"
  op: "Mul"
  input: "gradients/dropout_1/cond/dropout/mul_grad/tuple/control_dependency"
  input: "gradients/dropout_1/cond/dropout/div_grad/RealDiv_2"
  attr {
    key: "T"
    value {
      type: DT_FLOAT
    }
  }
}
node {
  name: "gradients/dropout_1/cond/dropout/div_grad/Sum_1"
  op: "Sum"
  input: "gradients/dropout_1/cond/dropout/div_grad/mul"
  input: "gradients/dropout_1/cond/dropout/div_grad/BroadcastGradientArgs:1"
  attr {
    key: "T"
    value {
      type: DT_FLOAT
    }
  }
  attr {
    key: "Tidx"
    value {
      type: DT_INT32
    }
  }
  attr {
    key: "keep_dims"
    value {
      b: false
    }
  }
}
node {
  name: "gradients/dropout_1/cond/dropout/div_grad/Reshape_1"
  op: "Reshape"
  input: "gradients/dropout_1/cond/dropout/div_grad/Sum_1"
  input: "gradients/dropout_1/cond/dropout/div_grad/Shape_1"
  attr {
    key: "T"
    value {
      type: DT_FLOAT
    }
  }
  attr {
    key: "Tshape"
    value {
      type: DT_INT32
    }
  }
}
node {
  name: "gradients/dropout_1/cond/dropout/div_grad/tuple/group_deps"
  op: "NoOp"
  input: "^gradients/dropout_1/cond/dropout/div_grad/Reshape"
  input: "^gradients/dropout_1/cond/dropout/div_grad/Reshape_1"
}
node {
  name: "gradients/dropout_1/cond/dropout/div_grad/tuple/control_dependency"
  op: "Identity"
  input: "gradients/dropout_1/cond/dropout/div_grad/Reshape"
  input: "^gradients/dropout_1/cond/dropout/div_grad/tuple/group_deps"
  attr {
    key: "T"
    value {
      type: DT_FLOAT
    }
  }
  attr {
    key: "_class"
    value {
      list {
        s: "loc:@gradients/dropout_1/cond/dropout/div_grad/Reshape"
      }
    }
  }
}
node {
  name: "gradients/dropout_1/cond/dropout/div_grad/tuple/control_dependency_1"
  op: "Identity"
  input: "gradients/dropout_1/cond/dropout/div_grad/Reshape_1"
  input: "^gradients/dropout_1/cond/dropout/div_grad/tuple/group_deps"
  attr {
    key: "T"
    value {
      type: DT_FLOAT
    }
  }
  attr {
    key: "_class"
    value {
      list {
        s: "loc:@gradients/dropout_1/cond/dropout/div_grad/Reshape_1"
      }
    }
  }
}
node {
  name: "gradients/Switch_3"
  op: "Switch"
  input: "conv2d_2/Relu"
  input: "dropout_1/cond/pred_id"
  attr {
    key: "T"
    value {
      type: DT_FLOAT
    }
  }
}
node {
  name: "gradients/Shape_4"
  op: "Shape"
  input: "gradients/Switch_3"
  attr {
    key: "T"
    value {
      type: DT_FLOAT
    }
  }
  attr {
    key: "out_type"
    value {
      type: DT_INT32
    }
  }
}
node {
  name: "gradients/zeros_3/Const"
  op: "Const"
  attr {
    key: "dtype"
    value {
      type: DT_FLOAT
    }
  }
  attr {
    key: "value"
    value {
      tensor {
        dtype: DT_FLOAT
        tensor_shape {
        }
        float_val: 0.0
      }
    }
  }
}
node {
  name: "gradients/zeros_3"
  op: "Fill"
  input: "gradients/Shape_4"
  input: "gradients/zeros_3/Const"
  attr {
    key: "T"
    value {
      type: DT_FLOAT
    }
  }
}
node {
  name: "gradients/dropout_1/cond/dropout/Shape/Switch_grad/cond_grad"
  op: "Merge"
  input: "gradients/dropout_1/cond/dropout/div_grad/tuple/control_dependency"
  input: "gradients/zeros_3"
  attr {
    key: "N"
    value {
      i: 2
    }
  }
  attr {
    key: "T"
    value {
      type: DT_FLOAT
    }
  }
}
node {
  name: "gradients/AddN_1"
  op: "AddN"
  input: "gradients/dropout_1/cond/Identity/Switch_grad/cond_grad"
  input: "gradients/dropout_1/cond/dropout/Shape/Switch_grad/cond_grad"
  attr {
    key: "N"
    value {
      i: 2
    }
  }
  attr {
    key: "T"
    value {
      type: DT_FLOAT
    }
  }
  attr {
    key: "_class"
    value {
      list {
        s: "loc:@gradients/dropout_1/cond/Identity/Switch_grad/cond_grad"
      }
    }
  }
}
node {
  name: "gradients/conv2d_2/Relu_grad/ReluGrad"
  op: "ReluGrad"
  input: "gradients/AddN_1"
  input: "conv2d_2/Relu"
  attr {
    key: "T"
    value {
      type: DT_FLOAT
    }
  }
}
node {
  name: "gradients/conv2d_2/BiasAdd_grad/BiasAddGrad"
  op: "BiasAddGrad"
  input: "gradients/conv2d_2/Relu_grad/ReluGrad"
  attr {
    key: "T"
    value {
      type: DT_FLOAT
    }
  }
  attr {
    key: "data_format"
    value {
      s: "NHWC"
    }
  }
}
node {
  name: "gradients/conv2d_2/BiasAdd_grad/tuple/group_deps"
  op: "NoOp"
  input: "^gradients/conv2d_2/Relu_grad/ReluGrad"
  input: "^gradients/conv2d_2/BiasAdd_grad/BiasAddGrad"
}
node {
  name: "gradients/conv2d_2/BiasAdd_grad/tuple/control_dependency"
  op: "Identity"
  input: "gradients/conv2d_2/Relu_grad/ReluGrad"
  input: "^gradients/conv2d_2/BiasAdd_grad/tuple/group_deps"
  attr {
    key: "T"
    value {
      type: DT_FLOAT
    }
  }
  attr {
    key: "_class"
    value {
      list {
        s: "loc:@gradients/conv2d_2/Relu_grad/ReluGrad"
      }
    }
  }
}
node {
  name: "gradients/conv2d_2/BiasAdd_grad/tuple/control_dependency_1"
  op: "Identity"
  input: "gradients/conv2d_2/BiasAdd_grad/BiasAddGrad"
  input: "^gradients/conv2d_2/BiasAdd_grad/tuple/group_deps"
  attr {
    key: "T"
    value {
      type: DT_FLOAT
    }
  }
  attr {
    key: "_class"
    value {
      list {
        s: "loc:@gradients/conv2d_2/BiasAdd_grad/BiasAddGrad"
      }
    }
  }
}
node {
  name: "gradients/conv2d_2/convolution_grad/Shape"
  op: "Shape"
  input: "max_pooling2d_1/MaxPool"
  attr {
    key: "T"
    value {
      type: DT_FLOAT
    }
  }
  attr {
    key: "out_type"
    value {
      type: DT_INT32
    }
  }
}
node {
  name: "gradients/conv2d_2/convolution_grad/Conv2DBackpropInput"
  op: "Conv2DBackpropInput"
  input: "gradients/conv2d_2/convolution_grad/Shape"
  input: "conv2d_2/kernel/read"
  input: "gradients/conv2d_2/BiasAdd_grad/tuple/control_dependency"
  attr {
    key: "T"
    value {
      type: DT_FLOAT
    }
  }
  attr {
    key: "data_format"
    value {
      s: "NHWC"
    }
  }
  attr {
    key: "padding"
    value {
      s: "VALID"
    }
  }
  attr {
    key: "strides"
    value {
      list {
        i: 1
        i: 1
        i: 1
        i: 1
      }
    }
  }
  attr {
    key: "use_cudnn_on_gpu"
    value {
      b: true
    }
  }
}
node {
  name: "gradients/conv2d_2/convolution_grad/Shape_1"
  op: "Const"
  attr {
    key: "dtype"
    value {
      type: DT_INT32
    }
  }
  attr {
    key: "value"
    value {
      tensor {
        dtype: DT_INT32
        tensor_shape {
          dim {
            size: 4
          }
        }
        tensor_content: "\003\000\000\000\003\000\000\000 \000\000\000 \000\000\000"
      }
    }
  }
}
node {
  name: "gradients/conv2d_2/convolution_grad/Conv2DBackpropFilter"
  op: "Conv2DBackpropFilter"
  input: "max_pooling2d_1/MaxPool"
  input: "gradients/conv2d_2/convolution_grad/Shape_1"
  input: "gradients/conv2d_2/BiasAdd_grad/tuple/control_dependency"
  attr {
    key: "T"
    value {
      type: DT_FLOAT
    }
  }
  attr {
    key: "data_format"
    value {
      s: "NHWC"
    }
  }
  attr {
    key: "padding"
    value {
      s: "VALID"
    }
  }
  attr {
    key: "strides"
    value {
      list {
        i: 1
        i: 1
        i: 1
        i: 1
      }
    }
  }
  attr {
    key: "use_cudnn_on_gpu"
    value {
      b: true
    }
  }
}
node {
  name: "gradients/conv2d_2/convolution_grad/tuple/group_deps"
  op: "NoOp"
  input: "^gradients/conv2d_2/convolution_grad/Conv2DBackpropInput"
  input: "^gradients/conv2d_2/convolution_grad/Conv2DBackpropFilter"
}
node {
  name: "gradients/conv2d_2/convolution_grad/tuple/control_dependency"
  op: "Identity"
  input: "gradients/conv2d_2/convolution_grad/Conv2DBackpropInput"
  input: "^gradients/conv2d_2/convolution_grad/tuple/group_deps"
  attr {
    key: "T"
    value {
      type: DT_FLOAT
    }
  }
  attr {
    key: "_class"
    value {
      list {
        s: "loc:@gradients/conv2d_2/convolution_grad/Conv2DBackpropInput"
      }
    }
  }
}
node {
  name: "gradients/conv2d_2/convolution_grad/tuple/control_dependency_1"
  op: "Identity"
  input: "gradients/conv2d_2/convolution_grad/Conv2DBackpropFilter"
  input: "^gradients/conv2d_2/convolution_grad/tuple/group_deps"
  attr {
    key: "T"
    value {
      type: DT_FLOAT
    }
  }
  attr {
    key: "_class"
    value {
      list {
        s: "loc:@gradients/conv2d_2/convolution_grad/Conv2DBackpropFilter"
      }
    }
  }
}
node {
  name: "gradients/max_pooling2d_1/MaxPool_grad/MaxPoolGrad"
  op: "MaxPoolGrad"
  input: "conv2d_1/Relu"
  input: "max_pooling2d_1/MaxPool"
  input: "gradients/conv2d_2/convolution_grad/tuple/control_dependency"
  attr {
    key: "T"
    value {
      type: DT_FLOAT
    }
  }
  attr {
    key: "data_format"
    value {
      s: "NHWC"
    }
  }
  attr {
    key: "ksize"
    value {
      list {
        i: 1
        i: 2
        i: 2
        i: 1
      }
    }
  }
  attr {
    key: "padding"
    value {
      s: "VALID"
    }
  }
  attr {
    key: "strides"
    value {
      list {
        i: 1
        i: 2
        i: 2
        i: 1
      }
    }
  }
}
node {
  name: "gradients/conv2d_1/Relu_grad/ReluGrad"
  op: "ReluGrad"
  input: "gradients/max_pooling2d_1/MaxPool_grad/MaxPoolGrad"
  input: "conv2d_1/Relu"
  attr {
    key: "T"
    value {
      type: DT_FLOAT
    }
  }
}
node {
  name: "gradients/conv2d_1/BiasAdd_grad/BiasAddGrad"
  op: "BiasAddGrad"
  input: "gradients/conv2d_1/Relu_grad/ReluGrad"
  attr {
    key: "T"
    value {
      type: DT_FLOAT
    }
  }
  attr {
    key: "data_format"
    value {
      s: "NHWC"
    }
  }
}
node {
  name: "gradients/conv2d_1/BiasAdd_grad/tuple/group_deps"
  op: "NoOp"
  input: "^gradients/conv2d_1/Relu_grad/ReluGrad"
  input: "^gradients/conv2d_1/BiasAdd_grad/BiasAddGrad"
}
node {
  name: "gradients/conv2d_1/BiasAdd_grad/tuple/control_dependency"
  op: "Identity"
  input: "gradients/conv2d_1/Relu_grad/ReluGrad"
  input: "^gradients/conv2d_1/BiasAdd_grad/tuple/group_deps"
  attr {
    key: "T"
    value {
      type: DT_FLOAT
    }
  }
  attr {
    key: "_class"
    value {
      list {
        s: "loc:@gradients/conv2d_1/Relu_grad/ReluGrad"
      }
    }
  }
}
node {
  name: "gradients/conv2d_1/BiasAdd_grad/tuple/control_dependency_1"
  op: "Identity"
  input: "gradients/conv2d_1/BiasAdd_grad/BiasAddGrad"
  input: "^gradients/conv2d_1/BiasAdd_grad/tuple/group_deps"
  attr {
    key: "T"
    value {
      type: DT_FLOAT
    }
  }
  attr {
    key: "_class"
    value {
      list {
        s: "loc:@gradients/conv2d_1/BiasAdd_grad/BiasAddGrad"
      }
    }
  }
}
node {
  name: "gradients/conv2d_1/convolution_grad/Shape"
  op: "Shape"
  input: "Placeholder"
  attr {
    key: "T"
    value {
      type: DT_FLOAT
    }
  }
  attr {
    key: "out_type"
    value {
      type: DT_INT32
    }
  }
}
node {
  name: "gradients/conv2d_1/convolution_grad/Conv2DBackpropInput"
  op: "Conv2DBackpropInput"
  input: "gradients/conv2d_1/convolution_grad/Shape"
  input: "conv2d_1/kernel/read"
  input: "gradients/conv2d_1/BiasAdd_grad/tuple/control_dependency"
  attr {
    key: "T"
    value {
      type: DT_FLOAT
    }
  }
  attr {
    key: "data_format"
    value {
      s: "NHWC"
    }
  }
  attr {
    key: "padding"
    value {
      s: "VALID"
    }
  }
  attr {
    key: "strides"
    value {
      list {
        i: 1
        i: 1
        i: 1
        i: 1
      }
    }
  }
  attr {
    key: "use_cudnn_on_gpu"
    value {
      b: true
    }
  }
}
node {
  name: "gradients/conv2d_1/convolution_grad/Shape_1"
  op: "Const"
  attr {
    key: "dtype"
    value {
      type: DT_INT32
    }
  }
  attr {
    key: "value"
    value {
      tensor {
        dtype: DT_INT32
        tensor_shape {
          dim {
            size: 4
          }
        }
        tensor_content: "\003\000\000\000\003\000\000\000\001\000\000\000 \000\000\000"
      }
    }
  }
}
node {
  name: "gradients/conv2d_1/convolution_grad/Conv2DBackpropFilter"
  op: "Conv2DBackpropFilter"
  input: "Placeholder"
  input: "gradients/conv2d_1/convolution_grad/Shape_1"
  input: "gradients/conv2d_1/BiasAdd_grad/tuple/control_dependency"
  attr {
    key: "T"
    value {
      type: DT_FLOAT
    }
  }
  attr {
    key: "data_format"
    value {
      s: "NHWC"
    }
  }
  attr {
    key: "padding"
    value {
      s: "VALID"
    }
  }
  attr {
    key: "strides"
    value {
      list {
        i: 1
        i: 1
        i: 1
        i: 1
      }
    }
  }
  attr {
    key: "use_cudnn_on_gpu"
    value {
      b: true
    }
  }
}
node {
  name: "gradients/conv2d_1/convolution_grad/tuple/group_deps"
  op: "NoOp"
  input: "^gradients/conv2d_1/convolution_grad/Conv2DBackpropInput"
  input: "^gradients/conv2d_1/convolution_grad/Conv2DBackpropFilter"
}
node {
  name: "gradients/conv2d_1/convolution_grad/tuple/control_dependency"
  op: "Identity"
  input: "gradients/conv2d_1/convolution_grad/Conv2DBackpropInput"
  input: "^gradients/conv2d_1/convolution_grad/tuple/group_deps"
  attr {
    key: "T"
    value {
      type: DT_FLOAT
    }
  }
  attr {
    key: "_class"
    value {
      list {
        s: "loc:@gradients/conv2d_1/convolution_grad/Conv2DBackpropInput"
      }
    }
  }
}
node {
  name: "gradients/conv2d_1/convolution_grad/tuple/control_dependency_1"
  op: "Identity"
  input: "gradients/conv2d_1/convolution_grad/Conv2DBackpropFilter"
  input: "^gradients/conv2d_1/convolution_grad/tuple/group_deps"
  attr {
    key: "T"
    value {
      type: DT_FLOAT
    }
  }
  attr {
    key: "_class"
    value {
      list {
        s: "loc:@gradients/conv2d_1/convolution_grad/Conv2DBackpropFilter"
      }
    }
  }
}
node {
  name: "beta1_power/initial_value"
  op: "Const"
  attr {
    key: "_class"
    value {
      list {
        s: "loc:@conv2d_1/bias"
      }
    }
  }
  attr {
    key: "dtype"
    value {
      type: DT_FLOAT
    }
  }
  attr {
    key: "value"
    value {
      tensor {
        dtype: DT_FLOAT
        tensor_shape {
        }
        float_val: 0.8999999761581421
      }
    }
  }
}
node {
  name: "beta1_power"
  op: "VariableV2"
  attr {
    key: "_class"
    value {
      list {
        s: "loc:@conv2d_1/bias"
      }
    }
  }
  attr {
    key: "container"
    value {
      s: ""
    }
  }
  attr {
    key: "dtype"
    value {
      type: DT_FLOAT
    }
  }
  attr {
    key: "shape"
    value {
      shape {
      }
    }
  }
  attr {
    key: "shared_name"
    value {
      s: ""
    }
  }
}
node {
  name: "beta1_power/Assign"
  op: "Assign"
  input: "beta1_power"
  input: "beta1_power/initial_value"
  attr {
    key: "T"
    value {
      type: DT_FLOAT
    }
  }
  attr {
    key: "_class"
    value {
      list {
        s: "loc:@conv2d_1/bias"
      }
    }
  }
  attr {
    key: "use_locking"
    value {
      b: true
    }
  }
  attr {
    key: "validate_shape"
    value {
      b: true
    }
  }
}
node {
  name: "beta1_power/read"
  op: "Identity"
  input: "beta1_power"
  attr {
    key: "T"
    value {
      type: DT_FLOAT
    }
  }
  attr {
    key: "_class"
    value {
      list {
        s: "loc:@conv2d_1/bias"
      }
    }
  }
}
node {
  name: "beta2_power/initial_value"
  op: "Const"
  attr {
    key: "_class"
    value {
      list {
        s: "loc:@conv2d_1/bias"
      }
    }
  }
  attr {
    key: "dtype"
    value {
      type: DT_FLOAT
    }
  }
  attr {
    key: "value"
    value {
      tensor {
        dtype: DT_FLOAT
        tensor_shape {
        }
        float_val: 0.9990000128746033
      }
    }
  }
}
node {
  name: "beta2_power"
  op: "VariableV2"
  attr {
    key: "_class"
    value {
      list {
        s: "loc:@conv2d_1/bias"
      }
    }
  }
  attr {
    key: "container"
    value {
      s: ""
    }
  }
  attr {
    key: "dtype"
    value {
      type: DT_FLOAT
    }
  }
  attr {
    key: "shape"
    value {
      shape {
      }
    }
  }
  attr {
    key: "shared_name"
    value {
      s: ""
    }
  }
}
node {
  name: "beta2_power/Assign"
  op: "Assign"
  input: "beta2_power"
  input: "beta2_power/initial_value"
  attr {
    key: "T"
    value {
      type: DT_FLOAT
    }
  }
  attr {
    key: "_class"
    value {
      list {
        s: "loc:@conv2d_1/bias"
      }
    }
  }
  attr {
    key: "use_locking"
    value {
      b: true
    }
  }
  attr {
    key: "validate_shape"
    value {
      b: true
    }
  }
}
node {
  name: "beta2_power/read"
  op: "Identity"
  input: "beta2_power"
  attr {
    key: "T"
    value {
      type: DT_FLOAT
    }
  }
  attr {
    key: "_class"
    value {
      list {
        s: "loc:@conv2d_1/bias"
      }
    }
  }
}
node {
  name: "conv2d_1/kernel/Adam/Initializer/zeros"
  op: "Const"
  attr {
    key: "_class"
    value {
      list {
        s: "loc:@conv2d_1/kernel"
      }
    }
  }
  attr {
    key: "dtype"
    value {
      type: DT_FLOAT
    }
  }
  attr {
    key: "value"
    value {
      tensor {
        dtype: DT_FLOAT
        tensor_shape {
          dim {
            size: 3
          }
          dim {
            size: 3
          }
          dim {
            size: 1
          }
          dim {
            size: 32
          }
        }
        float_val: 0.0
      }
    }
  }
}
node {
  name: "conv2d_1/kernel/Adam"
  op: "VariableV2"
  attr {
    key: "_class"
    value {
      list {
        s: "loc:@conv2d_1/kernel"
      }
    }
  }
  attr {
    key: "container"
    value {
      s: ""
    }
  }
  attr {
    key: "dtype"
    value {
      type: DT_FLOAT
    }
  }
  attr {
    key: "shape"
    value {
      shape {
        dim {
          size: 3
        }
        dim {
          size: 3
        }
        dim {
          size: 1
        }
        dim {
          size: 32
        }
      }
    }
  }
  attr {
    key: "shared_name"
    value {
      s: ""
    }
  }
}
node {
  name: "conv2d_1/kernel/Adam/Assign"
  op: "Assign"
  input: "conv2d_1/kernel/Adam"
  input: "conv2d_1/kernel/Adam/Initializer/zeros"
  attr {
    key: "T"
    value {
      type: DT_FLOAT
    }
  }
  attr {
    key: "_class"
    value {
      list {
        s: "loc:@conv2d_1/kernel"
      }
    }
  }
  attr {
    key: "use_locking"
    value {
      b: true
    }
  }
  attr {
    key: "validate_shape"
    value {
      b: true
    }
  }
}
node {
  name: "conv2d_1/kernel/Adam/read"
  op: "Identity"
  input: "conv2d_1/kernel/Adam"
  attr {
    key: "T"
    value {
      type: DT_FLOAT
    }
  }
  attr {
    key: "_class"
    value {
      list {
        s: "loc:@conv2d_1/kernel"
      }
    }
  }
}
node {
  name: "conv2d_1/kernel/Adam_1/Initializer/zeros"
  op: "Const"
  attr {
    key: "_class"
    value {
      list {
        s: "loc:@conv2d_1/kernel"
      }
    }
  }
  attr {
    key: "dtype"
    value {
      type: DT_FLOAT
    }
  }
  attr {
    key: "value"
    value {
      tensor {
        dtype: DT_FLOAT
        tensor_shape {
          dim {
            size: 3
          }
          dim {
            size: 3
          }
          dim {
            size: 1
          }
          dim {
            size: 32
          }
        }
        float_val: 0.0
      }
    }
  }
}
node {
  name: "conv2d_1/kernel/Adam_1"
  op: "VariableV2"
  attr {
    key: "_class"
    value {
      list {
        s: "loc:@conv2d_1/kernel"
      }
    }
  }
  attr {
    key: "container"
    value {
      s: ""
    }
  }
  attr {
    key: "dtype"
    value {
      type: DT_FLOAT
    }
  }
  attr {
    key: "shape"
    value {
      shape {
        dim {
          size: 3
        }
        dim {
          size: 3
        }
        dim {
          size: 1
        }
        dim {
          size: 32
        }
      }
    }
  }
  attr {
    key: "shared_name"
    value {
      s: ""
    }
  }
}
node {
  name: "conv2d_1/kernel/Adam_1/Assign"
  op: "Assign"
  input: "conv2d_1/kernel/Adam_1"
  input: "conv2d_1/kernel/Adam_1/Initializer/zeros"
  attr {
    key: "T"
    value {
      type: DT_FLOAT
    }
  }
  attr {
    key: "_class"
    value {
      list {
        s: "loc:@conv2d_1/kernel"
      }
    }
  }
  attr {
    key: "use_locking"
    value {
      b: true
    }
  }
  attr {
    key: "validate_shape"
    value {
      b: true
    }
  }
}
node {
  name: "conv2d_1/kernel/Adam_1/read"
  op: "Identity"
  input: "conv2d_1/kernel/Adam_1"
  attr {
    key: "T"
    value {
      type: DT_FLOAT
    }
  }
  attr {
    key: "_class"
    value {
      list {
        s: "loc:@conv2d_1/kernel"
      }
    }
  }
}
node {
  name: "conv2d_1/bias/Adam/Initializer/zeros"
  op: "Const"
  attr {
    key: "_class"
    value {
      list {
        s: "loc:@conv2d_1/bias"
      }
    }
  }
  attr {
    key: "dtype"
    value {
      type: DT_FLOAT
    }
  }
  attr {
    key: "value"
    value {
      tensor {
        dtype: DT_FLOAT
        tensor_shape {
          dim {
            size: 32
          }
        }
        float_val: 0.0
      }
    }
  }
}
node {
  name: "conv2d_1/bias/Adam"
  op: "VariableV2"
  attr {
    key: "_class"
    value {
      list {
        s: "loc:@conv2d_1/bias"
      }
    }
  }
  attr {
    key: "container"
    value {
      s: ""
    }
  }
  attr {
    key: "dtype"
    value {
      type: DT_FLOAT
    }
  }
  attr {
    key: "shape"
    value {
      shape {
        dim {
          size: 32
        }
      }
    }
  }
  attr {
    key: "shared_name"
    value {
      s: ""
    }
  }
}
node {
  name: "conv2d_1/bias/Adam/Assign"
  op: "Assign"
  input: "conv2d_1/bias/Adam"
  input: "conv2d_1/bias/Adam/Initializer/zeros"
  attr {
    key: "T"
    value {
      type: DT_FLOAT
    }
  }
  attr {
    key: "_class"
    value {
      list {
        s: "loc:@conv2d_1/bias"
      }
    }
  }
  attr {
    key: "use_locking"
    value {
      b: true
    }
  }
  attr {
    key: "validate_shape"
    value {
      b: true
    }
  }
}
node {
  name: "conv2d_1/bias/Adam/read"
  op: "Identity"
  input: "conv2d_1/bias/Adam"
  attr {
    key: "T"
    value {
      type: DT_FLOAT
    }
  }
  attr {
    key: "_class"
    value {
      list {
        s: "loc:@conv2d_1/bias"
      }
    }
  }
}
node {
  name: "conv2d_1/bias/Adam_1/Initializer/zeros"
  op: "Const"
  attr {
    key: "_class"
    value {
      list {
        s: "loc:@conv2d_1/bias"
      }
    }
  }
  attr {
    key: "dtype"
    value {
      type: DT_FLOAT
    }
  }
  attr {
    key: "value"
    value {
      tensor {
        dtype: DT_FLOAT
        tensor_shape {
          dim {
            size: 32
          }
        }
        float_val: 0.0
      }
    }
  }
}
node {
  name: "conv2d_1/bias/Adam_1"
  op: "VariableV2"
  attr {
    key: "_class"
    value {
      list {
        s: "loc:@conv2d_1/bias"
      }
    }
  }
  attr {
    key: "container"
    value {
      s: ""
    }
  }
  attr {
    key: "dtype"
    value {
      type: DT_FLOAT
    }
  }
  attr {
    key: "shape"
    value {
      shape {
        dim {
          size: 32
        }
      }
    }
  }
  attr {
    key: "shared_name"
    value {
      s: ""
    }
  }
}
node {
  name: "conv2d_1/bias/Adam_1/Assign"
  op: "Assign"
  input: "conv2d_1/bias/Adam_1"
  input: "conv2d_1/bias/Adam_1/Initializer/zeros"
  attr {
    key: "T"
    value {
      type: DT_FLOAT
    }
  }
  attr {
    key: "_class"
    value {
      list {
        s: "loc:@conv2d_1/bias"
      }
    }
  }
  attr {
    key: "use_locking"
    value {
      b: true
    }
  }
  attr {
    key: "validate_shape"
    value {
      b: true
    }
  }
}
node {
  name: "conv2d_1/bias/Adam_1/read"
  op: "Identity"
  input: "conv2d_1/bias/Adam_1"
  attr {
    key: "T"
    value {
      type: DT_FLOAT
    }
  }
  attr {
    key: "_class"
    value {
      list {
        s: "loc:@conv2d_1/bias"
      }
    }
  }
}
node {
  name: "conv2d_2/kernel/Adam/Initializer/zeros"
  op: "Const"
  attr {
    key: "_class"
    value {
      list {
        s: "loc:@conv2d_2/kernel"
      }
    }
  }
  attr {
    key: "dtype"
    value {
      type: DT_FLOAT
    }
  }
  attr {
    key: "value"
    value {
      tensor {
        dtype: DT_FLOAT
        tensor_shape {
          dim {
            size: 3
          }
          dim {
            size: 3
          }
          dim {
            size: 32
          }
          dim {
            size: 32
          }
        }
        float_val: 0.0
      }
    }
  }
}
node {
  name: "conv2d_2/kernel/Adam"
  op: "VariableV2"
  attr {
    key: "_class"
    value {
      list {
        s: "loc:@conv2d_2/kernel"
      }
    }
  }
  attr {
    key: "container"
    value {
      s: ""
    }
  }
  attr {
    key: "dtype"
    value {
      type: DT_FLOAT
    }
  }
  attr {
    key: "shape"
    value {
      shape {
        dim {
          size: 3
        }
        dim {
          size: 3
        }
        dim {
          size: 32
        }
        dim {
          size: 32
        }
      }
    }
  }
  attr {
    key: "shared_name"
    value {
      s: ""
    }
  }
}
node {
  name: "conv2d_2/kernel/Adam/Assign"
  op: "Assign"
  input: "conv2d_2/kernel/Adam"
  input: "conv2d_2/kernel/Adam/Initializer/zeros"
  attr {
    key: "T"
    value {
      type: DT_FLOAT
    }
  }
  attr {
    key: "_class"
    value {
      list {
        s: "loc:@conv2d_2/kernel"
      }
    }
  }
  attr {
    key: "use_locking"
    value {
      b: true
    }
  }
  attr {
    key: "validate_shape"
    value {
      b: true
    }
  }
}
node {
  name: "conv2d_2/kernel/Adam/read"
  op: "Identity"
  input: "conv2d_2/kernel/Adam"
  attr {
    key: "T"
    value {
      type: DT_FLOAT
    }
  }
  attr {
    key: "_class"
    value {
      list {
        s: "loc:@conv2d_2/kernel"
      }
    }
  }
}
node {
  name: "conv2d_2/kernel/Adam_1/Initializer/zeros"
  op: "Const"
  attr {
    key: "_class"
    value {
      list {
        s: "loc:@conv2d_2/kernel"
      }
    }
  }
  attr {
    key: "dtype"
    value {
      type: DT_FLOAT
    }
  }
  attr {
    key: "value"
    value {
      tensor {
        dtype: DT_FLOAT
        tensor_shape {
          dim {
            size: 3
          }
          dim {
            size: 3
          }
          dim {
            size: 32
          }
          dim {
            size: 32
          }
        }
        float_val: 0.0
      }
    }
  }
}
node {
  name: "conv2d_2/kernel/Adam_1"
  op: "VariableV2"
  attr {
    key: "_class"
    value {
      list {
        s: "loc:@conv2d_2/kernel"
      }
    }
  }
  attr {
    key: "container"
    value {
      s: ""
    }
  }
  attr {
    key: "dtype"
    value {
      type: DT_FLOAT
    }
  }
  attr {
    key: "shape"
    value {
      shape {
        dim {
          size: 3
        }
        dim {
          size: 3
        }
        dim {
          size: 32
        }
        dim {
          size: 32
        }
      }
    }
  }
  attr {
    key: "shared_name"
    value {
      s: ""
    }
  }
}
node {
  name: "conv2d_2/kernel/Adam_1/Assign"
  op: "Assign"
  input: "conv2d_2/kernel/Adam_1"
  input: "conv2d_2/kernel/Adam_1/Initializer/zeros"
  attr {
    key: "T"
    value {
      type: DT_FLOAT
    }
  }
  attr {
    key: "_class"
    value {
      list {
        s: "loc:@conv2d_2/kernel"
      }
    }
  }
  attr {
    key: "use_locking"
    value {
      b: true
    }
  }
  attr {
    key: "validate_shape"
    value {
      b: true
    }
  }
}
node {
  name: "conv2d_2/kernel/Adam_1/read"
  op: "Identity"
  input: "conv2d_2/kernel/Adam_1"
  attr {
    key: "T"
    value {
      type: DT_FLOAT
    }
  }
  attr {
    key: "_class"
    value {
      list {
        s: "loc:@conv2d_2/kernel"
      }
    }
  }
}
node {
  name: "conv2d_2/bias/Adam/Initializer/zeros"
  op: "Const"
  attr {
    key: "_class"
    value {
      list {
        s: "loc:@conv2d_2/bias"
      }
    }
  }
  attr {
    key: "dtype"
    value {
      type: DT_FLOAT
    }
  }
  attr {
    key: "value"
    value {
      tensor {
        dtype: DT_FLOAT
        tensor_shape {
          dim {
            size: 32
          }
        }
        float_val: 0.0
      }
    }
  }
}
node {
  name: "conv2d_2/bias/Adam"
  op: "VariableV2"
  attr {
    key: "_class"
    value {
      list {
        s: "loc:@conv2d_2/bias"
      }
    }
  }
  attr {
    key: "container"
    value {
      s: ""
    }
  }
  attr {
    key: "dtype"
    value {
      type: DT_FLOAT
    }
  }
  attr {
    key: "shape"
    value {
      shape {
        dim {
          size: 32
        }
      }
    }
  }
  attr {
    key: "shared_name"
    value {
      s: ""
    }
  }
}
node {
  name: "conv2d_2/bias/Adam/Assign"
  op: "Assign"
  input: "conv2d_2/bias/Adam"
  input: "conv2d_2/bias/Adam/Initializer/zeros"
  attr {
    key: "T"
    value {
      type: DT_FLOAT
    }
  }
  attr {
    key: "_class"
    value {
      list {
        s: "loc:@conv2d_2/bias"
      }
    }
  }
  attr {
    key: "use_locking"
    value {
      b: true
    }
  }
  attr {
    key: "validate_shape"
    value {
      b: true
    }
  }
}
node {
  name: "conv2d_2/bias/Adam/read"
  op: "Identity"
  input: "conv2d_2/bias/Adam"
  attr {
    key: "T"
    value {
      type: DT_FLOAT
    }
  }
  attr {
    key: "_class"
    value {
      list {
        s: "loc:@conv2d_2/bias"
      }
    }
  }
}
node {
  name: "conv2d_2/bias/Adam_1/Initializer/zeros"
  op: "Const"
  attr {
    key: "_class"
    value {
      list {
        s: "loc:@conv2d_2/bias"
      }
    }
  }
  attr {
    key: "dtype"
    value {
      type: DT_FLOAT
    }
  }
  attr {
    key: "value"
    value {
      tensor {
        dtype: DT_FLOAT
        tensor_shape {
          dim {
            size: 32
          }
        }
        float_val: 0.0
      }
    }
  }
}
node {
  name: "conv2d_2/bias/Adam_1"
  op: "VariableV2"
  attr {
    key: "_class"
    value {
      list {
        s: "loc:@conv2d_2/bias"
      }
    }
  }
  attr {
    key: "container"
    value {
      s: ""
    }
  }
  attr {
    key: "dtype"
    value {
      type: DT_FLOAT
    }
  }
  attr {
    key: "shape"
    value {
      shape {
        dim {
          size: 32
        }
      }
    }
  }
  attr {
    key: "shared_name"
    value {
      s: ""
    }
  }
}
node {
  name: "conv2d_2/bias/Adam_1/Assign"
  op: "Assign"
  input: "conv2d_2/bias/Adam_1"
  input: "conv2d_2/bias/Adam_1/Initializer/zeros"
  attr {
    key: "T"
    value {
      type: DT_FLOAT
    }
  }
  attr {
    key: "_class"
    value {
      list {
        s: "loc:@conv2d_2/bias"
      }
    }
  }
  attr {
    key: "use_locking"
    value {
      b: true
    }
  }
  attr {
    key: "validate_shape"
    value {
      b: true
    }
  }
}
node {
  name: "conv2d_2/bias/Adam_1/read"
  op: "Identity"
  input: "conv2d_2/bias/Adam_1"
  attr {
    key: "T"
    value {
      type: DT_FLOAT
    }
  }
  attr {
    key: "_class"
    value {
      list {
        s: "loc:@conv2d_2/bias"
      }
    }
  }
}
node {
  name: "dense_1/kernel/Adam/Initializer/zeros"
  op: "Const"
  attr {
    key: "_class"
    value {
      list {
        s: "loc:@dense_1/kernel"
      }
    }
  }
  attr {
    key: "dtype"
    value {
      type: DT_FLOAT
    }
  }
  attr {
    key: "value"
    value {
      tensor {
        dtype: DT_FLOAT
        tensor_shape {
          dim {
            size: 3872
          }
          dim {
            size: 64
          }
        }
        float_val: 0.0
      }
    }
  }
}
node {
  name: "dense_1/kernel/Adam"
  op: "VariableV2"
  attr {
    key: "_class"
    value {
      list {
        s: "loc:@dense_1/kernel"
      }
    }
  }
  attr {
    key: "container"
    value {
      s: ""
    }
  }
  attr {
    key: "dtype"
    value {
      type: DT_FLOAT
    }
  }
  attr {
    key: "shape"
    value {
      shape {
        dim {
          size: 3872
        }
        dim {
          size: 64
        }
      }
    }
  }
  attr {
    key: "shared_name"
    value {
      s: ""
    }
  }
}
node {
  name: "dense_1/kernel/Adam/Assign"
  op: "Assign"
  input: "dense_1/kernel/Adam"
  input: "dense_1/kernel/Adam/Initializer/zeros"
  attr {
    key: "T"
    value {
      type: DT_FLOAT
    }
  }
  attr {
    key: "_class"
    value {
      list {
        s: "loc:@dense_1/kernel"
      }
    }
  }
  attr {
    key: "use_locking"
    value {
      b: true
    }
  }
  attr {
    key: "validate_shape"
    value {
      b: true
    }
  }
}
node {
  name: "dense_1/kernel/Adam/read"
  op: "Identity"
  input: "dense_1/kernel/Adam"
  attr {
    key: "T"
    value {
      type: DT_FLOAT
    }
  }
  attr {
    key: "_class"
    value {
      list {
        s: "loc:@dense_1/kernel"
      }
    }
  }
}
node {
  name: "dense_1/kernel/Adam_1/Initializer/zeros"
  op: "Const"
  attr {
    key: "_class"
    value {
      list {
        s: "loc:@dense_1/kernel"
      }
    }
  }
  attr {
    key: "dtype"
    value {
      type: DT_FLOAT
    }
  }
  attr {
    key: "value"
    value {
      tensor {
        dtype: DT_FLOAT
        tensor_shape {
          dim {
            size: 3872
          }
          dim {
            size: 64
          }
        }
        float_val: 0.0
      }
    }
  }
}
node {
  name: "dense_1/kernel/Adam_1"
  op: "VariableV2"
  attr {
    key: "_class"
    value {
      list {
        s: "loc:@dense_1/kernel"
      }
    }
  }
  attr {
    key: "container"
    value {
      s: ""
    }
  }
  attr {
    key: "dtype"
    value {
      type: DT_FLOAT
    }
  }
  attr {
    key: "shape"
    value {
      shape {
        dim {
          size: 3872
        }
        dim {
          size: 64
        }
      }
    }
  }
  attr {
    key: "shared_name"
    value {
      s: ""
    }
  }
}
node {
  name: "dense_1/kernel/Adam_1/Assign"
  op: "Assign"
  input: "dense_1/kernel/Adam_1"
  input: "dense_1/kernel/Adam_1/Initializer/zeros"
  attr {
    key: "T"
    value {
      type: DT_FLOAT
    }
  }
  attr {
    key: "_class"
    value {
      list {
        s: "loc:@dense_1/kernel"
      }
    }
  }
  attr {
    key: "use_locking"
    value {
      b: true
    }
  }
  attr {
    key: "validate_shape"
    value {
      b: true
    }
  }
}
node {
  name: "dense_1/kernel/Adam_1/read"
  op: "Identity"
  input: "dense_1/kernel/Adam_1"
  attr {
    key: "T"
    value {
      type: DT_FLOAT
    }
  }
  attr {
    key: "_class"
    value {
      list {
        s: "loc:@dense_1/kernel"
      }
    }
  }
}
node {
  name: "dense_1/bias/Adam/Initializer/zeros"
  op: "Const"
  attr {
    key: "_class"
    value {
      list {
        s: "loc:@dense_1/bias"
      }
    }
  }
  attr {
    key: "dtype"
    value {
      type: DT_FLOAT
    }
  }
  attr {
    key: "value"
    value {
      tensor {
        dtype: DT_FLOAT
        tensor_shape {
          dim {
            size: 64
          }
        }
        float_val: 0.0
      }
    }
  }
}
node {
  name: "dense_1/bias/Adam"
  op: "VariableV2"
  attr {
    key: "_class"
    value {
      list {
        s: "loc:@dense_1/bias"
      }
    }
  }
  attr {
    key: "container"
    value {
      s: ""
    }
  }
  attr {
    key: "dtype"
    value {
      type: DT_FLOAT
    }
  }
  attr {
    key: "shape"
    value {
      shape {
        dim {
          size: 64
        }
      }
    }
  }
  attr {
    key: "shared_name"
    value {
      s: ""
    }
  }
}
node {
  name: "dense_1/bias/Adam/Assign"
  op: "Assign"
  input: "dense_1/bias/Adam"
  input: "dense_1/bias/Adam/Initializer/zeros"
  attr {
    key: "T"
    value {
      type: DT_FLOAT
    }
  }
  attr {
    key: "_class"
    value {
      list {
        s: "loc:@dense_1/bias"
      }
    }
  }
  attr {
    key: "use_locking"
    value {
      b: true
    }
  }
  attr {
    key: "validate_shape"
    value {
      b: true
    }
  }
}
node {
  name: "dense_1/bias/Adam/read"
  op: "Identity"
  input: "dense_1/bias/Adam"
  attr {
    key: "T"
    value {
      type: DT_FLOAT
    }
  }
  attr {
    key: "_class"
    value {
      list {
        s: "loc:@dense_1/bias"
      }
    }
  }
}
node {
  name: "dense_1/bias/Adam_1/Initializer/zeros"
  op: "Const"
  attr {
    key: "_class"
    value {
      list {
        s: "loc:@dense_1/bias"
      }
    }
  }
  attr {
    key: "dtype"
    value {
      type: DT_FLOAT
    }
  }
  attr {
    key: "value"
    value {
      tensor {
        dtype: DT_FLOAT
        tensor_shape {
          dim {
            size: 64
          }
        }
        float_val: 0.0
      }
    }
  }
}
node {
  name: "dense_1/bias/Adam_1"
  op: "VariableV2"
  attr {
    key: "_class"
    value {
      list {
        s: "loc:@dense_1/bias"
      }
    }
  }
  attr {
    key: "container"
    value {
      s: ""
    }
  }
  attr {
    key: "dtype"
    value {
      type: DT_FLOAT
    }
  }
  attr {
    key: "shape"
    value {
      shape {
        dim {
          size: 64
        }
      }
    }
  }
  attr {
    key: "shared_name"
    value {
      s: ""
    }
  }
}
node {
  name: "dense_1/bias/Adam_1/Assign"
  op: "Assign"
  input: "dense_1/bias/Adam_1"
  input: "dense_1/bias/Adam_1/Initializer/zeros"
  attr {
    key: "T"
    value {
      type: DT_FLOAT
    }
  }
  attr {
    key: "_class"
    value {
      list {
        s: "loc:@dense_1/bias"
      }
    }
  }
  attr {
    key: "use_locking"
    value {
      b: true
    }
  }
  attr {
    key: "validate_shape"
    value {
      b: true
    }
  }
}
node {
  name: "dense_1/bias/Adam_1/read"
  op: "Identity"
  input: "dense_1/bias/Adam_1"
  attr {
    key: "T"
    value {
      type: DT_FLOAT
    }
  }
  attr {
    key: "_class"
    value {
      list {
        s: "loc:@dense_1/bias"
      }
    }
  }
}
node {
  name: "dense_2/kernel/Adam/Initializer/zeros"
  op: "Const"
  attr {
    key: "_class"
    value {
      list {
        s: "loc:@dense_2/kernel"
      }
    }
  }
  attr {
    key: "dtype"
    value {
      type: DT_FLOAT
    }
  }
  attr {
    key: "value"
    value {
      tensor {
        dtype: DT_FLOAT
        tensor_shape {
          dim {
            size: 64
          }
          dim {
            size: 10
          }
        }
        float_val: 0.0
      }
    }
  }
}
node {
  name: "dense_2/kernel/Adam"
  op: "VariableV2"
  attr {
    key: "_class"
    value {
      list {
        s: "loc:@dense_2/kernel"
      }
    }
  }
  attr {
    key: "container"
    value {
      s: ""
    }
  }
  attr {
    key: "dtype"
    value {
      type: DT_FLOAT
    }
  }
  attr {
    key: "shape"
    value {
      shape {
        dim {
          size: 64
        }
        dim {
          size: 10
        }
      }
    }
  }
  attr {
    key: "shared_name"
    value {
      s: ""
    }
  }
}
node {
  name: "dense_2/kernel/Adam/Assign"
  op: "Assign"
  input: "dense_2/kernel/Adam"
  input: "dense_2/kernel/Adam/Initializer/zeros"
  attr {
    key: "T"
    value {
      type: DT_FLOAT
    }
  }
  attr {
    key: "_class"
    value {
      list {
        s: "loc:@dense_2/kernel"
      }
    }
  }
  attr {
    key: "use_locking"
    value {
      b: true
    }
  }
  attr {
    key: "validate_shape"
    value {
      b: true
    }
  }
}
node {
  name: "dense_2/kernel/Adam/read"
  op: "Identity"
  input: "dense_2/kernel/Adam"
  attr {
    key: "T"
    value {
      type: DT_FLOAT
    }
  }
  attr {
    key: "_class"
    value {
      list {
        s: "loc:@dense_2/kernel"
      }
    }
  }
}
node {
  name: "dense_2/kernel/Adam_1/Initializer/zeros"
  op: "Const"
  attr {
    key: "_class"
    value {
      list {
        s: "loc:@dense_2/kernel"
      }
    }
  }
  attr {
    key: "dtype"
    value {
      type: DT_FLOAT
    }
  }
  attr {
    key: "value"
    value {
      tensor {
        dtype: DT_FLOAT
        tensor_shape {
          dim {
            size: 64
          }
          dim {
            size: 10
          }
        }
        float_val: 0.0
      }
    }
  }
}
node {
  name: "dense_2/kernel/Adam_1"
  op: "VariableV2"
  attr {
    key: "_class"
    value {
      list {
        s: "loc:@dense_2/kernel"
      }
    }
  }
  attr {
    key: "container"
    value {
      s: ""
    }
  }
  attr {
    key: "dtype"
    value {
      type: DT_FLOAT
    }
  }
  attr {
    key: "shape"
    value {
      shape {
        dim {
          size: 64
        }
        dim {
          size: 10
        }
      }
    }
  }
  attr {
    key: "shared_name"
    value {
      s: ""
    }
  }
}
node {
  name: "dense_2/kernel/Adam_1/Assign"
  op: "Assign"
  input: "dense_2/kernel/Adam_1"
  input: "dense_2/kernel/Adam_1/Initializer/zeros"
  attr {
    key: "T"
    value {
      type: DT_FLOAT
    }
  }
  attr {
    key: "_class"
    value {
      list {
        s: "loc:@dense_2/kernel"
      }
    }
  }
  attr {
    key: "use_locking"
    value {
      b: true
    }
  }
  attr {
    key: "validate_shape"
    value {
      b: true
    }
  }
}
node {
  name: "dense_2/kernel/Adam_1/read"
  op: "Identity"
  input: "dense_2/kernel/Adam_1"
  attr {
    key: "T"
    value {
      type: DT_FLOAT
    }
  }
  attr {
    key: "_class"
    value {
      list {
        s: "loc:@dense_2/kernel"
      }
    }
  }
}
node {
  name: "dense_2/bias/Adam/Initializer/zeros"
  op: "Const"
  attr {
    key: "_class"
    value {
      list {
        s: "loc:@dense_2/bias"
      }
    }
  }
  attr {
    key: "dtype"
    value {
      type: DT_FLOAT
    }
  }
  attr {
    key: "value"
    value {
      tensor {
        dtype: DT_FLOAT
        tensor_shape {
          dim {
            size: 10
          }
        }
        float_val: 0.0
      }
    }
  }
}
node {
  name: "dense_2/bias/Adam"
  op: "VariableV2"
  attr {
    key: "_class"
    value {
      list {
        s: "loc:@dense_2/bias"
      }
    }
  }
  attr {
    key: "container"
    value {
      s: ""
    }
  }
  attr {
    key: "dtype"
    value {
      type: DT_FLOAT
    }
  }
  attr {
    key: "shape"
    value {
      shape {
        dim {
          size: 10
        }
      }
    }
  }
  attr {
    key: "shared_name"
    value {
      s: ""
    }
  }
}
node {
  name: "dense_2/bias/Adam/Assign"
  op: "Assign"
  input: "dense_2/bias/Adam"
  input: "dense_2/bias/Adam/Initializer/zeros"
  attr {
    key: "T"
    value {
      type: DT_FLOAT
    }
  }
  attr {
    key: "_class"
    value {
      list {
        s: "loc:@dense_2/bias"
      }
    }
  }
  attr {
    key: "use_locking"
    value {
      b: true
    }
  }
  attr {
    key: "validate_shape"
    value {
      b: true
    }
  }
}
node {
  name: "dense_2/bias/Adam/read"
  op: "Identity"
  input: "dense_2/bias/Adam"
  attr {
    key: "T"
    value {
      type: DT_FLOAT
    }
  }
  attr {
    key: "_class"
    value {
      list {
        s: "loc:@dense_2/bias"
      }
    }
  }
}
node {
  name: "dense_2/bias/Adam_1/Initializer/zeros"
  op: "Const"
  attr {
    key: "_class"
    value {
      list {
        s: "loc:@dense_2/bias"
      }
    }
  }
  attr {
    key: "dtype"
    value {
      type: DT_FLOAT
    }
  }
  attr {
    key: "value"
    value {
      tensor {
        dtype: DT_FLOAT
        tensor_shape {
          dim {
            size: 10
          }
        }
        float_val: 0.0
      }
    }
  }
}
node {
  name: "dense_2/bias/Adam_1"
  op: "VariableV2"
  attr {
    key: "_class"
    value {
      list {
        s: "loc:@dense_2/bias"
      }
    }
  }
  attr {
    key: "container"
    value {
      s: ""
    }
  }
  attr {
    key: "dtype"
    value {
      type: DT_FLOAT
    }
  }
  attr {
    key: "shape"
    value {
      shape {
        dim {
          size: 10
        }
      }
    }
  }
  attr {
    key: "shared_name"
    value {
      s: ""
    }
  }
}
node {
  name: "dense_2/bias/Adam_1/Assign"
  op: "Assign"
  input: "dense_2/bias/Adam_1"
  input: "dense_2/bias/Adam_1/Initializer/zeros"
  attr {
    key: "T"
    value {
      type: DT_FLOAT
    }
  }
  attr {
    key: "_class"
    value {
      list {
        s: "loc:@dense_2/bias"
      }
    }
  }
  attr {
    key: "use_locking"
    value {
      b: true
    }
  }
  attr {
    key: "validate_shape"
    value {
      b: true
    }
  }
}
node {
  name: "dense_2/bias/Adam_1/read"
  op: "Identity"
  input: "dense_2/bias/Adam_1"
  attr {
    key: "T"
    value {
      type: DT_FLOAT
    }
  }
  attr {
    key: "_class"
    value {
      list {
        s: "loc:@dense_2/bias"
      }
    }
  }
}
node {
  name: "Adam/learning_rate"
  op: "Const"
  attr {
    key: "dtype"
    value {
      type: DT_FLOAT
    }
  }
  attr {
    key: "value"
    value {
      tensor {
        dtype: DT_FLOAT
        tensor_shape {
        }
        float_val: 9.999999747378752e-05
      }
    }
  }
}
node {
  name: "Adam/beta1"
  op: "Const"
  attr {
    key: "dtype"
    value {
      type: DT_FLOAT
    }
  }
  attr {
    key: "value"
    value {
      tensor {
        dtype: DT_FLOAT
        tensor_shape {
        }
        float_val: 0.8999999761581421
      }
    }
  }
}
node {
  name: "Adam/beta2"
  op: "Const"
  attr {
    key: "dtype"
    value {
      type: DT_FLOAT
    }
  }
  attr {
    key: "value"
    value {
      tensor {
        dtype: DT_FLOAT
        tensor_shape {
        }
        float_val: 0.9990000128746033
      }
    }
  }
}
node {
  name: "Adam/epsilon"
  op: "Const"
  attr {
    key: "dtype"
    value {
      type: DT_FLOAT
    }
  }
  attr {
    key: "value"
    value {
      tensor {
        dtype: DT_FLOAT
        tensor_shape {
        }
        float_val: 9.99999993922529e-09
      }
    }
  }
}
node {
  name: "Adam/update_conv2d_1/kernel/ApplyAdam"
  op: "ApplyAdam"
  input: "conv2d_1/kernel"
  input: "conv2d_1/kernel/Adam"
  input: "conv2d_1/kernel/Adam_1"
  input: "beta1_power/read"
  input: "beta2_power/read"
  input: "Adam/learning_rate"
  input: "Adam/beta1"
  input: "Adam/beta2"
  input: "Adam/epsilon"
  input: "gradients/conv2d_1/convolution_grad/tuple/control_dependency_1"
  attr {
    key: "T"
    value {
      type: DT_FLOAT
    }
  }
  attr {
    key: "_class"
    value {
      list {
        s: "loc:@conv2d_1/kernel"
      }
    }
  }
  attr {
    key: "use_locking"
    value {
      b: false
    }
  }
  attr {
    key: "use_nesterov"
    value {
      b: false
    }
  }
}
node {
  name: "Adam/update_conv2d_1/bias/ApplyAdam"
  op: "ApplyAdam"
  input: "conv2d_1/bias"
  input: "conv2d_1/bias/Adam"
  input: "conv2d_1/bias/Adam_1"
  input: "beta1_power/read"
  input: "beta2_power/read"
  input: "Adam/learning_rate"
  input: "Adam/beta1"
  input: "Adam/beta2"
  input: "Adam/epsilon"
  input: "gradients/conv2d_1/BiasAdd_grad/tuple/control_dependency_1"
  attr {
    key: "T"
    value {
      type: DT_FLOAT
    }
  }
  attr {
    key: "_class"
    value {
      list {
        s: "loc:@conv2d_1/bias"
      }
    }
  }
  attr {
    key: "use_locking"
    value {
      b: false
    }
  }
  attr {
    key: "use_nesterov"
    value {
      b: false
    }
  }
}
node {
  name: "Adam/update_conv2d_2/kernel/ApplyAdam"
  op: "ApplyAdam"
  input: "conv2d_2/kernel"
  input: "conv2d_2/kernel/Adam"
  input: "conv2d_2/kernel/Adam_1"
  input: "beta1_power/read"
  input: "beta2_power/read"
  input: "Adam/learning_rate"
  input: "Adam/beta1"
  input: "Adam/beta2"
  input: "Adam/epsilon"
  input: "gradients/conv2d_2/convolution_grad/tuple/control_dependency_1"
  attr {
    key: "T"
    value {
      type: DT_FLOAT
    }
  }
  attr {
    key: "_class"
    value {
      list {
        s: "loc:@conv2d_2/kernel"
      }
    }
  }
  attr {
    key: "use_locking"
    value {
      b: false
    }
  }
  attr {
    key: "use_nesterov"
    value {
      b: false
    }
  }
}
node {
  name: "Adam/update_conv2d_2/bias/ApplyAdam"
  op: "ApplyAdam"
  input: "conv2d_2/bias"
  input: "conv2d_2/bias/Adam"
  input: "conv2d_2/bias/Adam_1"
  input: "beta1_power/read"
  input: "beta2_power/read"
  input: "Adam/learning_rate"
  input: "Adam/beta1"
  input: "Adam/beta2"
  input: "Adam/epsilon"
  input: "gradients/conv2d_2/BiasAdd_grad/tuple/control_dependency_1"
  attr {
    key: "T"
    value {
      type: DT_FLOAT
    }
  }
  attr {
    key: "_class"
    value {
      list {
        s: "loc:@conv2d_2/bias"
      }
    }
  }
  attr {
    key: "use_locking"
    value {
      b: false
    }
  }
  attr {
    key: "use_nesterov"
    value {
      b: false
    }
  }
}
node {
  name: "Adam/update_dense_1/kernel/ApplyAdam"
  op: "ApplyAdam"
  input: "dense_1/kernel"
  input: "dense_1/kernel/Adam"
  input: "dense_1/kernel/Adam_1"
  input: "beta1_power/read"
  input: "beta2_power/read"
  input: "Adam/learning_rate"
  input: "Adam/beta1"
  input: "Adam/beta2"
  input: "Adam/epsilon"
  input: "gradients/dense_1/MatMul_grad/tuple/control_dependency_1"
  attr {
    key: "T"
    value {
      type: DT_FLOAT
    }
  }
  attr {
    key: "_class"
    value {
      list {
        s: "loc:@dense_1/kernel"
      }
    }
  }
  attr {
    key: "use_locking"
    value {
      b: false
    }
  }
  attr {
    key: "use_nesterov"
    value {
      b: false
    }
  }
}
node {
  name: "Adam/update_dense_1/bias/ApplyAdam"
  op: "ApplyAdam"
  input: "dense_1/bias"
  input: "dense_1/bias/Adam"
  input: "dense_1/bias/Adam_1"
  input: "beta1_power/read"
  input: "beta2_power/read"
  input: "Adam/learning_rate"
  input: "Adam/beta1"
  input: "Adam/beta2"
  input: "Adam/epsilon"
  input: "gradients/dense_1/BiasAdd_grad/tuple/control_dependency_1"
  attr {
    key: "T"
    value {
      type: DT_FLOAT
    }
  }
  attr {
    key: "_class"
    value {
      list {
        s: "loc:@dense_1/bias"
      }
    }
  }
  attr {
    key: "use_locking"
    value {
      b: false
    }
  }
  attr {
    key: "use_nesterov"
    value {
      b: false
    }
  }
}
node {
  name: "Adam/update_dense_2/kernel/ApplyAdam"
  op: "ApplyAdam"
  input: "dense_2/kernel"
  input: "dense_2/kernel/Adam"
  input: "dense_2/kernel/Adam_1"
  input: "beta1_power/read"
  input: "beta2_power/read"
  input: "Adam/learning_rate"
  input: "Adam/beta1"
  input: "Adam/beta2"
  input: "Adam/epsilon"
  input: "gradients/dense_2/MatMul_grad/tuple/control_dependency_1"
  attr {
    key: "T"
    value {
      type: DT_FLOAT
    }
  }
  attr {
    key: "_class"
    value {
      list {
        s: "loc:@dense_2/kernel"
      }
    }
  }
  attr {
    key: "use_locking"
    value {
      b: false
    }
  }
  attr {
    key: "use_nesterov"
    value {
      b: false
    }
  }
}
node {
  name: "Adam/update_dense_2/bias/ApplyAdam"
  op: "ApplyAdam"
  input: "dense_2/bias"
  input: "dense_2/bias/Adam"
  input: "dense_2/bias/Adam_1"
  input: "beta1_power/read"
  input: "beta2_power/read"
  input: "Adam/learning_rate"
  input: "Adam/beta1"
  input: "Adam/beta2"
  input: "Adam/epsilon"
  input: "gradients/dense_2/BiasAdd_grad/tuple/control_dependency_1"
  attr {
    key: "T"
    value {
      type: DT_FLOAT
    }
  }
  attr {
    key: "_class"
    value {
      list {
        s: "loc:@dense_2/bias"
      }
    }
  }
  attr {
    key: "use_locking"
    value {
      b: false
    }
  }
  attr {
    key: "use_nesterov"
    value {
      b: false
    }
  }
}
node {
  name: "Adam/mul"
  op: "Mul"
  input: "beta1_power/read"
  input: "Adam/beta1"
  input: "^Adam/update_conv2d_1/kernel/ApplyAdam"
  input: "^Adam/update_conv2d_1/bias/ApplyAdam"
  input: "^Adam/update_conv2d_2/kernel/ApplyAdam"
  input: "^Adam/update_conv2d_2/bias/ApplyAdam"
  input: "^Adam/update_dense_1/kernel/ApplyAdam"
  input: "^Adam/update_dense_1/bias/ApplyAdam"
  input: "^Adam/update_dense_2/kernel/ApplyAdam"
  input: "^Adam/update_dense_2/bias/ApplyAdam"
  attr {
    key: "T"
    value {
      type: DT_FLOAT
    }
  }
  attr {
    key: "_class"
    value {
      list {
        s: "loc:@conv2d_1/bias"
      }
    }
  }
}
node {
  name: "Adam/Assign"
  op: "Assign"
  input: "beta1_power"
  input: "Adam/mul"
  attr {
    key: "T"
    value {
      type: DT_FLOAT
    }
  }
  attr {
    key: "_class"
    value {
      list {
        s: "loc:@conv2d_1/bias"
      }
    }
  }
  attr {
    key: "use_locking"
    value {
      b: false
    }
  }
  attr {
    key: "validate_shape"
    value {
      b: true
    }
  }
}
node {
  name: "Adam/mul_1"
  op: "Mul"
  input: "beta2_power/read"
  input: "Adam/beta2"
  input: "^Adam/update_conv2d_1/kernel/ApplyAdam"
  input: "^Adam/update_conv2d_1/bias/ApplyAdam"
  input: "^Adam/update_conv2d_2/kernel/ApplyAdam"
  input: "^Adam/update_conv2d_2/bias/ApplyAdam"
  input: "^Adam/update_dense_1/kernel/ApplyAdam"
  input: "^Adam/update_dense_1/bias/ApplyAdam"
  input: "^Adam/update_dense_2/kernel/ApplyAdam"
  input: "^Adam/update_dense_2/bias/ApplyAdam"
  attr {
    key: "T"
    value {
      type: DT_FLOAT
    }
  }
  attr {
    key: "_class"
    value {
      list {
        s: "loc:@conv2d_1/bias"
      }
    }
  }
}
node {
  name: "Adam/Assign_1"
  op: "Assign"
  input: "beta2_power"
  input: "Adam/mul_1"
  attr {
    key: "T"
    value {
      type: DT_FLOAT
    }
  }
  attr {
    key: "_class"
    value {
      list {
        s: "loc:@conv2d_1/bias"
      }
    }
  }
  attr {
    key: "use_locking"
    value {
      b: false
    }
  }
  attr {
    key: "validate_shape"
    value {
      b: true
    }
  }
}
node {
  name: "Adam"
  op: "NoOp"
  input: "^Adam/update_conv2d_1/kernel/ApplyAdam"
  input: "^Adam/update_conv2d_1/bias/ApplyAdam"
  input: "^Adam/update_conv2d_2/kernel/ApplyAdam"
  input: "^Adam/update_conv2d_2/bias/ApplyAdam"
  input: "^Adam/update_dense_1/kernel/ApplyAdam"
  input: "^Adam/update_dense_1/bias/ApplyAdam"
  input: "^Adam/update_dense_2/kernel/ApplyAdam"
  input: "^Adam/update_dense_2/bias/ApplyAdam"
  input: "^Adam/Assign"
  input: "^Adam/Assign_1"
}
node {
  name: "ArgMax/dimension"
  op: "Const"
  attr {
    key: "dtype"
    value {
      type: DT_INT32
    }
  }
  attr {
    key: "value"
    value {
      tensor {
        dtype: DT_INT32
        tensor_shape {
        }
        int_val: 1
      }
    }
  }
}
node {
  name: "ArgMax"
  op: "ArgMax"
  input: "dense_2/BiasAdd"
  input: "ArgMax/dimension"
  attr {
    key: "T"
    value {
      type: DT_FLOAT
    }
  }
  attr {
    key: "Tidx"
    value {
      type: DT_INT32
    }
  }
  attr {
    key: "output_type"
    value {
      type: DT_INT64
    }
  }
}
node {
  name: "ArgMax_1/dimension"
  op: "Const"
  attr {
    key: "dtype"
    value {
      type: DT_INT32
    }
  }
  attr {
    key: "value"
    value {
      tensor {
        dtype: DT_INT32
        tensor_shape {
        }
        int_val: 1
      }
    }
  }
}
node {
  name: "ArgMax_1"
  op: "ArgMax"
  input: "Placeholder_1"
  input: "ArgMax_1/dimension"
  attr {
    key: "T"
    value {
      type: DT_FLOAT
    }
  }
  attr {
    key: "Tidx"
    value {
      type: DT_INT32
    }
  }
  attr {
    key: "output_type"
    value {
      type: DT_INT64
    }
  }
}
node {
  name: "Equal"
  op: "Equal"
  input: "ArgMax"
  input: "ArgMax_1"
  attr {
    key: "T"
    value {
      type: DT_INT64
    }
  }
}
node {
  name: "Cast"
  op: "Cast"
  input: "Equal"
  attr {
    key: "DstT"
    value {
      type: DT_FLOAT
    }
  }
  attr {
    key: "SrcT"
    value {
      type: DT_BOOL
    }
  }
}
node {
  name: "Const"
  op: "Const"
  attr {
    key: "dtype"
    value {
      type: DT_INT32
    }
  }
  attr {
    key: "value"
    value {
      tensor {
        dtype: DT_INT32
        tensor_shape {
          dim {
            size: 1
          }
        }
        int_val: 0
      }
    }
  }
}
node {
  name: "Mean"
  op: "Mean"
  input: "Cast"
  input: "Const"
  attr {
    key: "T"
    value {
      type: DT_FLOAT
    }
  }
  attr {
    key: "Tidx"
    value {
      type: DT_INT32
    }
  }
  attr {
    key: "keep_dims"
    value {
      b: false
    }
  }
}
node {
  name: "init"
  op: "NoOp"
  input: "^conv2d_1/kernel/Assign"
  input: "^conv2d_1/bias/Assign"
  input: "^conv2d_2/kernel/Assign"
  input: "^conv2d_2/bias/Assign"
  input: "^dense_1/kernel/Assign"
  input: "^dense_1/bias/Assign"
  input: "^dense_2/kernel/Assign"
  input: "^dense_2/bias/Assign"
  input: "^beta1_power/Assign"
  input: "^beta2_power/Assign"
  input: "^conv2d_1/kernel/Adam/Assign"
  input: "^conv2d_1/kernel/Adam_1/Assign"
  input: "^conv2d_1/bias/Adam/Assign"
  input: "^conv2d_1/bias/Adam_1/Assign"
  input: "^conv2d_2/kernel/Adam/Assign"
  input: "^conv2d_2/kernel/Adam_1/Assign"
  input: "^conv2d_2/bias/Adam/Assign"
  input: "^conv2d_2/bias/Adam_1/Assign"
  input: "^dense_1/kernel/Adam/Assign"
  input: "^dense_1/kernel/Adam_1/Assign"
  input: "^dense_1/bias/Adam/Assign"
  input: "^dense_1/bias/Adam_1/Assign"
  input: "^dense_2/kernel/Adam/Assign"
  input: "^dense_2/kernel/Adam_1/Assign"
  input: "^dense_2/bias/Adam/Assign"
  input: "^dense_2/bias/Adam_1/Assign"
}
node {
  name: "save/Const"
  op: "Const"
  attr {
    key: "dtype"
    value {
      type: DT_STRING
    }
  }
  attr {
    key: "value"
    value {
      tensor {
        dtype: DT_STRING
        tensor_shape {
        }
        string_val: "model"
      }
    }
  }
}
node {
  name: "save/SaveV2/tensor_names"
  op: "Const"
  attr {
    key: "dtype"
    value {
      type: DT_STRING
    }
  }
  attr {
    key: "value"
    value {
      tensor {
        dtype: DT_STRING
        tensor_shape {
          dim {
            size: 26
          }
        }
        string_val: "beta1_power"
        string_val: "beta2_power"
        string_val: "conv2d_1/bias"
        string_val: "conv2d_1/bias/Adam"
        string_val: "conv2d_1/bias/Adam_1"
        string_val: "conv2d_1/kernel"
        string_val: "conv2d_1/kernel/Adam"
        string_val: "conv2d_1/kernel/Adam_1"
        string_val: "conv2d_2/bias"
        string_val: "conv2d_2/bias/Adam"
        string_val: "conv2d_2/bias/Adam_1"
        string_val: "conv2d_2/kernel"
        string_val: "conv2d_2/kernel/Adam"
        string_val: "conv2d_2/kernel/Adam_1"
        string_val: "dense_1/bias"
        string_val: "dense_1/bias/Adam"
        string_val: "dense_1/bias/Adam_1"
        string_val: "dense_1/kernel"
        string_val: "dense_1/kernel/Adam"
        string_val: "dense_1/kernel/Adam_1"
        string_val: "dense_2/bias"
        string_val: "dense_2/bias/Adam"
        string_val: "dense_2/bias/Adam_1"
        string_val: "dense_2/kernel"
        string_val: "dense_2/kernel/Adam"
        string_val: "dense_2/kernel/Adam_1"
      }
    }
  }
}
node {
  name: "save/SaveV2/shape_and_slices"
  op: "Const"
  attr {
    key: "dtype"
    value {
      type: DT_STRING
    }
  }
  attr {
    key: "value"
    value {
      tensor {
        dtype: DT_STRING
        tensor_shape {
          dim {
            size: 26
          }
        }
        string_val: ""
        string_val: ""
        string_val: ""
        string_val: ""
        string_val: ""
        string_val: ""
        string_val: ""
        string_val: ""
        string_val: ""
        string_val: ""
        string_val: ""
        string_val: ""
        string_val: ""
        string_val: ""
        string_val: ""
        string_val: ""
        string_val: ""
        string_val: ""
        string_val: ""
        string_val: ""
        string_val: ""
        string_val: ""
        string_val: ""
        string_val: ""
        string_val: ""
        string_val: ""
      }
    }
  }
}
node {
  name: "save/SaveV2"
  op: "SaveV2"
  input: "save/Const"
  input: "save/SaveV2/tensor_names"
  input: "save/SaveV2/shape_and_slices"
  input: "beta1_power"
  input: "beta2_power"
  input: "conv2d_1/bias"
  input: "conv2d_1/bias/Adam"
  input: "conv2d_1/bias/Adam_1"
  input: "conv2d_1/kernel"
  input: "conv2d_1/kernel/Adam"
  input: "conv2d_1/kernel/Adam_1"
  input: "conv2d_2/bias"
  input: "conv2d_2/bias/Adam"
  input: "conv2d_2/bias/Adam_1"
  input: "conv2d_2/kernel"
  input: "conv2d_2/kernel/Adam"
  input: "conv2d_2/kernel/Adam_1"
  input: "dense_1/bias"
  input: "dense_1/bias/Adam"
  input: "dense_1/bias/Adam_1"
  input: "dense_1/kernel"
  input: "dense_1/kernel/Adam"
  input: "dense_1/kernel/Adam_1"
  input: "dense_2/bias"
  input: "dense_2/bias/Adam"
  input: "dense_2/bias/Adam_1"
  input: "dense_2/kernel"
  input: "dense_2/kernel/Adam"
  input: "dense_2/kernel/Adam_1"
  attr {
    key: "dtypes"
    value {
      list {
        type: DT_FLOAT
        type: DT_FLOAT
        type: DT_FLOAT
        type: DT_FLOAT
        type: DT_FLOAT
        type: DT_FLOAT
        type: DT_FLOAT
        type: DT_FLOAT
        type: DT_FLOAT
        type: DT_FLOAT
        type: DT_FLOAT
        type: DT_FLOAT
        type: DT_FLOAT
        type: DT_FLOAT
        type: DT_FLOAT
        type: DT_FLOAT
        type: DT_FLOAT
        type: DT_FLOAT
        type: DT_FLOAT
        type: DT_FLOAT
        type: DT_FLOAT
        type: DT_FLOAT
        type: DT_FLOAT
        type: DT_FLOAT
        type: DT_FLOAT
        type: DT_FLOAT
      }
    }
  }
}
node {
  name: "save/control_dependency"
  op: "Identity"
  input: "save/Const"
  input: "^save/SaveV2"
  attr {
    key: "T"
    value {
      type: DT_STRING
    }
  }
  attr {
    key: "_class"
    value {
      list {
        s: "loc:@save/Const"
      }
    }
  }
}
node {
  name: "save/RestoreV2/tensor_names"
  op: "Const"
  attr {
    key: "dtype"
    value {
      type: DT_STRING
    }
  }
  attr {
    key: "value"
    value {
      tensor {
        dtype: DT_STRING
        tensor_shape {
          dim {
            size: 1
          }
        }
        string_val: "beta1_power"
      }
    }
  }
}
node {
  name: "save/RestoreV2/shape_and_slices"
  op: "Const"
  attr {
    key: "dtype"
    value {
      type: DT_STRING
    }
  }
  attr {
    key: "value"
    value {
      tensor {
        dtype: DT_STRING
        tensor_shape {
          dim {
            size: 1
          }
        }
        string_val: ""
      }
    }
  }
}
node {
  name: "save/RestoreV2"
  op: "RestoreV2"
  input: "save/Const"
  input: "save/RestoreV2/tensor_names"
  input: "save/RestoreV2/shape_and_slices"
  attr {
    key: "dtypes"
    value {
      list {
        type: DT_FLOAT
      }
    }
  }
}
node {
  name: "save/Assign"
  op: "Assign"
  input: "beta1_power"
  input: "save/RestoreV2"
  attr {
    key: "T"
    value {
      type: DT_FLOAT
    }
  }
  attr {
    key: "_class"
    value {
      list {
        s: "loc:@conv2d_1/bias"
      }
    }
  }
  attr {
    key: "use_locking"
    value {
      b: true
    }
  }
  attr {
    key: "validate_shape"
    value {
      b: true
    }
  }
}
node {
  name: "save/RestoreV2_1/tensor_names"
  op: "Const"
  attr {
    key: "dtype"
    value {
      type: DT_STRING
    }
  }
  attr {
    key: "value"
    value {
      tensor {
        dtype: DT_STRING
        tensor_shape {
          dim {
            size: 1
          }
        }
        string_val: "beta2_power"
      }
    }
  }
}
node {
  name: "save/RestoreV2_1/shape_and_slices"
  op: "Const"
  attr {
    key: "dtype"
    value {
      type: DT_STRING
    }
  }
  attr {
    key: "value"
    value {
      tensor {
        dtype: DT_STRING
        tensor_shape {
          dim {
            size: 1
          }
        }
        string_val: ""
      }
    }
  }
}
node {
  name: "save/RestoreV2_1"
  op: "RestoreV2"
  input: "save/Const"
  input: "save/RestoreV2_1/tensor_names"
  input: "save/RestoreV2_1/shape_and_slices"
  attr {
    key: "dtypes"
    value {
      list {
        type: DT_FLOAT
      }
    }
  }
}
node {
  name: "save/Assign_1"
  op: "Assign"
  input: "beta2_power"
  input: "save/RestoreV2_1"
  attr {
    key: "T"
    value {
      type: DT_FLOAT
    }
  }
  attr {
    key: "_class"
    value {
      list {
        s: "loc:@conv2d_1/bias"
      }
    }
  }
  attr {
    key: "use_locking"
    value {
      b: true
    }
  }
  attr {
    key: "validate_shape"
    value {
      b: true
    }
  }
}
node {
  name: "save/RestoreV2_2/tensor_names"
  op: "Const"
  attr {
    key: "dtype"
    value {
      type: DT_STRING
    }
  }
  attr {
    key: "value"
    value {
      tensor {
        dtype: DT_STRING
        tensor_shape {
          dim {
            size: 1
          }
        }
        string_val: "conv2d_1/bias"
      }
    }
  }
}
node {
  name: "save/RestoreV2_2/shape_and_slices"
  op: "Const"
  attr {
    key: "dtype"
    value {
      type: DT_STRING
    }
  }
  attr {
    key: "value"
    value {
      tensor {
        dtype: DT_STRING
        tensor_shape {
          dim {
            size: 1
          }
        }
        string_val: ""
      }
    }
  }
}
node {
  name: "save/RestoreV2_2"
  op: "RestoreV2"
  input: "save/Const"
  input: "save/RestoreV2_2/tensor_names"
  input: "save/RestoreV2_2/shape_and_slices"
  attr {
    key: "dtypes"
    value {
      list {
        type: DT_FLOAT
      }
    }
  }
}
node {
  name: "save/Assign_2"
  op: "Assign"
  input: "conv2d_1/bias"
  input: "save/RestoreV2_2"
  attr {
    key: "T"
    value {
      type: DT_FLOAT
    }
  }
  attr {
    key: "_class"
    value {
      list {
        s: "loc:@conv2d_1/bias"
      }
    }
  }
  attr {
    key: "use_locking"
    value {
      b: true
    }
  }
  attr {
    key: "validate_shape"
    value {
      b: true
    }
  }
}
node {
  name: "save/RestoreV2_3/tensor_names"
  op: "Const"
  attr {
    key: "dtype"
    value {
      type: DT_STRING
    }
  }
  attr {
    key: "value"
    value {
      tensor {
        dtype: DT_STRING
        tensor_shape {
          dim {
            size: 1
          }
        }
        string_val: "conv2d_1/bias/Adam"
      }
    }
  }
}
node {
  name: "save/RestoreV2_3/shape_and_slices"
  op: "Const"
  attr {
    key: "dtype"
    value {
      type: DT_STRING
    }
  }
  attr {
    key: "value"
    value {
      tensor {
        dtype: DT_STRING
        tensor_shape {
          dim {
            size: 1
          }
        }
        string_val: ""
      }
    }
  }
}
node {
  name: "save/RestoreV2_3"
  op: "RestoreV2"
  input: "save/Const"
  input: "save/RestoreV2_3/tensor_names"
  input: "save/RestoreV2_3/shape_and_slices"
  attr {
    key: "dtypes"
    value {
      list {
        type: DT_FLOAT
      }
    }
  }
}
node {
  name: "save/Assign_3"
  op: "Assign"
  input: "conv2d_1/bias/Adam"
  input: "save/RestoreV2_3"
  attr {
    key: "T"
    value {
      type: DT_FLOAT
    }
  }
  attr {
    key: "_class"
    value {
      list {
        s: "loc:@conv2d_1/bias"
      }
    }
  }
  attr {
    key: "use_locking"
    value {
      b: true
    }
  }
  attr {
    key: "validate_shape"
    value {
      b: true
    }
  }
}
node {
  name: "save/RestoreV2_4/tensor_names"
  op: "Const"
  attr {
    key: "dtype"
    value {
      type: DT_STRING
    }
  }
  attr {
    key: "value"
    value {
      tensor {
        dtype: DT_STRING
        tensor_shape {
          dim {
            size: 1
          }
        }
        string_val: "conv2d_1/bias/Adam_1"
      }
    }
  }
}
node {
  name: "save/RestoreV2_4/shape_and_slices"
  op: "Const"
  attr {
    key: "dtype"
    value {
      type: DT_STRING
    }
  }
  attr {
    key: "value"
    value {
      tensor {
        dtype: DT_STRING
        tensor_shape {
          dim {
            size: 1
          }
        }
        string_val: ""
      }
    }
  }
}
node {
  name: "save/RestoreV2_4"
  op: "RestoreV2"
  input: "save/Const"
  input: "save/RestoreV2_4/tensor_names"
  input: "save/RestoreV2_4/shape_and_slices"
  attr {
    key: "dtypes"
    value {
      list {
        type: DT_FLOAT
      }
    }
  }
}
node {
  name: "save/Assign_4"
  op: "Assign"
  input: "conv2d_1/bias/Adam_1"
  input: "save/RestoreV2_4"
  attr {
    key: "T"
    value {
      type: DT_FLOAT
    }
  }
  attr {
    key: "_class"
    value {
      list {
        s: "loc:@conv2d_1/bias"
      }
    }
  }
  attr {
    key: "use_locking"
    value {
      b: true
    }
  }
  attr {
    key: "validate_shape"
    value {
      b: true
    }
  }
}
node {
  name: "save/RestoreV2_5/tensor_names"
  op: "Const"
  attr {
    key: "dtype"
    value {
      type: DT_STRING
    }
  }
  attr {
    key: "value"
    value {
      tensor {
        dtype: DT_STRING
        tensor_shape {
          dim {
            size: 1
          }
        }
        string_val: "conv2d_1/kernel"
      }
    }
  }
}
node {
  name: "save/RestoreV2_5/shape_and_slices"
  op: "Const"
  attr {
    key: "dtype"
    value {
      type: DT_STRING
    }
  }
  attr {
    key: "value"
    value {
      tensor {
        dtype: DT_STRING
        tensor_shape {
          dim {
            size: 1
          }
        }
        string_val: ""
      }
    }
  }
}
node {
  name: "save/RestoreV2_5"
  op: "RestoreV2"
  input: "save/Const"
  input: "save/RestoreV2_5/tensor_names"
  input: "save/RestoreV2_5/shape_and_slices"
  attr {
    key: "dtypes"
    value {
      list {
        type: DT_FLOAT
      }
    }
  }
}
node {
  name: "save/Assign_5"
  op: "Assign"
  input: "conv2d_1/kernel"
  input: "save/RestoreV2_5"
  attr {
    key: "T"
    value {
      type: DT_FLOAT
    }
  }
  attr {
    key: "_class"
    value {
      list {
        s: "loc:@conv2d_1/kernel"
      }
    }
  }
  attr {
    key: "use_locking"
    value {
      b: true
    }
  }
  attr {
    key: "validate_shape"
    value {
      b: true
    }
  }
}
node {
  name: "save/RestoreV2_6/tensor_names"
  op: "Const"
  attr {
    key: "dtype"
    value {
      type: DT_STRING
    }
  }
  attr {
    key: "value"
    value {
      tensor {
        dtype: DT_STRING
        tensor_shape {
          dim {
            size: 1
          }
        }
        string_val: "conv2d_1/kernel/Adam"
      }
    }
  }
}
node {
  name: "save/RestoreV2_6/shape_and_slices"
  op: "Const"
  attr {
    key: "dtype"
    value {
      type: DT_STRING
    }
  }
  attr {
    key: "value"
    value {
      tensor {
        dtype: DT_STRING
        tensor_shape {
          dim {
            size: 1
          }
        }
        string_val: ""
      }
    }
  }
}
node {
  name: "save/RestoreV2_6"
  op: "RestoreV2"
  input: "save/Const"
  input: "save/RestoreV2_6/tensor_names"
  input: "save/RestoreV2_6/shape_and_slices"
  attr {
    key: "dtypes"
    value {
      list {
        type: DT_FLOAT
      }
    }
  }
}
node {
  name: "save/Assign_6"
  op: "Assign"
  input: "conv2d_1/kernel/Adam"
  input: "save/RestoreV2_6"
  attr {
    key: "T"
    value {
      type: DT_FLOAT
    }
  }
  attr {
    key: "_class"
    value {
      list {
        s: "loc:@conv2d_1/kernel"
      }
    }
  }
  attr {
    key: "use_locking"
    value {
      b: true
    }
  }
  attr {
    key: "validate_shape"
    value {
      b: true
    }
  }
}
node {
  name: "save/RestoreV2_7/tensor_names"
  op: "Const"
  attr {
    key: "dtype"
    value {
      type: DT_STRING
    }
  }
  attr {
    key: "value"
    value {
      tensor {
        dtype: DT_STRING
        tensor_shape {
          dim {
            size: 1
          }
        }
        string_val: "conv2d_1/kernel/Adam_1"
      }
    }
  }
}
node {
  name: "save/RestoreV2_7/shape_and_slices"
  op: "Const"
  attr {
    key: "dtype"
    value {
      type: DT_STRING
    }
  }
  attr {
    key: "value"
    value {
      tensor {
        dtype: DT_STRING
        tensor_shape {
          dim {
            size: 1
          }
        }
        string_val: ""
      }
    }
  }
}
node {
  name: "save/RestoreV2_7"
  op: "RestoreV2"
  input: "save/Const"
  input: "save/RestoreV2_7/tensor_names"
  input: "save/RestoreV2_7/shape_and_slices"
  attr {
    key: "dtypes"
    value {
      list {
        type: DT_FLOAT
      }
    }
  }
}
node {
  name: "save/Assign_7"
  op: "Assign"
  input: "conv2d_1/kernel/Adam_1"
  input: "save/RestoreV2_7"
  attr {
    key: "T"
    value {
      type: DT_FLOAT
    }
  }
  attr {
    key: "_class"
    value {
      list {
        s: "loc:@conv2d_1/kernel"
      }
    }
  }
  attr {
    key: "use_locking"
    value {
      b: true
    }
  }
  attr {
    key: "validate_shape"
    value {
      b: true
    }
  }
}
node {
  name: "save/RestoreV2_8/tensor_names"
  op: "Const"
  attr {
    key: "dtype"
    value {
      type: DT_STRING
    }
  }
  attr {
    key: "value"
    value {
      tensor {
        dtype: DT_STRING
        tensor_shape {
          dim {
            size: 1
          }
        }
        string_val: "conv2d_2/bias"
      }
    }
  }
}
node {
  name: "save/RestoreV2_8/shape_and_slices"
  op: "Const"
  attr {
    key: "dtype"
    value {
      type: DT_STRING
    }
  }
  attr {
    key: "value"
    value {
      tensor {
        dtype: DT_STRING
        tensor_shape {
          dim {
            size: 1
          }
        }
        string_val: ""
      }
    }
  }
}
node {
  name: "save/RestoreV2_8"
  op: "RestoreV2"
  input: "save/Const"
  input: "save/RestoreV2_8/tensor_names"
  input: "save/RestoreV2_8/shape_and_slices"
  attr {
    key: "dtypes"
    value {
      list {
        type: DT_FLOAT
      }
    }
  }
}
node {
  name: "save/Assign_8"
  op: "Assign"
  input: "conv2d_2/bias"
  input: "save/RestoreV2_8"
  attr {
    key: "T"
    value {
      type: DT_FLOAT
    }
  }
  attr {
    key: "_class"
    value {
      list {
        s: "loc:@conv2d_2/bias"
      }
    }
  }
  attr {
    key: "use_locking"
    value {
      b: true
    }
  }
  attr {
    key: "validate_shape"
    value {
      b: true
    }
  }
}
node {
  name: "save/RestoreV2_9/tensor_names"
  op: "Const"
  attr {
    key: "dtype"
    value {
      type: DT_STRING
    }
  }
  attr {
    key: "value"
    value {
      tensor {
        dtype: DT_STRING
        tensor_shape {
          dim {
            size: 1
          }
        }
        string_val: "conv2d_2/bias/Adam"
      }
    }
  }
}
node {
  name: "save/RestoreV2_9/shape_and_slices"
  op: "Const"
  attr {
    key: "dtype"
    value {
      type: DT_STRING
    }
  }
  attr {
    key: "value"
    value {
      tensor {
        dtype: DT_STRING
        tensor_shape {
          dim {
            size: 1
          }
        }
        string_val: ""
      }
    }
  }
}
node {
  name: "save/RestoreV2_9"
  op: "RestoreV2"
  input: "save/Const"
  input: "save/RestoreV2_9/tensor_names"
  input: "save/RestoreV2_9/shape_and_slices"
  attr {
    key: "dtypes"
    value {
      list {
        type: DT_FLOAT
      }
    }
  }
}
node {
  name: "save/Assign_9"
  op: "Assign"
  input: "conv2d_2/bias/Adam"
  input: "save/RestoreV2_9"
  attr {
    key: "T"
    value {
      type: DT_FLOAT
    }
  }
  attr {
    key: "_class"
    value {
      list {
        s: "loc:@conv2d_2/bias"
      }
    }
  }
  attr {
    key: "use_locking"
    value {
      b: true
    }
  }
  attr {
    key: "validate_shape"
    value {
      b: true
    }
  }
}
node {
  name: "save/RestoreV2_10/tensor_names"
  op: "Const"
  attr {
    key: "dtype"
    value {
      type: DT_STRING
    }
  }
  attr {
    key: "value"
    value {
      tensor {
        dtype: DT_STRING
        tensor_shape {
          dim {
            size: 1
          }
        }
        string_val: "conv2d_2/bias/Adam_1"
      }
    }
  }
}
node {
  name: "save/RestoreV2_10/shape_and_slices"
  op: "Const"
  attr {
    key: "dtype"
    value {
      type: DT_STRING
    }
  }
  attr {
    key: "value"
    value {
      tensor {
        dtype: DT_STRING
        tensor_shape {
          dim {
            size: 1
          }
        }
        string_val: ""
      }
    }
  }
}
node {
  name: "save/RestoreV2_10"
  op: "RestoreV2"
  input: "save/Const"
  input: "save/RestoreV2_10/tensor_names"
  input: "save/RestoreV2_10/shape_and_slices"
  attr {
    key: "dtypes"
    value {
      list {
        type: DT_FLOAT
      }
    }
  }
}
node {
  name: "save/Assign_10"
  op: "Assign"
  input: "conv2d_2/bias/Adam_1"
  input: "save/RestoreV2_10"
  attr {
    key: "T"
    value {
      type: DT_FLOAT
    }
  }
  attr {
    key: "_class"
    value {
      list {
        s: "loc:@conv2d_2/bias"
      }
    }
  }
  attr {
    key: "use_locking"
    value {
      b: true
    }
  }
  attr {
    key: "validate_shape"
    value {
      b: true
    }
  }
}
node {
  name: "save/RestoreV2_11/tensor_names"
  op: "Const"
  attr {
    key: "dtype"
    value {
      type: DT_STRING
    }
  }
  attr {
    key: "value"
    value {
      tensor {
        dtype: DT_STRING
        tensor_shape {
          dim {
            size: 1
          }
        }
        string_val: "conv2d_2/kernel"
      }
    }
  }
}
node {
  name: "save/RestoreV2_11/shape_and_slices"
  op: "Const"
  attr {
    key: "dtype"
    value {
      type: DT_STRING
    }
  }
  attr {
    key: "value"
    value {
      tensor {
        dtype: DT_STRING
        tensor_shape {
          dim {
            size: 1
          }
        }
        string_val: ""
      }
    }
  }
}
node {
  name: "save/RestoreV2_11"
  op: "RestoreV2"
  input: "save/Const"
  input: "save/RestoreV2_11/tensor_names"
  input: "save/RestoreV2_11/shape_and_slices"
  attr {
    key: "dtypes"
    value {
      list {
        type: DT_FLOAT
      }
    }
  }
}
node {
  name: "save/Assign_11"
  op: "Assign"
  input: "conv2d_2/kernel"
  input: "save/RestoreV2_11"
  attr {
    key: "T"
    value {
      type: DT_FLOAT
    }
  }
  attr {
    key: "_class"
    value {
      list {
        s: "loc:@conv2d_2/kernel"
      }
    }
  }
  attr {
    key: "use_locking"
    value {
      b: true
    }
  }
  attr {
    key: "validate_shape"
    value {
      b: true
    }
  }
}
node {
  name: "save/RestoreV2_12/tensor_names"
  op: "Const"
  attr {
    key: "dtype"
    value {
      type: DT_STRING
    }
  }
  attr {
    key: "value"
    value {
      tensor {
        dtype: DT_STRING
        tensor_shape {
          dim {
            size: 1
          }
        }
        string_val: "conv2d_2/kernel/Adam"
      }
    }
  }
}
node {
  name: "save/RestoreV2_12/shape_and_slices"
  op: "Const"
  attr {
    key: "dtype"
    value {
      type: DT_STRING
    }
  }
  attr {
    key: "value"
    value {
      tensor {
        dtype: DT_STRING
        tensor_shape {
          dim {
            size: 1
          }
        }
        string_val: ""
      }
    }
  }
}
node {
  name: "save/RestoreV2_12"
  op: "RestoreV2"
  input: "save/Const"
  input: "save/RestoreV2_12/tensor_names"
  input: "save/RestoreV2_12/shape_and_slices"
  attr {
    key: "dtypes"
    value {
      list {
        type: DT_FLOAT
      }
    }
  }
}
node {
  name: "save/Assign_12"
  op: "Assign"
  input: "conv2d_2/kernel/Adam"
  input: "save/RestoreV2_12"
  attr {
    key: "T"
    value {
      type: DT_FLOAT
    }
  }
  attr {
    key: "_class"
    value {
      list {
        s: "loc:@conv2d_2/kernel"
      }
    }
  }
  attr {
    key: "use_locking"
    value {
      b: true
    }
  }
  attr {
    key: "validate_shape"
    value {
      b: true
    }
  }
}
node {
  name: "save/RestoreV2_13/tensor_names"
  op: "Const"
  attr {
    key: "dtype"
    value {
      type: DT_STRING
    }
  }
  attr {
    key: "value"
    value {
      tensor {
        dtype: DT_STRING
        tensor_shape {
          dim {
            size: 1
          }
        }
        string_val: "conv2d_2/kernel/Adam_1"
      }
    }
  }
}
node {
  name: "save/RestoreV2_13/shape_and_slices"
  op: "Const"
  attr {
    key: "dtype"
    value {
      type: DT_STRING
    }
  }
  attr {
    key: "value"
    value {
      tensor {
        dtype: DT_STRING
        tensor_shape {
          dim {
            size: 1
          }
        }
        string_val: ""
      }
    }
  }
}
node {
  name: "save/RestoreV2_13"
  op: "RestoreV2"
  input: "save/Const"
  input: "save/RestoreV2_13/tensor_names"
  input: "save/RestoreV2_13/shape_and_slices"
  attr {
    key: "dtypes"
    value {
      list {
        type: DT_FLOAT
      }
    }
  }
}
node {
  name: "save/Assign_13"
  op: "Assign"
  input: "conv2d_2/kernel/Adam_1"
  input: "save/RestoreV2_13"
  attr {
    key: "T"
    value {
      type: DT_FLOAT
    }
  }
  attr {
    key: "_class"
    value {
      list {
        s: "loc:@conv2d_2/kernel"
      }
    }
  }
  attr {
    key: "use_locking"
    value {
      b: true
    }
  }
  attr {
    key: "validate_shape"
    value {
      b: true
    }
  }
}
node {
  name: "save/RestoreV2_14/tensor_names"
  op: "Const"
  attr {
    key: "dtype"
    value {
      type: DT_STRING
    }
  }
  attr {
    key: "value"
    value {
      tensor {
        dtype: DT_STRING
        tensor_shape {
          dim {
            size: 1
          }
        }
        string_val: "dense_1/bias"
      }
    }
  }
}
node {
  name: "save/RestoreV2_14/shape_and_slices"
  op: "Const"
  attr {
    key: "dtype"
    value {
      type: DT_STRING
    }
  }
  attr {
    key: "value"
    value {
      tensor {
        dtype: DT_STRING
        tensor_shape {
          dim {
            size: 1
          }
        }
        string_val: ""
      }
    }
  }
}
node {
  name: "save/RestoreV2_14"
  op: "RestoreV2"
  input: "save/Const"
  input: "save/RestoreV2_14/tensor_names"
  input: "save/RestoreV2_14/shape_and_slices"
  attr {
    key: "dtypes"
    value {
      list {
        type: DT_FLOAT
      }
    }
  }
}
node {
  name: "save/Assign_14"
  op: "Assign"
  input: "dense_1/bias"
  input: "save/RestoreV2_14"
  attr {
    key: "T"
    value {
      type: DT_FLOAT
    }
  }
  attr {
    key: "_class"
    value {
      list {
        s: "loc:@dense_1/bias"
      }
    }
  }
  attr {
    key: "use_locking"
    value {
      b: true
    }
  }
  attr {
    key: "validate_shape"
    value {
      b: true
    }
  }
}
node {
  name: "save/RestoreV2_15/tensor_names"
  op: "Const"
  attr {
    key: "dtype"
    value {
      type: DT_STRING
    }
  }
  attr {
    key: "value"
    value {
      tensor {
        dtype: DT_STRING
        tensor_shape {
          dim {
            size: 1
          }
        }
        string_val: "dense_1/bias/Adam"
      }
    }
  }
}
node {
  name: "save/RestoreV2_15/shape_and_slices"
  op: "Const"
  attr {
    key: "dtype"
    value {
      type: DT_STRING
    }
  }
  attr {
    key: "value"
    value {
      tensor {
        dtype: DT_STRING
        tensor_shape {
          dim {
            size: 1
          }
        }
        string_val: ""
      }
    }
  }
}
node {
  name: "save/RestoreV2_15"
  op: "RestoreV2"
  input: "save/Const"
  input: "save/RestoreV2_15/tensor_names"
  input: "save/RestoreV2_15/shape_and_slices"
  attr {
    key: "dtypes"
    value {
      list {
        type: DT_FLOAT
      }
    }
  }
}
node {
  name: "save/Assign_15"
  op: "Assign"
  input: "dense_1/bias/Adam"
  input: "save/RestoreV2_15"
  attr {
    key: "T"
    value {
      type: DT_FLOAT
    }
  }
  attr {
    key: "_class"
    value {
      list {
        s: "loc:@dense_1/bias"
      }
    }
  }
  attr {
    key: "use_locking"
    value {
      b: true
    }
  }
  attr {
    key: "validate_shape"
    value {
      b: true
    }
  }
}
node {
  name: "save/RestoreV2_16/tensor_names"
  op: "Const"
  attr {
    key: "dtype"
    value {
      type: DT_STRING
    }
  }
  attr {
    key: "value"
    value {
      tensor {
        dtype: DT_STRING
        tensor_shape {
          dim {
            size: 1
          }
        }
        string_val: "dense_1/bias/Adam_1"
      }
    }
  }
}
node {
  name: "save/RestoreV2_16/shape_and_slices"
  op: "Const"
  attr {
    key: "dtype"
    value {
      type: DT_STRING
    }
  }
  attr {
    key: "value"
    value {
      tensor {
        dtype: DT_STRING
        tensor_shape {
          dim {
            size: 1
          }
        }
        string_val: ""
      }
    }
  }
}
node {
  name: "save/RestoreV2_16"
  op: "RestoreV2"
  input: "save/Const"
  input: "save/RestoreV2_16/tensor_names"
  input: "save/RestoreV2_16/shape_and_slices"
  attr {
    key: "dtypes"
    value {
      list {
        type: DT_FLOAT
      }
    }
  }
}
node {
  name: "save/Assign_16"
  op: "Assign"
  input: "dense_1/bias/Adam_1"
  input: "save/RestoreV2_16"
  attr {
    key: "T"
    value {
      type: DT_FLOAT
    }
  }
  attr {
    key: "_class"
    value {
      list {
        s: "loc:@dense_1/bias"
      }
    }
  }
  attr {
    key: "use_locking"
    value {
      b: true
    }
  }
  attr {
    key: "validate_shape"
    value {
      b: true
    }
  }
}
node {
  name: "save/RestoreV2_17/tensor_names"
  op: "Const"
  attr {
    key: "dtype"
    value {
      type: DT_STRING
    }
  }
  attr {
    key: "value"
    value {
      tensor {
        dtype: DT_STRING
        tensor_shape {
          dim {
            size: 1
          }
        }
        string_val: "dense_1/kernel"
      }
    }
  }
}
node {
  name: "save/RestoreV2_17/shape_and_slices"
  op: "Const"
  attr {
    key: "dtype"
    value {
      type: DT_STRING
    }
  }
  attr {
    key: "value"
    value {
      tensor {
        dtype: DT_STRING
        tensor_shape {
          dim {
            size: 1
          }
        }
        string_val: ""
      }
    }
  }
}
node {
  name: "save/RestoreV2_17"
  op: "RestoreV2"
  input: "save/Const"
  input: "save/RestoreV2_17/tensor_names"
  input: "save/RestoreV2_17/shape_and_slices"
  attr {
    key: "dtypes"
    value {
      list {
        type: DT_FLOAT
      }
    }
  }
}
node {
  name: "save/Assign_17"
  op: "Assign"
  input: "dense_1/kernel"
  input: "save/RestoreV2_17"
  attr {
    key: "T"
    value {
      type: DT_FLOAT
    }
  }
  attr {
    key: "_class"
    value {
      list {
        s: "loc:@dense_1/kernel"
      }
    }
  }
  attr {
    key: "use_locking"
    value {
      b: true
    }
  }
  attr {
    key: "validate_shape"
    value {
      b: true
    }
  }
}
node {
  name: "save/RestoreV2_18/tensor_names"
  op: "Const"
  attr {
    key: "dtype"
    value {
      type: DT_STRING
    }
  }
  attr {
    key: "value"
    value {
      tensor {
        dtype: DT_STRING
        tensor_shape {
          dim {
            size: 1
          }
        }
        string_val: "dense_1/kernel/Adam"
      }
    }
  }
}
node {
  name: "save/RestoreV2_18/shape_and_slices"
  op: "Const"
  attr {
    key: "dtype"
    value {
      type: DT_STRING
    }
  }
  attr {
    key: "value"
    value {
      tensor {
        dtype: DT_STRING
        tensor_shape {
          dim {
            size: 1
          }
        }
        string_val: ""
      }
    }
  }
}
node {
  name: "save/RestoreV2_18"
  op: "RestoreV2"
  input: "save/Const"
  input: "save/RestoreV2_18/tensor_names"
  input: "save/RestoreV2_18/shape_and_slices"
  attr {
    key: "dtypes"
    value {
      list {
        type: DT_FLOAT
      }
    }
  }
}
node {
  name: "save/Assign_18"
  op: "Assign"
  input: "dense_1/kernel/Adam"
  input: "save/RestoreV2_18"
  attr {
    key: "T"
    value {
      type: DT_FLOAT
    }
  }
  attr {
    key: "_class"
    value {
      list {
        s: "loc:@dense_1/kernel"
      }
    }
  }
  attr {
    key: "use_locking"
    value {
      b: true
    }
  }
  attr {
    key: "validate_shape"
    value {
      b: true
    }
  }
}
node {
  name: "save/RestoreV2_19/tensor_names"
  op: "Const"
  attr {
    key: "dtype"
    value {
      type: DT_STRING
    }
  }
  attr {
    key: "value"
    value {
      tensor {
        dtype: DT_STRING
        tensor_shape {
          dim {
            size: 1
          }
        }
        string_val: "dense_1/kernel/Adam_1"
      }
    }
  }
}
node {
  name: "save/RestoreV2_19/shape_and_slices"
  op: "Const"
  attr {
    key: "dtype"
    value {
      type: DT_STRING
    }
  }
  attr {
    key: "value"
    value {
      tensor {
        dtype: DT_STRING
        tensor_shape {
          dim {
            size: 1
          }
        }
        string_val: ""
      }
    }
  }
}
node {
  name: "save/RestoreV2_19"
  op: "RestoreV2"
  input: "save/Const"
  input: "save/RestoreV2_19/tensor_names"
  input: "save/RestoreV2_19/shape_and_slices"
  attr {
    key: "dtypes"
    value {
      list {
        type: DT_FLOAT
      }
    }
  }
}
node {
  name: "save/Assign_19"
  op: "Assign"
  input: "dense_1/kernel/Adam_1"
  input: "save/RestoreV2_19"
  attr {
    key: "T"
    value {
      type: DT_FLOAT
    }
  }
  attr {
    key: "_class"
    value {
      list {
        s: "loc:@dense_1/kernel"
      }
    }
  }
  attr {
    key: "use_locking"
    value {
      b: true
    }
  }
  attr {
    key: "validate_shape"
    value {
      b: true
    }
  }
}
node {
  name: "save/RestoreV2_20/tensor_names"
  op: "Const"
  attr {
    key: "dtype"
    value {
      type: DT_STRING
    }
  }
  attr {
    key: "value"
    value {
      tensor {
        dtype: DT_STRING
        tensor_shape {
          dim {
            size: 1
          }
        }
        string_val: "dense_2/bias"
      }
    }
  }
}
node {
  name: "save/RestoreV2_20/shape_and_slices"
  op: "Const"
  attr {
    key: "dtype"
    value {
      type: DT_STRING
    }
  }
  attr {
    key: "value"
    value {
      tensor {
        dtype: DT_STRING
        tensor_shape {
          dim {
            size: 1
          }
        }
        string_val: ""
      }
    }
  }
}
node {
  name: "save/RestoreV2_20"
  op: "RestoreV2"
  input: "save/Const"
  input: "save/RestoreV2_20/tensor_names"
  input: "save/RestoreV2_20/shape_and_slices"
  attr {
    key: "dtypes"
    value {
      list {
        type: DT_FLOAT
      }
    }
  }
}
node {
  name: "save/Assign_20"
  op: "Assign"
  input: "dense_2/bias"
  input: "save/RestoreV2_20"
  attr {
    key: "T"
    value {
      type: DT_FLOAT
    }
  }
  attr {
    key: "_class"
    value {
      list {
        s: "loc:@dense_2/bias"
      }
    }
  }
  attr {
    key: "use_locking"
    value {
      b: true
    }
  }
  attr {
    key: "validate_shape"
    value {
      b: true
    }
  }
}
node {
  name: "save/RestoreV2_21/tensor_names"
  op: "Const"
  attr {
    key: "dtype"
    value {
      type: DT_STRING
    }
  }
  attr {
    key: "value"
    value {
      tensor {
        dtype: DT_STRING
        tensor_shape {
          dim {
            size: 1
          }
        }
        string_val: "dense_2/bias/Adam"
      }
    }
  }
}
node {
  name: "save/RestoreV2_21/shape_and_slices"
  op: "Const"
  attr {
    key: "dtype"
    value {
      type: DT_STRING
    }
  }
  attr {
    key: "value"
    value {
      tensor {
        dtype: DT_STRING
        tensor_shape {
          dim {
            size: 1
          }
        }
        string_val: ""
      }
    }
  }
}
node {
  name: "save/RestoreV2_21"
  op: "RestoreV2"
  input: "save/Const"
  input: "save/RestoreV2_21/tensor_names"
  input: "save/RestoreV2_21/shape_and_slices"
  attr {
    key: "dtypes"
    value {
      list {
        type: DT_FLOAT
      }
    }
  }
}
node {
  name: "save/Assign_21"
  op: "Assign"
  input: "dense_2/bias/Adam"
  input: "save/RestoreV2_21"
  attr {
    key: "T"
    value {
      type: DT_FLOAT
    }
  }
  attr {
    key: "_class"
    value {
      list {
        s: "loc:@dense_2/bias"
      }
    }
  }
  attr {
    key: "use_locking"
    value {
      b: true
    }
  }
  attr {
    key: "validate_shape"
    value {
      b: true
    }
  }
}
node {
  name: "save/RestoreV2_22/tensor_names"
  op: "Const"
  attr {
    key: "dtype"
    value {
      type: DT_STRING
    }
  }
  attr {
    key: "value"
    value {
      tensor {
        dtype: DT_STRING
        tensor_shape {
          dim {
            size: 1
          }
        }
        string_val: "dense_2/bias/Adam_1"
      }
    }
  }
}
node {
  name: "save/RestoreV2_22/shape_and_slices"
  op: "Const"
  attr {
    key: "dtype"
    value {
      type: DT_STRING
    }
  }
  attr {
    key: "value"
    value {
      tensor {
        dtype: DT_STRING
        tensor_shape {
          dim {
            size: 1
          }
        }
        string_val: ""
      }
    }
  }
}
node {
  name: "save/RestoreV2_22"
  op: "RestoreV2"
  input: "save/Const"
  input: "save/RestoreV2_22/tensor_names"
  input: "save/RestoreV2_22/shape_and_slices"
  attr {
    key: "dtypes"
    value {
      list {
        type: DT_FLOAT
      }
    }
  }
}
node {
  name: "save/Assign_22"
  op: "Assign"
  input: "dense_2/bias/Adam_1"
  input: "save/RestoreV2_22"
  attr {
    key: "T"
    value {
      type: DT_FLOAT
    }
  }
  attr {
    key: "_class"
    value {
      list {
        s: "loc:@dense_2/bias"
      }
    }
  }
  attr {
    key: "use_locking"
    value {
      b: true
    }
  }
  attr {
    key: "validate_shape"
    value {
      b: true
    }
  }
}
node {
  name: "save/RestoreV2_23/tensor_names"
  op: "Const"
  attr {
    key: "dtype"
    value {
      type: DT_STRING
    }
  }
  attr {
    key: "value"
    value {
      tensor {
        dtype: DT_STRING
        tensor_shape {
          dim {
            size: 1
          }
        }
        string_val: "dense_2/kernel"
      }
    }
  }
}
node {
  name: "save/RestoreV2_23/shape_and_slices"
  op: "Const"
  attr {
    key: "dtype"
    value {
      type: DT_STRING
    }
  }
  attr {
    key: "value"
    value {
      tensor {
        dtype: DT_STRING
        tensor_shape {
          dim {
            size: 1
          }
        }
        string_val: ""
      }
    }
  }
}
node {
  name: "save/RestoreV2_23"
  op: "RestoreV2"
  input: "save/Const"
  input: "save/RestoreV2_23/tensor_names"
  input: "save/RestoreV2_23/shape_and_slices"
  attr {
    key: "dtypes"
    value {
      list {
        type: DT_FLOAT
      }
    }
  }
}
node {
  name: "save/Assign_23"
  op: "Assign"
  input: "dense_2/kernel"
  input: "save/RestoreV2_23"
  attr {
    key: "T"
    value {
      type: DT_FLOAT
    }
  }
  attr {
    key: "_class"
    value {
      list {
        s: "loc:@dense_2/kernel"
      }
    }
  }
  attr {
    key: "use_locking"
    value {
      b: true
    }
  }
  attr {
    key: "validate_shape"
    value {
      b: true
    }
  }
}
node {
  name: "save/RestoreV2_24/tensor_names"
  op: "Const"
  attr {
    key: "dtype"
    value {
      type: DT_STRING
    }
  }
  attr {
    key: "value"
    value {
      tensor {
        dtype: DT_STRING
        tensor_shape {
          dim {
            size: 1
          }
        }
        string_val: "dense_2/kernel/Adam"
      }
    }
  }
}
node {
  name: "save/RestoreV2_24/shape_and_slices"
  op: "Const"
  attr {
    key: "dtype"
    value {
      type: DT_STRING
    }
  }
  attr {
    key: "value"
    value {
      tensor {
        dtype: DT_STRING
        tensor_shape {
          dim {
            size: 1
          }
        }
        string_val: ""
      }
    }
  }
}
node {
  name: "save/RestoreV2_24"
  op: "RestoreV2"
  input: "save/Const"
  input: "save/RestoreV2_24/tensor_names"
  input: "save/RestoreV2_24/shape_and_slices"
  attr {
    key: "dtypes"
    value {
      list {
        type: DT_FLOAT
      }
    }
  }
}
node {
  name: "save/Assign_24"
  op: "Assign"
  input: "dense_2/kernel/Adam"
  input: "save/RestoreV2_24"
  attr {
    key: "T"
    value {
      type: DT_FLOAT
    }
  }
  attr {
    key: "_class"
    value {
      list {
        s: "loc:@dense_2/kernel"
      }
    }
  }
  attr {
    key: "use_locking"
    value {
      b: true
    }
  }
  attr {
    key: "validate_shape"
    value {
      b: true
    }
  }
}
node {
  name: "save/RestoreV2_25/tensor_names"
  op: "Const"
  attr {
    key: "dtype"
    value {
      type: DT_STRING
    }
  }
  attr {
    key: "value"
    value {
      tensor {
        dtype: DT_STRING
        tensor_shape {
          dim {
            size: 1
          }
        }
        string_val: "dense_2/kernel/Adam_1"
      }
    }
  }
}
node {
  name: "save/RestoreV2_25/shape_and_slices"
  op: "Const"
  attr {
    key: "dtype"
    value {
      type: DT_STRING
    }
  }
  attr {
    key: "value"
    value {
      tensor {
        dtype: DT_STRING
        tensor_shape {
          dim {
            size: 1
          }
        }
        string_val: ""
      }
    }
  }
}
node {
  name: "save/RestoreV2_25"
  op: "RestoreV2"
  input: "save/Const"
  input: "save/RestoreV2_25/tensor_names"
  input: "save/RestoreV2_25/shape_and_slices"
  attr {
    key: "dtypes"
    value {
      list {
        type: DT_FLOAT
      }
    }
  }
}
node {
  name: "save/Assign_25"
  op: "Assign"
  input: "dense_2/kernel/Adam_1"
  input: "save/RestoreV2_25"
  attr {
    key: "T"
    value {
      type: DT_FLOAT
    }
  }
  attr {
    key: "_class"
    value {
      list {
        s: "loc:@dense_2/kernel"
      }
    }
  }
  attr {
    key: "use_locking"
    value {
      b: true
    }
  }
  attr {
    key: "validate_shape"
    value {
      b: true
    }
  }
}
node {
  name: "save/restore_all"
  op: "NoOp"
  input: "^save/Assign"
  input: "^save/Assign_1"
  input: "^save/Assign_2"
  input: "^save/Assign_3"
  input: "^save/Assign_4"
  input: "^save/Assign_5"
  input: "^save/Assign_6"
  input: "^save/Assign_7"
  input: "^save/Assign_8"
  input: "^save/Assign_9"
  input: "^save/Assign_10"
  input: "^save/Assign_11"
  input: "^save/Assign_12"
  input: "^save/Assign_13"
  input: "^save/Assign_14"
  input: "^save/Assign_15"
  input: "^save/Assign_16"
  input: "^save/Assign_17"
  input: "^save/Assign_18"
  input: "^save/Assign_19"
  input: "^save/Assign_20"
  input: "^save/Assign_21"
  input: "^save/Assign_22"
  input: "^save/Assign_23"
  input: "^save/Assign_24"
  input: "^save/Assign_25"
}
versions {
  producer: 24
}

In [51]:
activation_op.node_def


Out[51]:
name: "conv2d_1/Relu"
op: "Relu"
input: "conv2d_1/BiasAdd"
attr {
  key: "T"
  value {
    type: DT_FLOAT
  }
}

Kernel size

Kernel size is not defined in the protobuf, but has to be read from the weight tensor shape.


In [53]:
read_op = sess.graph.get_operation_by_name('conv2d_2/kernel/read')
read_op.outputs[0].shape.as_list()[:2]


Out[53]:
[3, 3]

Padding


In [55]:
conv_op.node_def


Out[55]:
name: "conv2d_1/convolution"
op: "Conv2D"
input: "Placeholder"
input: "conv2d_1/kernel/read"
attr {
  key: "T"
  value {
    type: DT_FLOAT
  }
}
attr {
  key: "data_format"
  value {
    s: "NHWC"
  }
}
attr {
  key: "padding"
  value {
    s: "VALID"
  }
}
attr {
  key: "strides"
  value {
    list {
      i: 1
      i: 1
      i: 1
      i: 1
    }
  }
}
attr {
  key: "use_cudnn_on_gpu"
  value {
    b: true
  }
}

In [56]:
# The padding value has to be decoded from bytes into a string.
conv_op.node_def.attr['padding'].s.decode('utf8')


Out[56]:
'VALID'

Strides


In [57]:
strides = conv_op.node_def.attr['strides']
strides.list.i[1], strides.list.i[2]


Out[57]:
(1, 1)

Pool size

Pool size is defined as ksize in the maxpool definition.


In [58]:
max_pool_op = sess.graph.get_operation_by_name('max_pooling2d_1/MaxPool')
max_pool_op.node_def


Out[58]:
name: "max_pooling2d_1/MaxPool"
op: "MaxPool"
input: "conv2d_1/Relu"
attr {
  key: "T"
  value {
    type: DT_FLOAT
  }
}
attr {
  key: "data_format"
  value {
    s: "NHWC"
  }
}
attr {
  key: "ksize"
  value {
    list {
      i: 1
      i: 2
      i: 2
      i: 1
    }
  }
}
attr {
  key: "padding"
  value {
    s: "VALID"
  }
}
attr {
  key: "strides"
  value {
    list {
      i: 1
      i: 2
      i: 2
      i: 1
    }
  }
}

In [63]:
kernel = max_pool_op.node_def.attr['ksize']
kernel.list.i[1], kernel.list.i[2]


Out[63]:
(2, 2)

In [ ]:


In [ ]:


In [ ]:


In [ ]:


In [ ]:


In [ ]:


In [ ]:


In [ ]:


In [ ]: