diff --git a/hw2/explore_autoencoder.ipynb b/hw2/explore_autoencoder.ipynb index e5f8e87772d630429d5352037516d32c38a9a5c0..a1893ea6396aef46e2c0614283bcd5100e0c5311 100644 --- a/hw2/explore_autoencoder.ipynb +++ b/hw2/explore_autoencoder.ipynb @@ -2,7 +2,7 @@ "cells": [ { "cell_type": "code", - "execution_count": 2, + "execution_count": 1, "metadata": { "collapsed": true }, @@ -11,6 +11,1116 @@ "import tensorflow as tf" ] }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# convolution model" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "WARNING: Logging before flag parsing goes to stderr.\n", + "W1016 18:50:45.990836 47545544458368 deprecation.py:323] From /util/opt/anaconda/deployed-conda-envs/packages/tensorflow/envs/tensorflow-1.14.0-py36/lib/python3.6/site-packages/tensorflow/python/training/saver.py:1276: checkpoint_exists (from tensorflow.python.training.checkpoint_management) is deprecated and will be removed in a future version.\n", + "Instructions for updating:\n", + "Use standard file APIs to check for files with this prefix.\n" + ] + } + ], + "source": [ + "session = tf.Session()\n", + "saver = tf.train.import_meta_graph('ex1_models/h4_batch128_lr0.001_reg1_fold4/homework_2-3500.meta')\n", + "saver.restore(session, 'ex1_models/h4_batch128_lr0.001_reg1_fold4/homework_2-3500')" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": { + "scrolled": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "input_placeholder\n", + "true_label\n", + "truediv/y\n", + "truediv\n", + "conv2d/kernel/Initializer/random_uniform/shape\n", + "conv2d/kernel/Initializer/random_uniform/min\n", + "conv2d/kernel/Initializer/random_uniform/max\n", + "conv2d/kernel/Initializer/random_uniform/RandomUniform\n", + "conv2d/kernel/Initializer/random_uniform/sub\n", + "conv2d/kernel/Initializer/random_uniform/mul\n", + "conv2d/kernel/Initializer/random_uniform\n", + "conv2d/kernel\n", + "conv2d/kernel/Assign\n", + "conv2d/kernel/read\n", + "conv2d/kernel/Regularizer/l2_regularizer/scale\n", + "conv2d/kernel/Regularizer/l2_regularizer/L2Loss\n", + "conv2d/kernel/Regularizer/l2_regularizer\n", + "conv2d/bias/Initializer/zeros\n", + "conv2d/bias\n", + "conv2d/bias/Assign\n", + "conv2d/bias/read\n", + "conv2d/dilation_rate\n", + "conv2d/Conv2D\n", + "conv2d/BiasAdd\n", + "conv2d_1/kernel/Initializer/random_uniform/shape\n", + "conv2d_1/kernel/Initializer/random_uniform/min\n", + "conv2d_1/kernel/Initializer/random_uniform/max\n", + "conv2d_1/kernel/Initializer/random_uniform/RandomUniform\n", + "conv2d_1/kernel/Initializer/random_uniform/sub\n", + "conv2d_1/kernel/Initializer/random_uniform/mul\n", + "conv2d_1/kernel/Initializer/random_uniform\n", + "conv2d_1/kernel\n", + "conv2d_1/kernel/Assign\n", + "conv2d_1/kernel/read\n", + "conv2d_1/kernel/Regularizer/l2_regularizer/scale\n", + "conv2d_1/kernel/Regularizer/l2_regularizer/L2Loss\n", + "conv2d_1/kernel/Regularizer/l2_regularizer\n", + "conv2d_1/bias/Initializer/zeros\n", + "conv2d_1/bias\n", + "conv2d_1/bias/Assign\n", + "conv2d_1/bias/read\n", + "conv2d_1/dilation_rate\n", + "conv2d_1/Conv2D\n", + "conv2d_1/BiasAdd\n", + "max_pooling2d/MaxPool\n", + "conv2d_2/kernel/Initializer/random_uniform/shape\n", + "conv2d_2/kernel/Initializer/random_uniform/min\n", + "conv2d_2/kernel/Initializer/random_uniform/max\n", + "conv2d_2/kernel/Initializer/random_uniform/RandomUniform\n", + "conv2d_2/kernel/Initializer/random_uniform/sub\n", + "conv2d_2/kernel/Initializer/random_uniform/mul\n", + "conv2d_2/kernel/Initializer/random_uniform\n", + "conv2d_2/kernel\n", + "conv2d_2/kernel/Assign\n", + "conv2d_2/kernel/read\n", + "conv2d_2/kernel/Regularizer/l2_regularizer/scale\n", + "conv2d_2/kernel/Regularizer/l2_regularizer/L2Loss\n", + "conv2d_2/kernel/Regularizer/l2_regularizer\n", + "conv2d_2/bias/Initializer/zeros\n", + "conv2d_2/bias\n", + "conv2d_2/bias/Assign\n", + "conv2d_2/bias/read\n", + "conv2d_2/dilation_rate\n", + "conv2d_2/Conv2D\n", + "conv2d_2/BiasAdd\n", + "conv2d_3/kernel/Initializer/random_uniform/shape\n", + "conv2d_3/kernel/Initializer/random_uniform/min\n", + "conv2d_3/kernel/Initializer/random_uniform/max\n", + "conv2d_3/kernel/Initializer/random_uniform/RandomUniform\n", + "conv2d_3/kernel/Initializer/random_uniform/sub\n", + "conv2d_3/kernel/Initializer/random_uniform/mul\n", + "conv2d_3/kernel/Initializer/random_uniform\n", + "conv2d_3/kernel\n", + "conv2d_3/kernel/Assign\n", + "conv2d_3/kernel/read\n", + "conv2d_3/kernel/Regularizer/l2_regularizer/scale\n", + "conv2d_3/kernel/Regularizer/l2_regularizer/L2Loss\n", + "conv2d_3/kernel/Regularizer/l2_regularizer\n", + "conv2d_3/bias/Initializer/zeros\n", + "conv2d_3/bias\n", + "conv2d_3/bias/Assign\n", + "conv2d_3/bias/read\n", + "conv2d_3/dilation_rate\n", + "conv2d_3/Conv2D\n", + "conv2d_3/BiasAdd\n", + "max_pooling2d_1/MaxPool\n", + "Reshape/shape\n", + "Reshape\n", + "dense1/kernel/Initializer/random_uniform/shape\n", + "dense1/kernel/Initializer/random_uniform/min\n", + "dense1/kernel/Initializer/random_uniform/max\n", + "dense1/kernel/Initializer/random_uniform/RandomUniform\n", + "dense1/kernel/Initializer/random_uniform/sub\n", + "dense1/kernel/Initializer/random_uniform/mul\n", + "dense1/kernel/Initializer/random_uniform\n", + "dense1/kernel\n", + "dense1/kernel/Assign\n", + "dense1/kernel/read\n", + "dense1/kernel/Regularizer/l2_regularizer/scale\n", + "dense1/kernel/Regularizer/l2_regularizer/L2Loss\n", + "dense1/kernel/Regularizer/l2_regularizer\n", + "dense1/bias/Initializer/zeros\n", + "dense1/bias\n", + "dense1/bias/Assign\n", + "dense1/bias/read\n", + "dense1/MatMul\n", + "dense1/BiasAdd\n", + "output_layer/kernel/Initializer/random_uniform/shape\n", + "output_layer/kernel/Initializer/random_uniform/min\n", + "output_layer/kernel/Initializer/random_uniform/max\n", + "output_layer/kernel/Initializer/random_uniform/RandomUniform\n", + "output_layer/kernel/Initializer/random_uniform/sub\n", + "output_layer/kernel/Initializer/random_uniform/mul\n", + "output_layer/kernel/Initializer/random_uniform\n", + "output_layer/kernel\n", + "output_layer/kernel/Assign\n", + "output_layer/kernel/read\n", + "output_layer/bias/Initializer/zeros\n", + "output_layer/bias\n", + "output_layer/bias/Assign\n", + "output_layer/bias/read\n", + "output_layer/MatMul\n", + "output_layer/BiasAdd\n", + "output\n", + "softmax_cross_entropy_with_logits_sg/labels_stop_gradient\n", + "softmax_cross_entropy_with_logits_sg/Rank\n", + "softmax_cross_entropy_with_logits_sg/Shape\n", + "softmax_cross_entropy_with_logits_sg/Rank_1\n", + "softmax_cross_entropy_with_logits_sg/Shape_1\n", + "softmax_cross_entropy_with_logits_sg/Sub/y\n", + "softmax_cross_entropy_with_logits_sg/Sub\n", + "softmax_cross_entropy_with_logits_sg/Slice/begin\n", + "softmax_cross_entropy_with_logits_sg/Slice/size\n", + "softmax_cross_entropy_with_logits_sg/Slice\n", + "softmax_cross_entropy_with_logits_sg/concat/values_0\n", + "softmax_cross_entropy_with_logits_sg/concat/axis\n", + "softmax_cross_entropy_with_logits_sg/concat\n", + "softmax_cross_entropy_with_logits_sg/Reshape\n", + "softmax_cross_entropy_with_logits_sg/Rank_2\n", + "softmax_cross_entropy_with_logits_sg/Shape_2\n", + "softmax_cross_entropy_with_logits_sg/Sub_1/y\n", + "softmax_cross_entropy_with_logits_sg/Sub_1\n", + "softmax_cross_entropy_with_logits_sg/Slice_1/begin\n", + "softmax_cross_entropy_with_logits_sg/Slice_1/size\n", + "softmax_cross_entropy_with_logits_sg/Slice_1\n", + "softmax_cross_entropy_with_logits_sg/concat_1/values_0\n", + "softmax_cross_entropy_with_logits_sg/concat_1/axis\n", + "softmax_cross_entropy_with_logits_sg/concat_1\n", + "softmax_cross_entropy_with_logits_sg/Reshape_1\n", + "softmax_cross_entropy_with_logits_sg\n", + "softmax_cross_entropy_with_logits_sg/Sub_2/y\n", + "softmax_cross_entropy_with_logits_sg/Sub_2\n", + "softmax_cross_entropy_with_logits_sg/Slice_2/begin\n", + "softmax_cross_entropy_with_logits_sg/Slice_2/size\n", + "softmax_cross_entropy_with_logits_sg/Slice_2\n", + "softmax_cross_entropy_with_logits_sg/Reshape_2\n", + "ArgMax/dimension\n", + "ArgMax\n", + "ArgMax_1/dimension\n", + "ArgMax_1\n", + "confusion_matrix/assert_non_negative/Const\n", + "confusion_matrix/assert_non_negative/assert_less_equal/LessEqual\n", + "confusion_matrix/assert_non_negative/assert_less_equal/Const\n", + "confusion_matrix/assert_non_negative/assert_less_equal/All\n", + "confusion_matrix/assert_non_negative/assert_less_equal/Assert/Const\n", + "confusion_matrix/assert_non_negative/assert_less_equal/Assert/Const_1\n", + "confusion_matrix/assert_non_negative/assert_less_equal/Assert/Const_2\n", + "confusion_matrix/assert_non_negative/assert_less_equal/Assert/AssertGuard/Switch\n", + "confusion_matrix/assert_non_negative/assert_less_equal/Assert/AssertGuard/switch_t\n", + "confusion_matrix/assert_non_negative/assert_less_equal/Assert/AssertGuard/switch_f\n", + "confusion_matrix/assert_non_negative/assert_less_equal/Assert/AssertGuard/pred_id\n", + "confusion_matrix/assert_non_negative/assert_less_equal/Assert/AssertGuard/NoOp\n", + "confusion_matrix/assert_non_negative/assert_less_equal/Assert/AssertGuard/control_dependency\n", + "confusion_matrix/assert_non_negative/assert_less_equal/Assert/AssertGuard/Assert/data_0\n", + "confusion_matrix/assert_non_negative/assert_less_equal/Assert/AssertGuard/Assert/data_1\n", + "confusion_matrix/assert_non_negative/assert_less_equal/Assert/AssertGuard/Assert/data_2\n", + "confusion_matrix/assert_non_negative/assert_less_equal/Assert/AssertGuard/Assert/Switch\n", + "confusion_matrix/assert_non_negative/assert_less_equal/Assert/AssertGuard/Assert/Switch_1\n", + "confusion_matrix/assert_non_negative/assert_less_equal/Assert/AssertGuard/Assert\n", + "confusion_matrix/assert_non_negative/assert_less_equal/Assert/AssertGuard/control_dependency_1\n", + "confusion_matrix/assert_non_negative/assert_less_equal/Assert/AssertGuard/Merge\n", + "confusion_matrix/control_dependency\n", + "confusion_matrix/assert_non_negative_1/Const\n", + "confusion_matrix/assert_non_negative_1/assert_less_equal/LessEqual\n", + "confusion_matrix/assert_non_negative_1/assert_less_equal/Const\n", + "confusion_matrix/assert_non_negative_1/assert_less_equal/All\n", + "confusion_matrix/assert_non_negative_1/assert_less_equal/Assert/Const\n", + "confusion_matrix/assert_non_negative_1/assert_less_equal/Assert/Const_1\n", + "confusion_matrix/assert_non_negative_1/assert_less_equal/Assert/Const_2\n", + "confusion_matrix/assert_non_negative_1/assert_less_equal/Assert/AssertGuard/Switch\n", + "confusion_matrix/assert_non_negative_1/assert_less_equal/Assert/AssertGuard/switch_t\n", + "confusion_matrix/assert_non_negative_1/assert_less_equal/Assert/AssertGuard/switch_f\n", + "confusion_matrix/assert_non_negative_1/assert_less_equal/Assert/AssertGuard/pred_id\n", + "confusion_matrix/assert_non_negative_1/assert_less_equal/Assert/AssertGuard/NoOp\n", + "confusion_matrix/assert_non_negative_1/assert_less_equal/Assert/AssertGuard/control_dependency\n", + "confusion_matrix/assert_non_negative_1/assert_less_equal/Assert/AssertGuard/Assert/data_0\n", + "confusion_matrix/assert_non_negative_1/assert_less_equal/Assert/AssertGuard/Assert/data_1\n", + "confusion_matrix/assert_non_negative_1/assert_less_equal/Assert/AssertGuard/Assert/data_2\n", + "confusion_matrix/assert_non_negative_1/assert_less_equal/Assert/AssertGuard/Assert/Switch\n", + "confusion_matrix/assert_non_negative_1/assert_less_equal/Assert/AssertGuard/Assert/Switch_1\n", + "confusion_matrix/assert_non_negative_1/assert_less_equal/Assert/AssertGuard/Assert\n", + "confusion_matrix/assert_non_negative_1/assert_less_equal/Assert/AssertGuard/control_dependency_1\n", + "confusion_matrix/assert_non_negative_1/assert_less_equal/Assert/AssertGuard/Merge\n", + "confusion_matrix/control_dependency_1\n", + "confusion_matrix/Cast/x\n", + "confusion_matrix/Cast\n", + "confusion_matrix/assert_less/Less\n", + "confusion_matrix/assert_less/Const\n", + "confusion_matrix/assert_less/All\n", + "confusion_matrix/assert_less/Assert/Const\n", + "confusion_matrix/assert_less/Assert/Const_1\n", + "confusion_matrix/assert_less/Assert/Const_2\n", + "confusion_matrix/assert_less/Assert/Const_3\n", + "confusion_matrix/assert_less/Assert/AssertGuard/Switch\n", + "confusion_matrix/assert_less/Assert/AssertGuard/switch_t\n", + "confusion_matrix/assert_less/Assert/AssertGuard/switch_f\n", + "confusion_matrix/assert_less/Assert/AssertGuard/pred_id\n", + "confusion_matrix/assert_less/Assert/AssertGuard/NoOp\n", + "confusion_matrix/assert_less/Assert/AssertGuard/control_dependency\n", + "confusion_matrix/assert_less/Assert/AssertGuard/Assert/data_0\n", + "confusion_matrix/assert_less/Assert/AssertGuard/Assert/data_1\n", + "confusion_matrix/assert_less/Assert/AssertGuard/Assert/data_2\n", + "confusion_matrix/assert_less/Assert/AssertGuard/Assert/data_4\n", + "confusion_matrix/assert_less/Assert/AssertGuard/Assert/Switch\n", + "confusion_matrix/assert_less/Assert/AssertGuard/Assert/Switch_1\n", + "confusion_matrix/assert_less/Assert/AssertGuard/Assert/Switch_2\n", + "confusion_matrix/assert_less/Assert/AssertGuard/Assert\n", + "confusion_matrix/assert_less/Assert/AssertGuard/control_dependency_1\n", + "confusion_matrix/assert_less/Assert/AssertGuard/Merge\n", + "confusion_matrix/control_dependency_2\n", + "confusion_matrix/assert_less_1/Less\n", + "confusion_matrix/assert_less_1/Const\n", + "confusion_matrix/assert_less_1/All\n", + "confusion_matrix/assert_less_1/Assert/Const\n", + "confusion_matrix/assert_less_1/Assert/Const_1\n", + "confusion_matrix/assert_less_1/Assert/Const_2\n", + "confusion_matrix/assert_less_1/Assert/Const_3\n", + "confusion_matrix/assert_less_1/Assert/AssertGuard/Switch\n", + "confusion_matrix/assert_less_1/Assert/AssertGuard/switch_t\n", + "confusion_matrix/assert_less_1/Assert/AssertGuard/switch_f\n", + "confusion_matrix/assert_less_1/Assert/AssertGuard/pred_id\n", + "confusion_matrix/assert_less_1/Assert/AssertGuard/NoOp\n", + "confusion_matrix/assert_less_1/Assert/AssertGuard/control_dependency\n", + "confusion_matrix/assert_less_1/Assert/AssertGuard/Assert/data_0\n", + "confusion_matrix/assert_less_1/Assert/AssertGuard/Assert/data_1\n", + "confusion_matrix/assert_less_1/Assert/AssertGuard/Assert/data_2\n", + "confusion_matrix/assert_less_1/Assert/AssertGuard/Assert/data_4\n", + "confusion_matrix/assert_less_1/Assert/AssertGuard/Assert/Switch\n", + "confusion_matrix/assert_less_1/Assert/AssertGuard/Assert/Switch_1\n", + "confusion_matrix/assert_less_1/Assert/AssertGuard/Assert/Switch_2\n", + "confusion_matrix/assert_less_1/Assert/AssertGuard/Assert\n", + "confusion_matrix/assert_less_1/Assert/AssertGuard/control_dependency_1\n", + "confusion_matrix/assert_less_1/Assert/AssertGuard/Merge\n", + "confusion_matrix/control_dependency_3\n", + "confusion_matrix/stack\n", + "confusion_matrix/stack_1\n", + "confusion_matrix/ones_like/Shape\n", + "confusion_matrix/ones_like/Const\n", + "confusion_matrix/ones_like\n", + "confusion_matrix/Cast_1\n", + "confusion_matrix/zeros/Const\n", + "confusion_matrix/zeros\n", + "confusion_matrix/SparseTensorDenseAdd\n", + "global_step/Initializer/zeros\n", + "global_step\n", + "global_step/Assign\n", + "global_step/read\n", + "add/x\n", + "add\n", + "add_1\n", + "add_2\n", + "add_3\n", + "add_4\n", + "mul/x\n", + "mul\n", + "add_5\n", + "Const\n", + "Mean\n", + "gradients/Shape\n", + "gradients/grad_ys_0\n", + "gradients/Fill\n", + "gradients/Mean_grad/Reshape/shape\n", + "gradients/Mean_grad/Reshape\n", + "gradients/Mean_grad/Shape\n", + "gradients/Mean_grad/Tile\n", + "gradients/Mean_grad/Shape_1\n", + "gradients/Mean_grad/Shape_2\n", + "gradients/Mean_grad/Const\n", + "gradients/Mean_grad/Prod\n", + "gradients/Mean_grad/Const_1\n", + "gradients/Mean_grad/Prod_1\n", + "gradients/Mean_grad/Maximum/y\n", + "gradients/Mean_grad/Maximum\n", + "gradients/Mean_grad/floordiv\n", + "gradients/Mean_grad/Cast\n", + "gradients/Mean_grad/truediv\n", + "gradients/add_5_grad/Shape\n", + "gradients/add_5_grad/Shape_1\n", + "gradients/add_5_grad/BroadcastGradientArgs\n", + "gradients/add_5_grad/Sum\n", + "gradients/add_5_grad/Reshape\n", + "gradients/add_5_grad/Sum_1\n", + "gradients/add_5_grad/Reshape_1\n", + "gradients/add_5_grad/tuple/group_deps\n", + "gradients/add_5_grad/tuple/control_dependency\n", + "gradients/add_5_grad/tuple/control_dependency_1\n", + "gradients/softmax_cross_entropy_with_logits_sg/Reshape_2_grad/Shape\n", + "gradients/softmax_cross_entropy_with_logits_sg/Reshape_2_grad/Reshape\n", + "gradients/mul_grad/Mul\n", + "gradients/mul_grad/Mul_1\n", + "gradients/mul_grad/tuple/group_deps\n", + "gradients/mul_grad/tuple/control_dependency\n", + "gradients/mul_grad/tuple/control_dependency_1\n", + "gradients/zeros_like\n", + "gradients/softmax_cross_entropy_with_logits_sg_grad/ExpandDims/dim\n", + "gradients/softmax_cross_entropy_with_logits_sg_grad/ExpandDims\n", + "gradients/softmax_cross_entropy_with_logits_sg_grad/mul\n", + "gradients/softmax_cross_entropy_with_logits_sg_grad/LogSoftmax\n", + "gradients/softmax_cross_entropy_with_logits_sg_grad/Neg\n", + "gradients/softmax_cross_entropy_with_logits_sg_grad/ExpandDims_1/dim\n", + "gradients/softmax_cross_entropy_with_logits_sg_grad/ExpandDims_1\n", + "gradients/softmax_cross_entropy_with_logits_sg_grad/mul_1\n", + "gradients/softmax_cross_entropy_with_logits_sg_grad/tuple/group_deps\n", + "gradients/softmax_cross_entropy_with_logits_sg_grad/tuple/control_dependency\n", + "gradients/softmax_cross_entropy_with_logits_sg_grad/tuple/control_dependency_1\n", + "gradients/add_4_grad/tuple/group_deps\n", + "gradients/add_4_grad/tuple/control_dependency\n", + "gradients/add_4_grad/tuple/control_dependency_1\n", + "gradients/softmax_cross_entropy_with_logits_sg/Reshape_grad/Shape\n", + "gradients/softmax_cross_entropy_with_logits_sg/Reshape_grad/Reshape\n", + "gradients/add_3_grad/tuple/group_deps\n", + "gradients/add_3_grad/tuple/control_dependency\n", + "gradients/add_3_grad/tuple/control_dependency_1\n", + "gradients/dense1/kernel/Regularizer/l2_regularizer_grad/Mul\n", + "gradients/dense1/kernel/Regularizer/l2_regularizer_grad/Mul_1\n", + "gradients/dense1/kernel/Regularizer/l2_regularizer_grad/tuple/group_deps\n", + "gradients/dense1/kernel/Regularizer/l2_regularizer_grad/tuple/control_dependency\n", + "gradients/dense1/kernel/Regularizer/l2_regularizer_grad/tuple/control_dependency_1\n", + "gradients/output_layer/BiasAdd_grad/BiasAddGrad\n", + "gradients/output_layer/BiasAdd_grad/tuple/group_deps\n", + "gradients/output_layer/BiasAdd_grad/tuple/control_dependency\n", + "gradients/output_layer/BiasAdd_grad/tuple/control_dependency_1\n", + "gradients/add_2_grad/tuple/group_deps\n", + "gradients/add_2_grad/tuple/control_dependency\n", + "gradients/add_2_grad/tuple/control_dependency_1\n", + "gradients/conv2d_3/kernel/Regularizer/l2_regularizer_grad/Mul\n", + "gradients/conv2d_3/kernel/Regularizer/l2_regularizer_grad/Mul_1\n", + "gradients/conv2d_3/kernel/Regularizer/l2_regularizer_grad/tuple/group_deps\n", + "gradients/conv2d_3/kernel/Regularizer/l2_regularizer_grad/tuple/control_dependency\n", + "gradients/conv2d_3/kernel/Regularizer/l2_regularizer_grad/tuple/control_dependency_1\n", + "gradients/dense1/kernel/Regularizer/l2_regularizer/L2Loss_grad/mul\n", + "gradients/output_layer/MatMul_grad/MatMul\n", + "gradients/output_layer/MatMul_grad/MatMul_1\n", + "gradients/output_layer/MatMul_grad/tuple/group_deps\n", + "gradients/output_layer/MatMul_grad/tuple/control_dependency\n", + "gradients/output_layer/MatMul_grad/tuple/control_dependency_1\n", + "gradients/add_1_grad/tuple/group_deps\n", + "gradients/add_1_grad/tuple/control_dependency\n", + "gradients/add_1_grad/tuple/control_dependency_1\n", + "gradients/conv2d_2/kernel/Regularizer/l2_regularizer_grad/Mul\n", + "gradients/conv2d_2/kernel/Regularizer/l2_regularizer_grad/Mul_1\n", + "gradients/conv2d_2/kernel/Regularizer/l2_regularizer_grad/tuple/group_deps\n", + "gradients/conv2d_2/kernel/Regularizer/l2_regularizer_grad/tuple/control_dependency\n", + "gradients/conv2d_2/kernel/Regularizer/l2_regularizer_grad/tuple/control_dependency_1\n", + "gradients/conv2d_3/kernel/Regularizer/l2_regularizer/L2Loss_grad/mul\n", + "gradients/dense1/BiasAdd_grad/BiasAddGrad\n", + "gradients/dense1/BiasAdd_grad/tuple/group_deps\n", + "gradients/dense1/BiasAdd_grad/tuple/control_dependency\n", + "gradients/dense1/BiasAdd_grad/tuple/control_dependency_1\n", + "gradients/add_grad/tuple/group_deps\n", + "gradients/add_grad/tuple/control_dependency\n", + "gradients/add_grad/tuple/control_dependency_1\n", + "gradients/conv2d_1/kernel/Regularizer/l2_regularizer_grad/Mul\n", + "gradients/conv2d_1/kernel/Regularizer/l2_regularizer_grad/Mul_1\n", + "gradients/conv2d_1/kernel/Regularizer/l2_regularizer_grad/tuple/group_deps\n", + "gradients/conv2d_1/kernel/Regularizer/l2_regularizer_grad/tuple/control_dependency\n", + "gradients/conv2d_1/kernel/Regularizer/l2_regularizer_grad/tuple/control_dependency_1\n", + "gradients/conv2d_2/kernel/Regularizer/l2_regularizer/L2Loss_grad/mul\n", + "gradients/dense1/MatMul_grad/MatMul\n", + "gradients/dense1/MatMul_grad/MatMul_1\n", + "gradients/dense1/MatMul_grad/tuple/group_deps\n", + "gradients/dense1/MatMul_grad/tuple/control_dependency\n", + "gradients/dense1/MatMul_grad/tuple/control_dependency_1\n", + "gradients/conv2d/kernel/Regularizer/l2_regularizer_grad/Mul\n", + "gradients/conv2d/kernel/Regularizer/l2_regularizer_grad/Mul_1\n", + "gradients/conv2d/kernel/Regularizer/l2_regularizer_grad/tuple/group_deps\n", + "gradients/conv2d/kernel/Regularizer/l2_regularizer_grad/tuple/control_dependency\n", + "gradients/conv2d/kernel/Regularizer/l2_regularizer_grad/tuple/control_dependency_1\n", + "gradients/conv2d_1/kernel/Regularizer/l2_regularizer/L2Loss_grad/mul\n", + "gradients/AddN\n", + "gradients/conv2d/kernel/Regularizer/l2_regularizer/L2Loss_grad/mul\n", + "step/initial_value\n", + "step\n", + "step/Assign\n", + "step/read\n", + "beta1_power/initial_value\n", + "beta1_power\n", + "beta1_power/Assign\n", + "beta1_power/read\n", + "beta2_power/initial_value\n", + "beta2_power\n", + "beta2_power/Assign\n", + "beta2_power/read\n", + "conv2d/kernel/RAdam/Initializer/zeros/shape_as_tensor\n", + "conv2d/kernel/RAdam/Initializer/zeros/Const\n", + "conv2d/kernel/RAdam/Initializer/zeros\n", + "conv2d/kernel/RAdam\n", + "conv2d/kernel/RAdam/Assign\n", + "conv2d/kernel/RAdam/read\n", + "conv2d/kernel/RAdam_1/Initializer/zeros/shape_as_tensor\n", + "conv2d/kernel/RAdam_1/Initializer/zeros/Const\n", + "conv2d/kernel/RAdam_1/Initializer/zeros\n", + "conv2d/kernel/RAdam_1\n", + "conv2d/kernel/RAdam_1/Assign\n", + "conv2d/kernel/RAdam_1/read\n", + "conv2d_1/kernel/RAdam/Initializer/zeros/shape_as_tensor\n", + "conv2d_1/kernel/RAdam/Initializer/zeros/Const\n", + "conv2d_1/kernel/RAdam/Initializer/zeros\n", + "conv2d_1/kernel/RAdam\n", + "conv2d_1/kernel/RAdam/Assign\n", + "conv2d_1/kernel/RAdam/read\n", + "conv2d_1/kernel/RAdam_1/Initializer/zeros/shape_as_tensor\n", + "conv2d_1/kernel/RAdam_1/Initializer/zeros/Const\n", + "conv2d_1/kernel/RAdam_1/Initializer/zeros\n", + "conv2d_1/kernel/RAdam_1\n", + "conv2d_1/kernel/RAdam_1/Assign\n", + "conv2d_1/kernel/RAdam_1/read\n", + "conv2d_2/kernel/RAdam/Initializer/zeros/shape_as_tensor\n", + "conv2d_2/kernel/RAdam/Initializer/zeros/Const\n", + "conv2d_2/kernel/RAdam/Initializer/zeros\n", + "conv2d_2/kernel/RAdam\n", + "conv2d_2/kernel/RAdam/Assign\n", + "conv2d_2/kernel/RAdam/read\n", + "conv2d_2/kernel/RAdam_1/Initializer/zeros/shape_as_tensor\n", + "conv2d_2/kernel/RAdam_1/Initializer/zeros/Const\n", + "conv2d_2/kernel/RAdam_1/Initializer/zeros\n", + "conv2d_2/kernel/RAdam_1\n", + "conv2d_2/kernel/RAdam_1/Assign\n", + "conv2d_2/kernel/RAdam_1/read\n", + "conv2d_3/kernel/RAdam/Initializer/zeros/shape_as_tensor\n", + "conv2d_3/kernel/RAdam/Initializer/zeros/Const\n", + "conv2d_3/kernel/RAdam/Initializer/zeros\n", + "conv2d_3/kernel/RAdam\n", + "conv2d_3/kernel/RAdam/Assign\n", + "conv2d_3/kernel/RAdam/read\n", + "conv2d_3/kernel/RAdam_1/Initializer/zeros/shape_as_tensor\n", + "conv2d_3/kernel/RAdam_1/Initializer/zeros/Const\n", + "conv2d_3/kernel/RAdam_1/Initializer/zeros\n", + "conv2d_3/kernel/RAdam_1\n", + "conv2d_3/kernel/RAdam_1/Assign\n", + "conv2d_3/kernel/RAdam_1/read\n", + "dense1/kernel/RAdam/Initializer/zeros/shape_as_tensor\n", + "dense1/kernel/RAdam/Initializer/zeros/Const\n", + "dense1/kernel/RAdam/Initializer/zeros\n", + "dense1/kernel/RAdam\n", + "dense1/kernel/RAdam/Assign\n", + "dense1/kernel/RAdam/read\n", + "dense1/kernel/RAdam_1/Initializer/zeros/shape_as_tensor\n", + "dense1/kernel/RAdam_1/Initializer/zeros/Const\n", + "dense1/kernel/RAdam_1/Initializer/zeros\n", + "dense1/kernel/RAdam_1\n", + "dense1/kernel/RAdam_1/Assign\n", + "dense1/kernel/RAdam_1/read\n", + "dense1/bias/RAdam/Initializer/zeros\n", + "dense1/bias/RAdam\n", + "dense1/bias/RAdam/Assign\n", + "dense1/bias/RAdam/read\n", + "dense1/bias/RAdam_1/Initializer/zeros\n", + "dense1/bias/RAdam_1\n", + "dense1/bias/RAdam_1/Assign\n", + "dense1/bias/RAdam_1/read\n", + "output_layer/kernel/RAdam/Initializer/zeros/shape_as_tensor\n", + "output_layer/kernel/RAdam/Initializer/zeros/Const\n", + "output_layer/kernel/RAdam/Initializer/zeros\n", + "output_layer/kernel/RAdam\n", + "output_layer/kernel/RAdam/Assign\n", + "output_layer/kernel/RAdam/read\n", + "output_layer/kernel/RAdam_1/Initializer/zeros/shape_as_tensor\n", + "output_layer/kernel/RAdam_1/Initializer/zeros/Const\n", + "output_layer/kernel/RAdam_1/Initializer/zeros\n", + "output_layer/kernel/RAdam_1\n", + "output_layer/kernel/RAdam_1/Assign\n", + "output_layer/kernel/RAdam_1/read\n", + "output_layer/bias/RAdam/Initializer/zeros\n", + "output_layer/bias/RAdam\n", + "output_layer/bias/RAdam/Assign\n", + "output_layer/bias/RAdam/read\n", + "output_layer/bias/RAdam_1/Initializer/zeros\n", + "output_layer/bias/RAdam_1\n", + "output_layer/bias/RAdam_1/Assign\n", + "output_layer/bias/RAdam_1/read\n", + "RAdam/learning_rate\n", + "RAdam/beta1\n", + "RAdam/beta2\n", + "RAdam/epsilon\n", + "RAdam/weight_decay\n", + "RAdam/update_conv2d/kernel/sub/x\n", + "RAdam/update_conv2d/kernel/sub\n", + "RAdam/update_conv2d/kernel/truediv/x\n", + "RAdam/update_conv2d/kernel/truediv\n", + "RAdam/update_conv2d/kernel/sub_1/y\n", + "RAdam/update_conv2d/kernel/sub_1\n", + "RAdam/update_conv2d/kernel/mul/x\n", + "RAdam/update_conv2d/kernel/mul\n", + "RAdam/update_conv2d/kernel/mul_1\n", + "RAdam/update_conv2d/kernel/sub_2/x\n", + "RAdam/update_conv2d/kernel/sub_2\n", + "RAdam/update_conv2d/kernel/truediv_1\n", + "RAdam/update_conv2d/kernel/sub_3\n", + "RAdam/update_conv2d/kernel/mul_2\n", + "RAdam/update_conv2d/kernel/sub_4/x\n", + "RAdam/update_conv2d/kernel/sub_4\n", + "RAdam/update_conv2d/kernel/mul_3\n", + "RAdam/update_conv2d/kernel/add\n", + "RAdam/update_conv2d/kernel/Assign\n", + "RAdam/update_conv2d/kernel/sub_5/x\n", + "RAdam/update_conv2d/kernel/sub_5\n", + "RAdam/update_conv2d/kernel/truediv_2\n", + "RAdam/update_conv2d/kernel/mul_4\n", + "RAdam/update_conv2d/kernel/sub_6/x\n", + "RAdam/update_conv2d/kernel/sub_6\n", + "RAdam/update_conv2d/kernel/Square\n", + "RAdam/update_conv2d/kernel/mul_5\n", + "RAdam/update_conv2d/kernel/add_1\n", + "RAdam/update_conv2d/kernel/Assign_1\n", + "RAdam/update_conv2d/kernel/sub_7/x\n", + "RAdam/update_conv2d/kernel/sub_7\n", + "RAdam/update_conv2d/kernel/add_2\n", + "RAdam/update_conv2d/kernel/truediv_3\n", + "RAdam/update_conv2d/kernel/Sqrt\n", + "RAdam/update_conv2d/kernel/sub_8/y\n", + "RAdam/update_conv2d/kernel/sub_8\n", + "RAdam/update_conv2d/kernel/sub_9/y\n", + "RAdam/update_conv2d/kernel/sub_9\n", + "RAdam/update_conv2d/kernel/mul_6\n", + "RAdam/update_conv2d/kernel/mul_7\n", + "RAdam/update_conv2d/kernel/sub_10/y\n", + "RAdam/update_conv2d/kernel/sub_10\n", + "RAdam/update_conv2d/kernel/sub_11/y\n", + "RAdam/update_conv2d/kernel/sub_11\n", + "RAdam/update_conv2d/kernel/mul_8\n", + "RAdam/update_conv2d/kernel/mul_9\n", + "RAdam/update_conv2d/kernel/truediv_4\n", + "RAdam/update_conv2d/kernel/Sqrt_1\n", + "RAdam/update_conv2d/kernel/GreaterEqual/y\n", + "RAdam/update_conv2d/kernel/GreaterEqual\n", + "RAdam/update_conv2d/kernel/cond/Switch\n", + "RAdam/update_conv2d/kernel/cond/switch_t\n", + "RAdam/update_conv2d/kernel/cond/switch_f\n", + "RAdam/update_conv2d/kernel/cond/pred_id\n", + "RAdam/update_conv2d/kernel/cond/mul/Switch\n", + "RAdam/update_conv2d/kernel/cond/mul/Switch_1\n", + "RAdam/update_conv2d/kernel/cond/mul\n", + "RAdam/update_conv2d/kernel/cond/truediv/Switch\n", + "RAdam/update_conv2d/kernel/cond/truediv\n", + "RAdam/update_conv2d/kernel/cond/Switch_1\n", + "RAdam/update_conv2d/kernel/cond/Merge\n", + "RAdam/update_conv2d/kernel/mul_10\n", + "RAdam/update_conv2d/kernel/AssignSub\n", + "RAdam/update_conv2d/kernel/group_deps\n", + "RAdam/update_conv2d_1/kernel/sub/x\n", + "RAdam/update_conv2d_1/kernel/sub\n", + "RAdam/update_conv2d_1/kernel/truediv/x\n", + "RAdam/update_conv2d_1/kernel/truediv\n", + "RAdam/update_conv2d_1/kernel/sub_1/y\n", + "RAdam/update_conv2d_1/kernel/sub_1\n", + "RAdam/update_conv2d_1/kernel/mul/x\n", + "RAdam/update_conv2d_1/kernel/mul\n", + "RAdam/update_conv2d_1/kernel/mul_1\n", + "RAdam/update_conv2d_1/kernel/sub_2/x\n", + "RAdam/update_conv2d_1/kernel/sub_2\n", + "RAdam/update_conv2d_1/kernel/truediv_1\n", + "RAdam/update_conv2d_1/kernel/sub_3\n", + "RAdam/update_conv2d_1/kernel/mul_2\n", + "RAdam/update_conv2d_1/kernel/sub_4/x\n", + "RAdam/update_conv2d_1/kernel/sub_4\n", + "RAdam/update_conv2d_1/kernel/mul_3\n", + "RAdam/update_conv2d_1/kernel/add\n", + "RAdam/update_conv2d_1/kernel/Assign\n", + "RAdam/update_conv2d_1/kernel/sub_5/x\n", + "RAdam/update_conv2d_1/kernel/sub_5\n", + "RAdam/update_conv2d_1/kernel/truediv_2\n", + "RAdam/update_conv2d_1/kernel/mul_4\n", + "RAdam/update_conv2d_1/kernel/sub_6/x\n", + "RAdam/update_conv2d_1/kernel/sub_6\n", + "RAdam/update_conv2d_1/kernel/Square\n", + "RAdam/update_conv2d_1/kernel/mul_5\n", + "RAdam/update_conv2d_1/kernel/add_1\n", + "RAdam/update_conv2d_1/kernel/Assign_1\n", + "RAdam/update_conv2d_1/kernel/sub_7/x\n", + "RAdam/update_conv2d_1/kernel/sub_7\n", + "RAdam/update_conv2d_1/kernel/add_2\n", + "RAdam/update_conv2d_1/kernel/truediv_3\n", + "RAdam/update_conv2d_1/kernel/Sqrt\n", + "RAdam/update_conv2d_1/kernel/sub_8/y\n", + "RAdam/update_conv2d_1/kernel/sub_8\n", + "RAdam/update_conv2d_1/kernel/sub_9/y\n", + "RAdam/update_conv2d_1/kernel/sub_9\n", + "RAdam/update_conv2d_1/kernel/mul_6\n", + "RAdam/update_conv2d_1/kernel/mul_7\n", + "RAdam/update_conv2d_1/kernel/sub_10/y\n", + "RAdam/update_conv2d_1/kernel/sub_10\n", + "RAdam/update_conv2d_1/kernel/sub_11/y\n", + "RAdam/update_conv2d_1/kernel/sub_11\n", + "RAdam/update_conv2d_1/kernel/mul_8\n", + "RAdam/update_conv2d_1/kernel/mul_9\n", + "RAdam/update_conv2d_1/kernel/truediv_4\n", + "RAdam/update_conv2d_1/kernel/Sqrt_1\n", + "RAdam/update_conv2d_1/kernel/GreaterEqual/y\n", + "RAdam/update_conv2d_1/kernel/GreaterEqual\n", + "RAdam/update_conv2d_1/kernel/cond/Switch\n", + "RAdam/update_conv2d_1/kernel/cond/switch_t\n", + "RAdam/update_conv2d_1/kernel/cond/switch_f\n", + "RAdam/update_conv2d_1/kernel/cond/pred_id\n", + "RAdam/update_conv2d_1/kernel/cond/mul/Switch\n", + "RAdam/update_conv2d_1/kernel/cond/mul/Switch_1\n", + "RAdam/update_conv2d_1/kernel/cond/mul\n", + "RAdam/update_conv2d_1/kernel/cond/truediv/Switch\n", + "RAdam/update_conv2d_1/kernel/cond/truediv\n", + "RAdam/update_conv2d_1/kernel/cond/Switch_1\n", + "RAdam/update_conv2d_1/kernel/cond/Merge\n", + "RAdam/update_conv2d_1/kernel/mul_10\n", + "RAdam/update_conv2d_1/kernel/AssignSub\n", + "RAdam/update_conv2d_1/kernel/group_deps\n", + "RAdam/update_conv2d_2/kernel/sub/x\n", + "RAdam/update_conv2d_2/kernel/sub\n", + "RAdam/update_conv2d_2/kernel/truediv/x\n", + "RAdam/update_conv2d_2/kernel/truediv\n", + "RAdam/update_conv2d_2/kernel/sub_1/y\n", + "RAdam/update_conv2d_2/kernel/sub_1\n", + "RAdam/update_conv2d_2/kernel/mul/x\n", + "RAdam/update_conv2d_2/kernel/mul\n", + "RAdam/update_conv2d_2/kernel/mul_1\n", + "RAdam/update_conv2d_2/kernel/sub_2/x\n", + "RAdam/update_conv2d_2/kernel/sub_2\n", + "RAdam/update_conv2d_2/kernel/truediv_1\n", + "RAdam/update_conv2d_2/kernel/sub_3\n", + "RAdam/update_conv2d_2/kernel/mul_2\n", + "RAdam/update_conv2d_2/kernel/sub_4/x\n", + "RAdam/update_conv2d_2/kernel/sub_4\n", + "RAdam/update_conv2d_2/kernel/mul_3\n", + "RAdam/update_conv2d_2/kernel/add\n", + "RAdam/update_conv2d_2/kernel/Assign\n", + "RAdam/update_conv2d_2/kernel/sub_5/x\n", + "RAdam/update_conv2d_2/kernel/sub_5\n", + "RAdam/update_conv2d_2/kernel/truediv_2\n", + "RAdam/update_conv2d_2/kernel/mul_4\n", + "RAdam/update_conv2d_2/kernel/sub_6/x\n", + "RAdam/update_conv2d_2/kernel/sub_6\n", + "RAdam/update_conv2d_2/kernel/Square\n", + "RAdam/update_conv2d_2/kernel/mul_5\n", + "RAdam/update_conv2d_2/kernel/add_1\n", + "RAdam/update_conv2d_2/kernel/Assign_1\n", + "RAdam/update_conv2d_2/kernel/sub_7/x\n", + "RAdam/update_conv2d_2/kernel/sub_7\n", + "RAdam/update_conv2d_2/kernel/add_2\n", + "RAdam/update_conv2d_2/kernel/truediv_3\n", + "RAdam/update_conv2d_2/kernel/Sqrt\n", + "RAdam/update_conv2d_2/kernel/sub_8/y\n", + "RAdam/update_conv2d_2/kernel/sub_8\n", + "RAdam/update_conv2d_2/kernel/sub_9/y\n", + "RAdam/update_conv2d_2/kernel/sub_9\n", + "RAdam/update_conv2d_2/kernel/mul_6\n", + "RAdam/update_conv2d_2/kernel/mul_7\n", + "RAdam/update_conv2d_2/kernel/sub_10/y\n", + "RAdam/update_conv2d_2/kernel/sub_10\n", + "RAdam/update_conv2d_2/kernel/sub_11/y\n", + "RAdam/update_conv2d_2/kernel/sub_11\n", + "RAdam/update_conv2d_2/kernel/mul_8\n", + "RAdam/update_conv2d_2/kernel/mul_9\n", + "RAdam/update_conv2d_2/kernel/truediv_4\n", + "RAdam/update_conv2d_2/kernel/Sqrt_1\n", + "RAdam/update_conv2d_2/kernel/GreaterEqual/y\n", + "RAdam/update_conv2d_2/kernel/GreaterEqual\n", + "RAdam/update_conv2d_2/kernel/cond/Switch\n", + "RAdam/update_conv2d_2/kernel/cond/switch_t\n", + "RAdam/update_conv2d_2/kernel/cond/switch_f\n", + "RAdam/update_conv2d_2/kernel/cond/pred_id\n", + "RAdam/update_conv2d_2/kernel/cond/mul/Switch\n", + "RAdam/update_conv2d_2/kernel/cond/mul/Switch_1\n", + "RAdam/update_conv2d_2/kernel/cond/mul\n", + "RAdam/update_conv2d_2/kernel/cond/truediv/Switch\n", + "RAdam/update_conv2d_2/kernel/cond/truediv\n", + "RAdam/update_conv2d_2/kernel/cond/Switch_1\n", + "RAdam/update_conv2d_2/kernel/cond/Merge\n", + "RAdam/update_conv2d_2/kernel/mul_10\n", + "RAdam/update_conv2d_2/kernel/AssignSub\n", + "RAdam/update_conv2d_2/kernel/group_deps\n", + "RAdam/update_conv2d_3/kernel/sub/x\n", + "RAdam/update_conv2d_3/kernel/sub\n", + "RAdam/update_conv2d_3/kernel/truediv/x\n", + "RAdam/update_conv2d_3/kernel/truediv\n", + "RAdam/update_conv2d_3/kernel/sub_1/y\n", + "RAdam/update_conv2d_3/kernel/sub_1\n", + "RAdam/update_conv2d_3/kernel/mul/x\n", + "RAdam/update_conv2d_3/kernel/mul\n", + "RAdam/update_conv2d_3/kernel/mul_1\n", + "RAdam/update_conv2d_3/kernel/sub_2/x\n", + "RAdam/update_conv2d_3/kernel/sub_2\n", + "RAdam/update_conv2d_3/kernel/truediv_1\n", + "RAdam/update_conv2d_3/kernel/sub_3\n", + "RAdam/update_conv2d_3/kernel/mul_2\n", + "RAdam/update_conv2d_3/kernel/sub_4/x\n", + "RAdam/update_conv2d_3/kernel/sub_4\n", + "RAdam/update_conv2d_3/kernel/mul_3\n", + "RAdam/update_conv2d_3/kernel/add\n", + "RAdam/update_conv2d_3/kernel/Assign\n", + "RAdam/update_conv2d_3/kernel/sub_5/x\n", + "RAdam/update_conv2d_3/kernel/sub_5\n", + "RAdam/update_conv2d_3/kernel/truediv_2\n", + "RAdam/update_conv2d_3/kernel/mul_4\n", + "RAdam/update_conv2d_3/kernel/sub_6/x\n", + "RAdam/update_conv2d_3/kernel/sub_6\n", + "RAdam/update_conv2d_3/kernel/Square\n", + "RAdam/update_conv2d_3/kernel/mul_5\n", + "RAdam/update_conv2d_3/kernel/add_1\n", + "RAdam/update_conv2d_3/kernel/Assign_1\n", + "RAdam/update_conv2d_3/kernel/sub_7/x\n", + "RAdam/update_conv2d_3/kernel/sub_7\n", + "RAdam/update_conv2d_3/kernel/add_2\n", + "RAdam/update_conv2d_3/kernel/truediv_3\n", + "RAdam/update_conv2d_3/kernel/Sqrt\n", + "RAdam/update_conv2d_3/kernel/sub_8/y\n", + "RAdam/update_conv2d_3/kernel/sub_8\n", + "RAdam/update_conv2d_3/kernel/sub_9/y\n", + "RAdam/update_conv2d_3/kernel/sub_9\n", + "RAdam/update_conv2d_3/kernel/mul_6\n", + "RAdam/update_conv2d_3/kernel/mul_7\n", + "RAdam/update_conv2d_3/kernel/sub_10/y\n", + "RAdam/update_conv2d_3/kernel/sub_10\n", + "RAdam/update_conv2d_3/kernel/sub_11/y\n", + "RAdam/update_conv2d_3/kernel/sub_11\n", + "RAdam/update_conv2d_3/kernel/mul_8\n", + "RAdam/update_conv2d_3/kernel/mul_9\n", + "RAdam/update_conv2d_3/kernel/truediv_4\n", + "RAdam/update_conv2d_3/kernel/Sqrt_1\n", + "RAdam/update_conv2d_3/kernel/GreaterEqual/y\n", + "RAdam/update_conv2d_3/kernel/GreaterEqual\n", + "RAdam/update_conv2d_3/kernel/cond/Switch\n", + "RAdam/update_conv2d_3/kernel/cond/switch_t\n", + "RAdam/update_conv2d_3/kernel/cond/switch_f\n", + "RAdam/update_conv2d_3/kernel/cond/pred_id\n", + "RAdam/update_conv2d_3/kernel/cond/mul/Switch\n", + "RAdam/update_conv2d_3/kernel/cond/mul/Switch_1\n", + "RAdam/update_conv2d_3/kernel/cond/mul\n", + "RAdam/update_conv2d_3/kernel/cond/truediv/Switch\n", + "RAdam/update_conv2d_3/kernel/cond/truediv\n", + "RAdam/update_conv2d_3/kernel/cond/Switch_1\n", + "RAdam/update_conv2d_3/kernel/cond/Merge\n", + "RAdam/update_conv2d_3/kernel/mul_10\n", + "RAdam/update_conv2d_3/kernel/AssignSub\n", + "RAdam/update_conv2d_3/kernel/group_deps\n", + "RAdam/update_dense1/kernel/sub/x\n", + "RAdam/update_dense1/kernel/sub\n", + "RAdam/update_dense1/kernel/truediv/x\n", + "RAdam/update_dense1/kernel/truediv\n", + "RAdam/update_dense1/kernel/sub_1/y\n", + "RAdam/update_dense1/kernel/sub_1\n", + "RAdam/update_dense1/kernel/mul/x\n", + "RAdam/update_dense1/kernel/mul\n", + "RAdam/update_dense1/kernel/mul_1\n", + "RAdam/update_dense1/kernel/sub_2/x\n", + "RAdam/update_dense1/kernel/sub_2\n", + "RAdam/update_dense1/kernel/truediv_1\n", + "RAdam/update_dense1/kernel/sub_3\n", + "RAdam/update_dense1/kernel/mul_2\n", + "RAdam/update_dense1/kernel/sub_4/x\n", + "RAdam/update_dense1/kernel/sub_4\n", + "RAdam/update_dense1/kernel/mul_3\n", + "RAdam/update_dense1/kernel/add\n", + "RAdam/update_dense1/kernel/Assign\n", + "RAdam/update_dense1/kernel/sub_5/x\n", + "RAdam/update_dense1/kernel/sub_5\n", + "RAdam/update_dense1/kernel/truediv_2\n", + "RAdam/update_dense1/kernel/mul_4\n", + "RAdam/update_dense1/kernel/sub_6/x\n", + "RAdam/update_dense1/kernel/sub_6\n", + "RAdam/update_dense1/kernel/Square\n", + "RAdam/update_dense1/kernel/mul_5\n", + "RAdam/update_dense1/kernel/add_1\n", + "RAdam/update_dense1/kernel/Assign_1\n", + "RAdam/update_dense1/kernel/sub_7/x\n", + "RAdam/update_dense1/kernel/sub_7\n", + "RAdam/update_dense1/kernel/add_2\n", + "RAdam/update_dense1/kernel/truediv_3\n", + "RAdam/update_dense1/kernel/Sqrt\n", + "RAdam/update_dense1/kernel/sub_8/y\n", + "RAdam/update_dense1/kernel/sub_8\n", + "RAdam/update_dense1/kernel/sub_9/y\n", + "RAdam/update_dense1/kernel/sub_9\n", + "RAdam/update_dense1/kernel/mul_6\n", + "RAdam/update_dense1/kernel/mul_7\n", + "RAdam/update_dense1/kernel/sub_10/y\n", + "RAdam/update_dense1/kernel/sub_10\n", + "RAdam/update_dense1/kernel/sub_11/y\n", + "RAdam/update_dense1/kernel/sub_11\n", + "RAdam/update_dense1/kernel/mul_8\n", + "RAdam/update_dense1/kernel/mul_9\n", + "RAdam/update_dense1/kernel/truediv_4\n", + "RAdam/update_dense1/kernel/Sqrt_1\n", + "RAdam/update_dense1/kernel/GreaterEqual/y\n", + "RAdam/update_dense1/kernel/GreaterEqual\n", + "RAdam/update_dense1/kernel/cond/Switch\n", + "RAdam/update_dense1/kernel/cond/switch_t\n", + "RAdam/update_dense1/kernel/cond/switch_f\n", + "RAdam/update_dense1/kernel/cond/pred_id\n", + "RAdam/update_dense1/kernel/cond/mul/Switch\n", + "RAdam/update_dense1/kernel/cond/mul/Switch_1\n", + "RAdam/update_dense1/kernel/cond/mul\n", + "RAdam/update_dense1/kernel/cond/truediv/Switch\n", + "RAdam/update_dense1/kernel/cond/truediv\n", + "RAdam/update_dense1/kernel/cond/Switch_1\n", + "RAdam/update_dense1/kernel/cond/Merge\n", + "RAdam/update_dense1/kernel/mul_10\n", + "RAdam/update_dense1/kernel/AssignSub\n", + "RAdam/update_dense1/kernel/group_deps\n", + "RAdam/update_dense1/bias/sub/x\n", + "RAdam/update_dense1/bias/sub\n", + "RAdam/update_dense1/bias/truediv/x\n", + "RAdam/update_dense1/bias/truediv\n", + "RAdam/update_dense1/bias/sub_1/y\n", + "RAdam/update_dense1/bias/sub_1\n", + "RAdam/update_dense1/bias/mul/x\n", + "RAdam/update_dense1/bias/mul\n", + "RAdam/update_dense1/bias/mul_1\n", + "RAdam/update_dense1/bias/sub_2/x\n", + "RAdam/update_dense1/bias/sub_2\n", + "RAdam/update_dense1/bias/truediv_1\n", + "RAdam/update_dense1/bias/sub_3\n", + "RAdam/update_dense1/bias/mul_2\n", + "RAdam/update_dense1/bias/sub_4/x\n", + "RAdam/update_dense1/bias/sub_4\n", + "RAdam/update_dense1/bias/mul_3\n", + "RAdam/update_dense1/bias/add\n", + "RAdam/update_dense1/bias/Assign\n", + "RAdam/update_dense1/bias/sub_5/x\n", + "RAdam/update_dense1/bias/sub_5\n", + "RAdam/update_dense1/bias/truediv_2\n", + "RAdam/update_dense1/bias/mul_4\n", + "RAdam/update_dense1/bias/sub_6/x\n", + "RAdam/update_dense1/bias/sub_6\n", + "RAdam/update_dense1/bias/Square\n", + "RAdam/update_dense1/bias/mul_5\n", + "RAdam/update_dense1/bias/add_1\n", + "RAdam/update_dense1/bias/Assign_1\n", + "RAdam/update_dense1/bias/sub_7/x\n", + "RAdam/update_dense1/bias/sub_7\n", + "RAdam/update_dense1/bias/add_2\n", + "RAdam/update_dense1/bias/truediv_3\n", + "RAdam/update_dense1/bias/Sqrt\n", + "RAdam/update_dense1/bias/sub_8/y\n", + "RAdam/update_dense1/bias/sub_8\n", + "RAdam/update_dense1/bias/sub_9/y\n", + "RAdam/update_dense1/bias/sub_9\n", + "RAdam/update_dense1/bias/mul_6\n", + "RAdam/update_dense1/bias/mul_7\n", + "RAdam/update_dense1/bias/sub_10/y\n", + "RAdam/update_dense1/bias/sub_10\n", + "RAdam/update_dense1/bias/sub_11/y\n", + "RAdam/update_dense1/bias/sub_11\n", + "RAdam/update_dense1/bias/mul_8\n", + "RAdam/update_dense1/bias/mul_9\n", + "RAdam/update_dense1/bias/truediv_4\n", + "RAdam/update_dense1/bias/Sqrt_1\n", + "RAdam/update_dense1/bias/GreaterEqual/y\n", + "RAdam/update_dense1/bias/GreaterEqual\n", + "RAdam/update_dense1/bias/cond/Switch\n", + "RAdam/update_dense1/bias/cond/switch_t\n", + "RAdam/update_dense1/bias/cond/switch_f\n", + "RAdam/update_dense1/bias/cond/pred_id\n", + "RAdam/update_dense1/bias/cond/mul/Switch\n", + "RAdam/update_dense1/bias/cond/mul/Switch_1\n", + "RAdam/update_dense1/bias/cond/mul\n", + "RAdam/update_dense1/bias/cond/truediv/Switch\n", + "RAdam/update_dense1/bias/cond/truediv\n", + "RAdam/update_dense1/bias/cond/Switch_1\n", + "RAdam/update_dense1/bias/cond/Merge\n", + "RAdam/update_dense1/bias/mul_10\n", + "RAdam/update_dense1/bias/AssignSub\n", + "RAdam/update_dense1/bias/group_deps\n", + "RAdam/update_output_layer/kernel/sub/x\n", + "RAdam/update_output_layer/kernel/sub\n", + "RAdam/update_output_layer/kernel/truediv/x\n", + "RAdam/update_output_layer/kernel/truediv\n", + "RAdam/update_output_layer/kernel/sub_1/y\n", + "RAdam/update_output_layer/kernel/sub_1\n", + "RAdam/update_output_layer/kernel/mul/x\n", + "RAdam/update_output_layer/kernel/mul\n", + "RAdam/update_output_layer/kernel/mul_1\n", + "RAdam/update_output_layer/kernel/sub_2/x\n", + "RAdam/update_output_layer/kernel/sub_2\n", + "RAdam/update_output_layer/kernel/truediv_1\n", + "RAdam/update_output_layer/kernel/sub_3\n", + "RAdam/update_output_layer/kernel/mul_2\n", + "RAdam/update_output_layer/kernel/sub_4/x\n", + "RAdam/update_output_layer/kernel/sub_4\n", + "RAdam/update_output_layer/kernel/mul_3\n", + "RAdam/update_output_layer/kernel/add\n", + "RAdam/update_output_layer/kernel/Assign\n", + "RAdam/update_output_layer/kernel/sub_5/x\n", + "RAdam/update_output_layer/kernel/sub_5\n", + "RAdam/update_output_layer/kernel/truediv_2\n", + "RAdam/update_output_layer/kernel/mul_4\n", + "RAdam/update_output_layer/kernel/sub_6/x\n", + "RAdam/update_output_layer/kernel/sub_6\n", + "RAdam/update_output_layer/kernel/Square\n", + "RAdam/update_output_layer/kernel/mul_5\n", + "RAdam/update_output_layer/kernel/add_1\n", + "RAdam/update_output_layer/kernel/Assign_1\n", + "RAdam/update_output_layer/kernel/sub_7/x\n", + "RAdam/update_output_layer/kernel/sub_7\n", + "RAdam/update_output_layer/kernel/add_2\n", + "RAdam/update_output_layer/kernel/truediv_3\n", + "RAdam/update_output_layer/kernel/Sqrt\n", + "RAdam/update_output_layer/kernel/sub_8/y\n", + "RAdam/update_output_layer/kernel/sub_8\n", + "RAdam/update_output_layer/kernel/sub_9/y\n", + "RAdam/update_output_layer/kernel/sub_9\n", + "RAdam/update_output_layer/kernel/mul_6\n", + "RAdam/update_output_layer/kernel/mul_7\n", + "RAdam/update_output_layer/kernel/sub_10/y\n", + "RAdam/update_output_layer/kernel/sub_10\n", + "RAdam/update_output_layer/kernel/sub_11/y\n", + "RAdam/update_output_layer/kernel/sub_11\n", + "RAdam/update_output_layer/kernel/mul_8\n", + "RAdam/update_output_layer/kernel/mul_9\n", + "RAdam/update_output_layer/kernel/truediv_4\n", + "RAdam/update_output_layer/kernel/Sqrt_1\n", + "RAdam/update_output_layer/kernel/GreaterEqual/y\n", + "RAdam/update_output_layer/kernel/GreaterEqual\n", + "RAdam/update_output_layer/kernel/cond/Switch\n", + "RAdam/update_output_layer/kernel/cond/switch_t\n", + "RAdam/update_output_layer/kernel/cond/switch_f\n", + "RAdam/update_output_layer/kernel/cond/pred_id\n", + "RAdam/update_output_layer/kernel/cond/mul/Switch\n", + "RAdam/update_output_layer/kernel/cond/mul/Switch_1\n", + "RAdam/update_output_layer/kernel/cond/mul\n", + "RAdam/update_output_layer/kernel/cond/truediv/Switch\n", + "RAdam/update_output_layer/kernel/cond/truediv\n", + "RAdam/update_output_layer/kernel/cond/Switch_1\n", + "RAdam/update_output_layer/kernel/cond/Merge\n", + "RAdam/update_output_layer/kernel/mul_10\n", + "RAdam/update_output_layer/kernel/AssignSub\n", + "RAdam/update_output_layer/kernel/group_deps\n", + "RAdam/update_output_layer/bias/sub/x\n", + "RAdam/update_output_layer/bias/sub\n", + "RAdam/update_output_layer/bias/truediv/x\n", + "RAdam/update_output_layer/bias/truediv\n", + "RAdam/update_output_layer/bias/sub_1/y\n", + "RAdam/update_output_layer/bias/sub_1\n", + "RAdam/update_output_layer/bias/mul/x\n", + "RAdam/update_output_layer/bias/mul\n", + "RAdam/update_output_layer/bias/mul_1\n", + "RAdam/update_output_layer/bias/sub_2/x\n", + "RAdam/update_output_layer/bias/sub_2\n", + "RAdam/update_output_layer/bias/truediv_1\n", + "RAdam/update_output_layer/bias/sub_3\n", + "RAdam/update_output_layer/bias/mul_2\n", + "RAdam/update_output_layer/bias/sub_4/x\n", + "RAdam/update_output_layer/bias/sub_4\n", + "RAdam/update_output_layer/bias/mul_3\n", + "RAdam/update_output_layer/bias/add\n", + "RAdam/update_output_layer/bias/Assign\n", + "RAdam/update_output_layer/bias/sub_5/x\n", + "RAdam/update_output_layer/bias/sub_5\n", + "RAdam/update_output_layer/bias/truediv_2\n", + "RAdam/update_output_layer/bias/mul_4\n", + "RAdam/update_output_layer/bias/sub_6/x\n", + "RAdam/update_output_layer/bias/sub_6\n", + "RAdam/update_output_layer/bias/Square\n", + "RAdam/update_output_layer/bias/mul_5\n", + "RAdam/update_output_layer/bias/add_1\n", + "RAdam/update_output_layer/bias/Assign_1\n", + "RAdam/update_output_layer/bias/sub_7/x\n", + "RAdam/update_output_layer/bias/sub_7\n", + "RAdam/update_output_layer/bias/add_2\n", + "RAdam/update_output_layer/bias/truediv_3\n", + "RAdam/update_output_layer/bias/Sqrt\n", + "RAdam/update_output_layer/bias/sub_8/y\n", + "RAdam/update_output_layer/bias/sub_8\n", + "RAdam/update_output_layer/bias/sub_9/y\n", + "RAdam/update_output_layer/bias/sub_9\n", + "RAdam/update_output_layer/bias/mul_6\n", + "RAdam/update_output_layer/bias/mul_7\n", + "RAdam/update_output_layer/bias/sub_10/y\n", + "RAdam/update_output_layer/bias/sub_10\n", + "RAdam/update_output_layer/bias/sub_11/y\n", + "RAdam/update_output_layer/bias/sub_11\n", + "RAdam/update_output_layer/bias/mul_8\n", + "RAdam/update_output_layer/bias/mul_9\n", + "RAdam/update_output_layer/bias/truediv_4\n", + "RAdam/update_output_layer/bias/Sqrt_1\n", + "RAdam/update_output_layer/bias/GreaterEqual/y\n", + "RAdam/update_output_layer/bias/GreaterEqual\n", + "RAdam/update_output_layer/bias/cond/Switch\n", + "RAdam/update_output_layer/bias/cond/switch_t\n", + "RAdam/update_output_layer/bias/cond/switch_f\n", + "RAdam/update_output_layer/bias/cond/pred_id\n", + "RAdam/update_output_layer/bias/cond/mul/Switch\n", + "RAdam/update_output_layer/bias/cond/mul/Switch_1\n", + "RAdam/update_output_layer/bias/cond/mul\n", + "RAdam/update_output_layer/bias/cond/truediv/Switch\n", + "RAdam/update_output_layer/bias/cond/truediv\n", + "RAdam/update_output_layer/bias/cond/Switch_1\n", + "RAdam/update_output_layer/bias/cond/Merge\n", + "RAdam/update_output_layer/bias/mul_10\n", + "RAdam/update_output_layer/bias/AssignSub\n", + "RAdam/update_output_layer/bias/group_deps\n", + "RAdam/add/y\n", + "RAdam/add\n", + "RAdam/Assign\n", + "RAdam/mul\n", + "RAdam/Assign_1\n", + "RAdam/mul_1\n", + "RAdam/Assign_2\n", + "RAdam/update\n", + "RAdam/value\n", + "RAdam\n", + "save/filename/input\n", + "save/filename\n", + "save/Const\n", + "save/SaveV2/tensor_names\n", + "save/SaveV2/shape_and_slices\n", + "save/SaveV2\n", + "save/control_dependency\n", + "save/RestoreV2/tensor_names\n", + "save/RestoreV2/shape_and_slices\n", + "save/RestoreV2\n", + "save/Assign\n", + "save/Assign_1\n", + "save/Assign_2\n", + "save/Assign_3\n", + "save/Assign_4\n", + "save/Assign_5\n", + "save/Assign_6\n", + "save/Assign_7\n", + "save/Assign_8\n", + "save/Assign_9\n", + "save/Assign_10\n", + "save/Assign_11\n", + "save/Assign_12\n", + "save/Assign_13\n", + "save/Assign_14\n", + "save/Assign_15\n", + "save/Assign_16\n", + "save/Assign_17\n", + "save/Assign_18\n", + "save/Assign_19\n", + "save/Assign_20\n", + "save/Assign_21\n", + "save/Assign_22\n", + "save/Assign_23\n", + "save/Assign_24\n", + "save/Assign_25\n", + "save/Assign_26\n", + "save/Assign_27\n", + "save/Assign_28\n", + "save/Assign_29\n", + "save/Assign_30\n", + "save/Assign_31\n", + "save/restore_all\n", + "init\n" + ] + } + ], + "source": [ + "for i in session.graph.get_operations():\n", + " print(i.name)" + ] + }, { "cell_type": "code", "execution_count": 3, diff --git a/hw2/explore_data_ex1_ex2.ipynb b/hw2/explore_data_ex1_ex2.ipynb index b0e4076252e1caef8e297f6f2863f3819b22723c..268a25fdf226551fb3a20221aef1d233f9727f11 100644 --- a/hw2/explore_data_ex1_ex2.ipynb +++ b/hw2/explore_data_ex1_ex2.ipynb @@ -2,13 +2,14 @@ "cells": [ { "cell_type": "code", - "execution_count": 2, + "execution_count": 4, "metadata": { "collapsed": true }, "outputs": [], "source": [ "import numpy as np\n", + "import pandas as pd\n", "import matplotlib.pyplot as plt" ] }, @@ -210,21 +211,130 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 3, "metadata": { - "collapsed": true + "scrolled": true }, - "outputs": [], - "source": [] + "outputs": [ + { + "data": { + "text/plain": [ + "(50000,)" + ] + }, + "execution_count": 3, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "fn_ex1 = '/work/cse479/shared/homework/02/cifar_labels.npy'\n", + "data1 = np.load(fn_ex1)\n", + "data1.shape" + ] }, { "cell_type": "code", - "execution_count": null, + "execution_count": 5, "metadata": { "collapsed": true }, - "outputs": [], - "source": [] + "outputs": [ + { + "data": { + "text/plain": [ + "95 500\n", + "74 500\n", + "39 500\n", + "71 500\n", + "8 500\n", + "40 500\n", + "72 500\n", + "9 500\n", + "41 500\n", + "73 500\n", + "10 500\n", + "42 500\n", + "11 500\n", + "63 500\n", + "43 500\n", + "75 500\n", + "12 500\n", + "44 500\n", + "76 500\n", + "13 500\n", + "45 500\n", + "77 500\n", + "14 500\n", + "46 500\n", + "7 500\n", + "70 500\n", + "38 500\n", + "6 500\n", + "32 500\n", + "64 500\n", + " ... \n", + "30 500\n", + "62 500\n", + "94 500\n", + "31 500\n", + "24 500\n", + "55 500\n", + "79 500\n", + "23 500\n", + "16 500\n", + "48 500\n", + "80 500\n", + "17 500\n", + "49 500\n", + "81 500\n", + "18 500\n", + "50 500\n", + "82 500\n", + "19 500\n", + "51 500\n", + "83 500\n", + "20 500\n", + "52 500\n", + "84 500\n", + "21 500\n", + "53 500\n", + "85 500\n", + "22 500\n", + "54 500\n", + "86 500\n", + "0 500\n", + "Length: 100, dtype: int64" + ] + }, + "execution_count": 5, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "pd.Series(data1).value_counts()" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "(40000.0, 10000.0)" + ] + }, + "execution_count": 7, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "50000*0.8, 50000*0.2" + ] } ], "metadata": { diff --git a/hw2/predict.py b/hw2/predict.py index a89a6ecb1760a67be3f8c0d45d4ac1dd0a770f5f..9cd4259dac4bd31b750d05ff4ff0af6529a57549 100644 --- a/hw2/predict.py +++ b/hw2/predict.py @@ -9,8 +9,10 @@ import click @click.command() @click.argument('model_prefix', type=str) @click.argument('data_fold') -def make_prediction(model_prefix, data_fold): - test_feature, test_label = np.load('data_npys/test_feature_%s.npy'%data_fold), np.load('data_npys/test_label_%s.npy'%data_fold) +@click.option('--cfx_name', default ='confusion_matrix/SparseTensorDenseAdd:0', show_default=True, type=str, metavar='<str>', + help = 'specify the tensor name of the confusion matrix, autoencoder uses optimizer/confusion_matrix/SparseTensorDenseAdd:0') +def make_prediction(model_prefix, data_fold, cfx_name): + test_feature, test_label = np.load('/work/schnablelab/cmiao/class_879/cse_479/hw2/data_npys/test_feature_%s.npy'%data_fold), np.load('/work/schnablelab/cmiao/class_879/cse_479/hw2/data_npys/test_label_%s.npy'%data_fold) test_num = test_feature.shape[0] print(test_num) with tf.Session() as sess: @@ -19,9 +21,10 @@ def make_prediction(model_prefix, data_fold): x = sess.graph.get_tensor_by_name('input_placeholder:0')# check y = sess.graph.get_tensor_by_name('true_label:0')#check output = sess.graph.get_tensor_by_name('output:0') - confusion_matrix_op = sess.graph.get_tensor_by_name('optimizer/confusion_matrix/SparseTensorDenseAdd:0') + confusion_matrix_op = sess.graph.get_tensor_by_name(cfx_name) cfx = sess.run(confusion_matrix_op, {x:test_feature, y: test_label}) print(cfx) + np.save('confusion_matrix_ex2', cfx) test_acc = np.diagonal(cfx).sum()/test_num print('cross validation accuracy: %s'%test_acc) diff --git a/hw2/summarize.ipynb b/hw2/summarize.ipynb new file mode 100644 index 0000000000000000000000000000000000000000..ce54bf47847a000b678ea93e2a21e1f8d766f025 --- /dev/null +++ b/hw2/summarize.ipynb @@ -0,0 +1,1024 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": 1, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "import pandas as pd\n", + "from pathlib import Path\n", + "import matplotlib.pyplot as plt\n", + "import seaborn as sns\n", + "from scipy.stats import ttest_ind\n", + "import numpy as np\n" + ] + }, + { + "cell_type": "code", + "execution_count": 105, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [] + }, + { + "cell_type": "code", + "execution_count": 25, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "hist_dir = Path('/work/schnablelab/cmiao/class_879/cse_479/hw2/ex1_history')\n", + "df_list = []\n", + "fns = []\n", + "for i in hist_dir.glob('hist_h*.csv'):\n", + " fns.append(i.name)\n", + " df_tmp = pd.read_csv(i)\n", + " try:\n", + " df_tmp = df_tmp.iloc[-30, :]\n", + " except:\n", + " df_tmp = df_tmp.iloc[-1, :]\n", + " df_list.append(df_tmp)\n", + "df = pd.concat(df_list, axis=1).transpose()" + ] + }, + { + "cell_type": "code", + "execution_count": 26, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "df['fn'] = fns\n", + "df['layers'] = df['fn'].apply(lambda x: int(x.split('_')[1][-1]))\n", + "df['batch_size'] = df['fn'].apply(lambda x: int(x.split('_')[2][5:]))\n", + "df['lr'] = df['fn'].apply(lambda x: float(x.split('_')[3][2:]))\n", + "df['fold'] = df['fn'].apply(lambda x: int(x.split('_fold')[-1][0]))\n", + "df['regulizer_l2'] = df['fn'].apply(lambda x: int(x.split('_reg')[-1][0]))" + ] + }, + { + "cell_type": "code", + "execution_count": 29, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "df1 = df[['layers','batch_size', 'lr', 'regulizer_l2', 'fold', 'valid_accuracy']]" + ] + }, + { + "cell_type": "code", + "execution_count": 33, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "df1 = df1.sort_values(['layers', 'batch_size', 'lr', 'regulizer_l2', 'fold', 'valid_accuracy'])" + ] + }, + { + "cell_type": "code", + "execution_count": 37, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "<div>\n", + "<style scoped>\n", + " .dataframe tbody tr th:only-of-type {\n", + " vertical-align: middle;\n", + " }\n", + "\n", + " .dataframe tbody tr th {\n", + " vertical-align: top;\n", + " }\n", + "\n", + " .dataframe thead th {\n", + " text-align: right;\n", + " }\n", + "</style>\n", + "<table border=\"1\" class=\"dataframe\">\n", + " <thead>\n", + " <tr style=\"text-align: right;\">\n", + " <th></th>\n", + " <th>layers</th>\n", + " <th>batch_size</th>\n", + " <th>lr</th>\n", + " <th>regulizer_l2</th>\n", + " <th>fold</th>\n", + " <th>valid_accuracy</th>\n", + " </tr>\n", + " </thead>\n", + " <tbody>\n", + " <tr>\n", + " <th>22</th>\n", + " <td>4</td>\n", + " <td>32</td>\n", + " <td>0.001</td>\n", + " <td>0</td>\n", + " <td>1</td>\n", + " <td>0.138000</td>\n", + " </tr>\n", + " <tr>\n", + " <th>14</th>\n", + " <td>4</td>\n", + " <td>32</td>\n", + " <td>0.001</td>\n", + " <td>0</td>\n", + " <td>2</td>\n", + " <td>0.124750</td>\n", + " </tr>\n", + " <tr>\n", + " <th>15</th>\n", + " <td>4</td>\n", + " <td>32</td>\n", + " <td>0.001</td>\n", + " <td>0</td>\n", + " <td>3</td>\n", + " <td>0.129500</td>\n", + " </tr>\n", + " <tr>\n", + " <th>13</th>\n", + " <td>4</td>\n", + " <td>32</td>\n", + " <td>0.001</td>\n", + " <td>0</td>\n", + " <td>4</td>\n", + " <td>0.144875</td>\n", + " </tr>\n", + " <tr>\n", + " <th>17</th>\n", + " <td>4</td>\n", + " <td>32</td>\n", + " <td>0.001</td>\n", + " <td>0</td>\n", + " <td>5</td>\n", + " <td>0.133250</td>\n", + " </tr>\n", + " </tbody>\n", + "</table>\n", + "</div>" + ], + "text/plain": [ + " layers batch_size lr regulizer_l2 fold valid_accuracy\n", + "22 4 32 0.001 0 1 0.138000\n", + "14 4 32 0.001 0 2 0.124750\n", + "15 4 32 0.001 0 3 0.129500\n", + "13 4 32 0.001 0 4 0.144875\n", + "17 4 32 0.001 0 5 0.133250" + ] + }, + "execution_count": 37, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df1.head()" + ] + }, + { + "cell_type": "code", + "execution_count": 40, + "metadata": { + "collapsed": true, + "scrolled": true + }, + "outputs": [], + "source": [ + "df2 = df1[df1['batch_size'].isin([32, 128])]" + ] + }, + { + "cell_type": "code", + "execution_count": 45, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "df3 = df2[df2['regulizer_l2'] == 1]" + ] + }, + { + "cell_type": "code", + "execution_count": 48, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "bs32 = df3[df3['batch_size']==32]['valid_accuracy']" + ] + }, + { + "cell_type": "code", + "execution_count": 49, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "bs128 = df3[df3['batch_size']==128]['valid_accuracy']" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## there is significant difference between 32 and 128 batch sizes" + ] + }, + { + "cell_type": "code", + "execution_count": 53, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "(0.11156874999999999, 0.13656249999999998)" + ] + }, + "execution_count": 53, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "bs32.mean(), bs128.mean()" + ] + }, + { + "cell_type": "code", + "execution_count": 50, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "Ttest_indResult(statistic=-4.3500568487087632, pvalue=9.8649296985223953e-05)" + ] + }, + "execution_count": 50, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "ttest_ind(bs32, bs128)" + ] + }, + { + "cell_type": "code", + "execution_count": 54, + "metadata": { + "collapsed": true, + "scrolled": true + }, + "outputs": [], + "source": [ + "df3_bs32 = df3[df3['batch_size']==32]\n", + "df3_bs128 = df3[df3['batch_size']==128]" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## batch size == 32" + ] + }, + { + "cell_type": "code", + "execution_count": 56, + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "/home/schnablelab/cmiao/.conda/envs/MCY/lib/python3.6/site-packages/seaborn/categorical.py:490: FutureWarning: remove_na is deprecated and is a private function. Do not use.\n", + " box_data = remove_na(group_data[hue_mask])\n" + ] + }, + { + "data": { + "image/png": "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\n", + "text/plain": [ + "<Figure size 432x288 with 1 Axes>" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "fig, ax = plt.subplots()\n", + "ax = sns.boxplot(x='lr',y='valid_accuracy', hue='layers', data=df3_bs32, palette='Set3', ax=ax)\n", + "ax.set_xlabel('Learning rate')\n", + "ax.set_ylabel('Accuracy')\n", + "plt.savefig('bs32.png', dpi=300)\n", + "plt.show()" + ] + }, + { + "cell_type": "code", + "execution_count": 68, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "Ttest_indResult(statistic=8.9557496318397103, pvalue=4.7393236854779575e-08)" + ] + }, + "execution_count": 68, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# difference between lr1 and lr3\n", + "df3_bs32_lr1 = df3_bs32[df3_bs32['lr']==0.001]\n", + "df3_bs32_lr3 = df3_bs32[df3_bs32['lr']==0.003]\n", + "ttest_ind(df3_bs32_lr1['valid_accuracy'], df3_bs32_lr3['valid_accuracy'])" + ] + }, + { + "cell_type": "code", + "execution_count": 69, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "Ttest_indResult(statistic=0.19241772691682416, pvalue=0.8522097672490907)" + ] + }, + "execution_count": 69, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# within lr1\n", + "ttest_ind(df3_bs32_lr1[df3_bs32_lr1['layers']==4]['valid_accuracy'], df3_bs32_lr1[df3_bs32_lr1['layers']==7]['valid_accuracy'])" + ] + }, + { + "cell_type": "code", + "execution_count": 70, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "Ttest_indResult(statistic=-0.99686964379361598, pvalue=0.34802072355955588)" + ] + }, + "execution_count": 70, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# within lr3\n", + "ttest_ind(df3_bs32_lr3[df3_bs32_lr3['layers']==4]['valid_accuracy'], df3_bs32_lr3[df3_bs32_lr3['layers']==7]['valid_accuracy'])" + ] + }, + { + "cell_type": "code", + "execution_count": 71, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "# conclusion: there is no difference within lr1 and lr3" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## batch size == 128" + ] + }, + { + "cell_type": "code", + "execution_count": 57, + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "/home/schnablelab/cmiao/.conda/envs/MCY/lib/python3.6/site-packages/seaborn/categorical.py:490: FutureWarning: remove_na is deprecated and is a private function. Do not use.\n", + " box_data = remove_na(group_data[hue_mask])\n" + ] + }, + { + "data": { + "image/png": "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\n", + "text/plain": [ + "<Figure size 432x288 with 1 Axes>" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "fig, ax = plt.subplots()\n", + "ax = sns.boxplot(x='lr',y='valid_accuracy', hue='layers', data=df3_bs128, palette='Set3', ax=ax)\n", + "ax.set_xlabel('Learning rate')\n", + "ax.set_ylabel('Accuracy')\n", + "plt.savefig('bs128.png', dpi=300)\n", + "plt.show()" + ] + }, + { + "cell_type": "code", + "execution_count": 72, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "Ttest_indResult(statistic=9.1831665139088976, pvalue=3.2595742280013833e-08)" + ] + }, + "execution_count": 72, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# difference between lr1 and lr3\n", + "df3_bs128_lr1 = df3_bs128[df3_bs128['lr']==0.001]\n", + "df3_bs128_lr3 = df3_bs128[df3_bs128['lr']==0.003]\n", + "ttest_ind(df3_bs128_lr1['valid_accuracy'], df3_bs128_lr3['valid_accuracy'])" + ] + }, + { + "cell_type": "code", + "execution_count": 73, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "Ttest_indResult(statistic=0.14152528414812043, pvalue=0.8909539919558811)" + ] + }, + "execution_count": 73, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# within lr1\n", + "ttest_ind(df3_bs128_lr1[df3_bs128_lr1['layers']==4]['valid_accuracy'], df3_bs128_lr1[df3_bs128_lr1['layers']==7]['valid_accuracy'])" + ] + }, + { + "cell_type": "code", + "execution_count": 74, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "Ttest_indResult(statistic=-0.20722033975747206, pvalue=0.84101519349003118)" + ] + }, + "execution_count": 74, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# within lr3\n", + "ttest_ind(df3_bs128_lr3[df3_bs128_lr3['layers']==4]['valid_accuracy'], df3_bs128_lr3[df3_bs128_lr3['layers']==7]['valid_accuracy'])" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# conclusion: there is no difference within lr1 and lr3" + ] + }, + { + "cell_type": "code", + "execution_count": 76, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "df3_con4 = df3[df3['layers']==4]\n", + "df3_con7 = df3[df3['layers']==7]" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## no difference using conv4 and conv7" + ] + }, + { + "cell_type": "code", + "execution_count": 77, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "Ttest_indResult(statistic=-0.25351477185404869, pvalue=0.80123707383059295)" + ] + }, + "execution_count": 77, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "ttest_ind(df3_con4['valid_accuracy'], df3_con7['valid_accuracy'])" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "---" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# plot confusion matrix" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## find out the best model" + ] + }, + { + "cell_type": "code", + "execution_count": 82, + "metadata": { + "scrolled": true + }, + "outputs": [ + { + "data": { + "text/html": [ + "<div>\n", + "<style scoped>\n", + " .dataframe tbody tr th:only-of-type {\n", + " vertical-align: middle;\n", + " }\n", + "\n", + " .dataframe tbody tr th {\n", + " vertical-align: top;\n", + " }\n", + "\n", + " .dataframe thead th {\n", + " text-align: right;\n", + " }\n", + "</style>\n", + "<table border=\"1\" class=\"dataframe\">\n", + " <thead>\n", + " <tr style=\"text-align: right;\">\n", + " <th></th>\n", + " <th>layers</th>\n", + " <th>batch_size</th>\n", + " <th>lr</th>\n", + " <th>regulizer_l2</th>\n", + " <th>fold</th>\n", + " <th>valid_accuracy</th>\n", + " </tr>\n", + " </thead>\n", + " <tbody>\n", + " <tr>\n", + " <th>15</th>\n", + " <td>4</td>\n", + " <td>128</td>\n", + " <td>0.001</td>\n", + " <td>1</td>\n", + " <td>4</td>\n", + " <td>0.158000</td>\n", + " </tr>\n", + " <tr>\n", + " <th>10</th>\n", + " <td>7</td>\n", + " <td>128</td>\n", + " <td>0.001</td>\n", + " <td>1</td>\n", + " <td>3</td>\n", + " <td>0.152125</td>\n", + " </tr>\n", + " <tr>\n", + " <th>10</th>\n", + " <td>4</td>\n", + " <td>128</td>\n", + " <td>0.001</td>\n", + " <td>1</td>\n", + " <td>1</td>\n", + " <td>0.150625</td>\n", + " </tr>\n", + " <tr>\n", + " <th>9</th>\n", + " <td>7</td>\n", + " <td>128</td>\n", + " <td>0.001</td>\n", + " <td>1</td>\n", + " <td>5</td>\n", + " <td>0.149375</td>\n", + " </tr>\n", + " <tr>\n", + " <th>11</th>\n", + " <td>7</td>\n", + " <td>128</td>\n", + " <td>0.001</td>\n", + " <td>1</td>\n", + " <td>2</td>\n", + " <td>0.149250</td>\n", + " </tr>\n", + " </tbody>\n", + "</table>\n", + "</div>" + ], + "text/plain": [ + " layers batch_size lr regulizer_l2 fold valid_accuracy\n", + "15 4 128 0.001 1 4 0.158000\n", + "10 7 128 0.001 1 3 0.152125\n", + "10 4 128 0.001 1 1 0.150625\n", + "9 7 128 0.001 1 5 0.149375\n", + "11 7 128 0.001 1 2 0.149250" + ] + }, + "execution_count": 82, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df3.sort_values(['valid_accuracy'], ascending=False).head()" + ] + }, + { + "cell_type": "code", + "execution_count": 93, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "df4 = df3.groupby(['layers', 'batch_size', 'lr']).mean()" + ] + }, + { + "cell_type": "code", + "execution_count": 95, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "std = df3.groupby(['layers', 'batch_size', 'lr']).std()['valid_accuracy']" + ] + }, + { + "cell_type": "code", + "execution_count": 96, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "df4['std'] = std" + ] + }, + { + "cell_type": "code", + "execution_count": 102, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "df4 = df4.sort_values('valid_accuracy', ascending=False).reset_index()[['layers', 'batch_size', 'lr','valid_accuracy','std']]" + ] + }, + { + "cell_type": "code", + "execution_count": 103, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "<div>\n", + "<style scoped>\n", + " .dataframe tbody tr th:only-of-type {\n", + " vertical-align: middle;\n", + " }\n", + "\n", + " .dataframe tbody tr th {\n", + " vertical-align: top;\n", + " }\n", + "\n", + " .dataframe thead th {\n", + " text-align: right;\n", + " }\n", + "</style>\n", + "<table border=\"1\" class=\"dataframe\">\n", + " <thead>\n", + " <tr style=\"text-align: right;\">\n", + " <th></th>\n", + " <th>layers</th>\n", + " <th>batch_size</th>\n", + " <th>lr</th>\n", + " <th>valid_accuracy</th>\n", + " <th>std</th>\n", + " </tr>\n", + " </thead>\n", + " <tbody>\n", + " <tr>\n", + " <th>0</th>\n", + " <td>4</td>\n", + " <td>128</td>\n", + " <td>0.001</td>\n", + " <td>0.148500</td>\n", + " <td>0.006561</td>\n", + " </tr>\n", + " <tr>\n", + " <th>1</th>\n", + " <td>7</td>\n", + " <td>128</td>\n", + " <td>0.001</td>\n", + " <td>0.148025</td>\n", + " <td>0.003644</td>\n", + " </tr>\n", + " <tr>\n", + " <th>2</th>\n", + " <td>4</td>\n", + " <td>32</td>\n", + " <td>0.001</td>\n", + " <td>0.131400</td>\n", + " <td>0.006785</td>\n", + " </tr>\n", + " <tr>\n", + " <th>3</th>\n", + " <td>7</td>\n", + " <td>32</td>\n", + " <td>0.001</td>\n", + " <td>0.130550</td>\n", + " <td>0.007178</td>\n", + " </tr>\n", + " <tr>\n", + " <th>4</th>\n", + " <td>7</td>\n", + " <td>128</td>\n", + " <td>0.003</td>\n", + " <td>0.125300</td>\n", + " <td>0.007564</td>\n", + " </tr>\n", + " <tr>\n", + " <th>5</th>\n", + " <td>4</td>\n", + " <td>128</td>\n", + " <td>0.003</td>\n", + " <td>0.124425</td>\n", + " <td>0.005652</td>\n", + " </tr>\n", + " <tr>\n", + " <th>6</th>\n", + " <td>7</td>\n", + " <td>32</td>\n", + " <td>0.003</td>\n", + " <td>0.095950</td>\n", + " <td>0.008997</td>\n", + " </tr>\n", + " <tr>\n", + " <th>7</th>\n", + " <td>4</td>\n", + " <td>32</td>\n", + " <td>0.003</td>\n", + " <td>0.088375</td>\n", + " <td>0.014414</td>\n", + " </tr>\n", + " </tbody>\n", + "</table>\n", + "</div>" + ], + "text/plain": [ + " layers batch_size lr valid_accuracy std\n", + "0 4 128 0.001 0.148500 0.006561\n", + "1 7 128 0.001 0.148025 0.003644\n", + "2 4 32 0.001 0.131400 0.006785\n", + "3 7 32 0.001 0.130550 0.007178\n", + "4 7 128 0.003 0.125300 0.007564\n", + "5 4 128 0.003 0.124425 0.005652\n", + "6 7 32 0.003 0.095950 0.008997\n", + "7 4 32 0.003 0.088375 0.014414" + ] + }, + "execution_count": 103, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df4" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## make the confusion matrix of the best model" + ] + }, + { + "cell_type": "code", + "execution_count": 116, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "<Figure size 432x288 with 2 Axes>" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "df_cfx = pd.DataFrame(np.load('confusion_matrix_ex1.npy'))/100\n", + "ax = sns.heatmap(df_cfx, cmap=\"YlGnBu\")\n", + "plt.savefig('ex1_cfx.png', dpi=300)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## confusion matrix for the fine tuned model" + ] + }, + { + "cell_type": "code", + "execution_count": 117, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "<Figure size 432x288 with 2 Axes>" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "df_cfx = pd.DataFrame(np.load('confusion_matrix_ex2.npy'))/100\n", + "ax = sns.heatmap(df_cfx, cmap=\"YlGnBu\")\n", + "plt.savefig('ex2_cfx.png', dpi=300)" + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "a = [[899,14,55,32],[6,949,25,20],[2,12,908,78],[193,294,59,454]]" + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "a= np.array(a)" + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "metadata": {}, + "outputs": [], + "source": [ + "df_cfx = pd.DataFrame(a)/1000" + ] + }, + { + "cell_type": "code", + "execution_count": 15, + "metadata": {}, + "outputs": [], + "source": [ + "df_cfx.columns = ['background', 'leaf', 'stalk', 'panicle']\n", + "#df_cfx.index=['background', 'leaf', 'stalk', 'panicle']" + ] + }, + { + "cell_type": "code", + "execution_count": 19, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "<Figure size 432x288 with 2 Axes>" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "ax = sns.heatmap(df_cfx, cmap=\"YlGnBu\", annot=True)\n", + "ax.set_yticklabels(['background', 'leaf', 'stalk', 'panicle'])\n", + "plt.savefig('cfx.svg')" + ] + }, + { + "cell_type": "code", + "execution_count": 18, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "<Figure size 432x288 with 0 Axes>" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python (MCY)", + "language": "python", + "name": "mcy" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.6.9" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +}