329 lines
27 KiB
Plaintext
329 lines
27 KiB
Plaintext
{
|
|
"cells": [
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 1,
|
|
"metadata": {},
|
|
"outputs": [],
|
|
"source": [
|
|
"import tensorflow as tf\n",
|
|
"from tensorflow.examples.tutorials.mnist import input_data\n",
|
|
"import time\n",
|
|
"import pylab"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 2,
|
|
"metadata": {},
|
|
"outputs": [],
|
|
"source": [
|
|
"x = tf.placeholder('float', [None, 784])\n",
|
|
"y_= tf.placeholder('float', [None, 10])\n",
|
|
"x_image = tf.reshape(x, [-1,28,28,1])"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 3,
|
|
"metadata": {},
|
|
"outputs": [
|
|
{
|
|
"name": "stdout",
|
|
"output_type": "stream",
|
|
"text": [
|
|
"<tf.Variable 'Variable:0' shape=(5, 5, 1, 6) dtype=float32_ref>\n",
|
|
"<tf.Variable 'Variable_1:0' shape=(6,) dtype=float32_ref>\n",
|
|
"Tensor(\"Sigmoid:0\", shape=(?, 28, 28, 6), dtype=float32)\n"
|
|
]
|
|
}
|
|
],
|
|
"source": [
|
|
"filter1 = tf.Variable(tf.truncated_normal([ 5, 5, 1, 6]))\n",
|
|
"bias1 = tf.Variable(tf.truncated_normal([6]))\n",
|
|
"print(filter1)\n",
|
|
"print(bias1)\n",
|
|
"conv1 = tf.nn.conv2d(x_image, filter1, strides=[1,1,1,1], padding=\"SAME\")\n",
|
|
"h_conv1 = tf.nn.sigmoid(conv1+bias1)\n",
|
|
"print(h_conv1)"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 4,
|
|
"metadata": {},
|
|
"outputs": [
|
|
{
|
|
"name": "stdout",
|
|
"output_type": "stream",
|
|
"text": [
|
|
"Tensor(\"AvgPool:0\", shape=(?, 14, 14, 6), dtype=float32)\n",
|
|
"Tensor(\"Sigmoid_1:0\", shape=(?, 14, 14, 16), dtype=float32)\n"
|
|
]
|
|
}
|
|
],
|
|
"source": [
|
|
"maxPool2 = tf.nn.avg_pool(h_conv1, ksize=[1,2,2,1], strides=[1,2,2,1], padding=\"SAME\")\n",
|
|
"print(maxPool2)\n",
|
|
"filter2 = tf.Variable(tf.truncated_normal([ 5, 5, 6, 16]))\n",
|
|
"bias2 = tf.Variable(tf.truncated_normal([16]))\n",
|
|
"conv2 = tf.nn.conv2d(maxPool2, filter2, strides=[1,1,1,1], padding=\"SAME\")\n",
|
|
"h_conv2 = tf.nn.sigmoid(conv2+bias2)\n",
|
|
"print(h_conv2)"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 5,
|
|
"metadata": {},
|
|
"outputs": [
|
|
{
|
|
"name": "stdout",
|
|
"output_type": "stream",
|
|
"text": [
|
|
"Tensor(\"Sigmoid_2:0\", shape=(?, 7, 7, 120), dtype=float32)\n"
|
|
]
|
|
}
|
|
],
|
|
"source": [
|
|
"maxPool3 = tf.nn.max_pool(h_conv2, ksize=[1,2,2,1], strides=[1,2,2,1], padding=\"SAME\")\n",
|
|
"filter3 = tf.Variable(tf.truncated_normal([ 5, 5, 16, 120]))\n",
|
|
"bias3 = tf.Variable(tf.truncated_normal([120]))\n",
|
|
"conv3 = tf.nn.conv2d(maxPool3, filter3, strides=[1,1,1,1], padding=\"SAME\")\n",
|
|
"h_conv3 = tf.nn.sigmoid(conv3+bias3)\n",
|
|
"print(h_conv3)"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 6,
|
|
"metadata": {},
|
|
"outputs": [
|
|
{
|
|
"name": "stdout",
|
|
"output_type": "stream",
|
|
"text": [
|
|
"Tensor(\"Sigmoid_3:0\", shape=(?, 80), dtype=float32)\n"
|
|
]
|
|
}
|
|
],
|
|
"source": [
|
|
"W_fc1 = tf.Variable(tf.truncated_normal([7*7*120, 80]))\n",
|
|
"b_fc1 = tf.Variable(tf.truncated_normal([80]))\n",
|
|
"h_pool2_flat = tf.reshape(h_conv3, [-1, 7*7*120])\n",
|
|
"h_fc1 = tf.nn.sigmoid(tf.matmul(h_pool2_flat, W_fc1)+b_fc1)\n",
|
|
"print(h_fc1)"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 7,
|
|
"metadata": {},
|
|
"outputs": [
|
|
{
|
|
"name": "stdout",
|
|
"output_type": "stream",
|
|
"text": [
|
|
"Tensor(\"Softmax:0\", shape=(?, 10), dtype=float32)\n"
|
|
]
|
|
}
|
|
],
|
|
"source": [
|
|
"W_fc2 = tf.Variable(tf.truncated_normal([80, 10]))\n",
|
|
"b_fc2 = tf.Variable(tf.truncated_normal([10]))\n",
|
|
"y_conv = tf.nn.softmax(tf.matmul(h_fc1, W_fc2)+b_fc2)\n",
|
|
"print(y_conv)"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 8,
|
|
"metadata": {},
|
|
"outputs": [],
|
|
"source": [
|
|
"cross_entropy = -tf.reduce_sum(y_ * tf.log(y_conv))\n",
|
|
"train_step = tf.train.GradientDescentOptimizer(0.001).minimize(cross_entropy)\n",
|
|
"sess = tf.InteractiveSession()\n",
|
|
"correct_prediction = tf.equal(tf.argmax(y_conv,1), tf.argmax(y_,1))\n",
|
|
"accuracy = tf.reduce_mean(tf.cast(correct_prediction,\"float\"))"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 9,
|
|
"metadata": {},
|
|
"outputs": [
|
|
{
|
|
"name": "stdout",
|
|
"output_type": "stream",
|
|
"text": [
|
|
"WARNING:tensorflow:From <ipython-input-9-82e827f4989d>:2: read_data_sets (from tensorflow.contrib.learn.python.learn.datasets.mnist) is deprecated and will be removed in a future version.\n",
|
|
"Instructions for updating:\n",
|
|
"Please use alternatives such as official/mnist/dataset.py from tensorflow/models.\n",
|
|
"WARNING:tensorflow:From /opt/conda/lib/python3.6/site-packages/tensorflow/contrib/learn/python/learn/datasets/mnist.py:260: maybe_download (from tensorflow.contrib.learn.python.learn.datasets.base) is deprecated and will be removed in a future version.\n",
|
|
"Instructions for updating:\n",
|
|
"Please write your own downloading logic.\n",
|
|
"WARNING:tensorflow:From /opt/conda/lib/python3.6/site-packages/tensorflow/contrib/learn/python/learn/datasets/mnist.py:262: extract_images (from tensorflow.contrib.learn.python.learn.datasets.mnist) is deprecated and will be removed in a future version.\n",
|
|
"Instructions for updating:\n",
|
|
"Please use tf.data to implement this functionality.\n",
|
|
"Extracting MNIST_data/train-images-idx3-ubyte.gz\n",
|
|
"WARNING:tensorflow:From /opt/conda/lib/python3.6/site-packages/tensorflow/contrib/learn/python/learn/datasets/mnist.py:267: extract_labels (from tensorflow.contrib.learn.python.learn.datasets.mnist) is deprecated and will be removed in a future version.\n",
|
|
"Instructions for updating:\n",
|
|
"Please use tf.data to implement this functionality.\n",
|
|
"Extracting MNIST_data/train-labels-idx1-ubyte.gz\n",
|
|
"WARNING:tensorflow:From /opt/conda/lib/python3.6/site-packages/tensorflow/contrib/learn/python/learn/datasets/mnist.py:110: dense_to_one_hot (from tensorflow.contrib.learn.python.learn.datasets.mnist) is deprecated and will be removed in a future version.\n",
|
|
"Instructions for updating:\n",
|
|
"Please use tf.one_hot on tensors.\n",
|
|
"Extracting MNIST_data/t10k-images-idx3-ubyte.gz\n",
|
|
"Extracting MNIST_data/t10k-labels-idx1-ubyte.gz\n",
|
|
"WARNING:tensorflow:From /opt/conda/lib/python3.6/site-packages/tensorflow/contrib/learn/python/learn/datasets/mnist.py:290: DataSet.__init__ (from tensorflow.contrib.learn.python.learn.datasets.mnist) is deprecated and will be removed in a future version.\n",
|
|
"Instructions for updating:\n",
|
|
"Please use alternatives such as official/mnist/dataset.py from tensorflow/models.\n"
|
|
]
|
|
}
|
|
],
|
|
"source": [
|
|
"sess.run(tf.global_variables_initializer())\n",
|
|
"mnist_data_set = input_data.read_data_sets(\"MNIST_data\", one_hot=True)"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 10,
|
|
"metadata": {},
|
|
"outputs": [
|
|
{
|
|
"name": "stdout",
|
|
"output_type": "stream",
|
|
"text": [
|
|
"Train Accuracy( 0.98 )>0.98 breaked.\n",
|
|
"Time: 114.19587898254395\n",
|
|
"Time: 114.19613695144653\n"
|
|
]
|
|
}
|
|
],
|
|
"source": [
|
|
"train_accuracy_list = []\n",
|
|
"train_accuracy_x = []\n",
|
|
"start_time = time.time()\n",
|
|
"for i in range(5000):\n",
|
|
" batch_xs, batch_ys = mnist_data_set.train.next_batch(200)\n",
|
|
" if i%2 == 0:\n",
|
|
" train_accuracy = accuracy.eval(feed_dict={x:batch_xs, y_:batch_ys})\n",
|
|
" # end_time = time.time()\n",
|
|
" train_accuracy_list.append(train_accuracy)\n",
|
|
" train_accuracy_x.append(i)\n",
|
|
" if 0.98<train_accuracy and i>500:\n",
|
|
" print(\"Train Accuracy(\", train_accuracy, \")>0.98 breaked.\\nTime:\", (time.time()-start_time))\n",
|
|
" break\n",
|
|
" # print(\"step %d, training accuracy %g\"%(i, train_accuracy))\n",
|
|
" # print(\"time:\", (end_time-start_time))\n",
|
|
" # start_time = end_time\n",
|
|
" # train_step.run(feed_dict={x:batch_xs, y_:batch_ys})\n",
|
|
" sess.run(train_step, feed_dict={x:batch_xs, y_:batch_ys})\n",
|
|
"\n",
|
|
"print(\"Time:\", (time.time()-start_time))"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 11,
|
|
"metadata": {},
|
|
"outputs": [
|
|
{
|
|
"data": {
|
|
"text/plain": [
|
|
"'./model/p11-10-LeNet.ckpt'"
|
|
]
|
|
},
|
|
"execution_count": 11,
|
|
"metadata": {},
|
|
"output_type": "execute_result"
|
|
}
|
|
],
|
|
"source": [
|
|
"tf.train.Saver().save(sess, \"./model/p11-10-LeNet.ckpt\")"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 12,
|
|
"metadata": {},
|
|
"outputs": [
|
|
{
|
|
"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": [
|
|
"pylab.plot(train_accuracy_x, train_accuracy_list)\n",
|
|
"pylab.show()"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 13,
|
|
"metadata": {},
|
|
"outputs": [
|
|
{
|
|
"name": "stdout",
|
|
"output_type": "stream",
|
|
"text": [
|
|
"Time: 0.04697465896606445\n",
|
|
"Test: [0 5 4 8 3 1 8 1 5 2 3 5 8 9 5 5 8 9 8 5 0 5 8 4 1 2 9 3 1 7 0 5 5 3 1]\n",
|
|
"Real: [0 5 4 8 3 1 8 1 5 2 3 5 8 9 8 5 8 9 8 5 0 5 8 4 6 3 9 3 1 7 0 5 5 3 1]\n"
|
|
]
|
|
}
|
|
],
|
|
"source": [
|
|
"start_time = time.time()\n",
|
|
"test = tf.argmax(y_conv,1)\n",
|
|
"tcorrect = tf.argmax(y_,1)\n",
|
|
"tbatch_xs, tbatch_ys = mnist_data_set.test.next_batch(35)\n",
|
|
"test_out = test.eval(feed_dict={x:tbatch_xs})\n",
|
|
"print(\"Time:\", (time.time()-start_time))\n",
|
|
"print(\"Test:\", test_out)\n",
|
|
"print(\"Real:\", tcorrect.eval(feed_dict={y_:tbatch_ys}))"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": null,
|
|
"metadata": {},
|
|
"outputs": [],
|
|
"source": [
|
|
"sess.close()"
|
|
]
|
|
}
|
|
],
|
|
"metadata": {
|
|
"kernelspec": {
|
|
"display_name": "Python 3",
|
|
"language": "python",
|
|
"name": "python3"
|
|
},
|
|
"language_info": {
|
|
"codemirror_mode": {
|
|
"name": "ipython",
|
|
"version": 3
|
|
},
|
|
"file_extension": ".py",
|
|
"mimetype": "text/x-python",
|
|
"name": "python",
|
|
"nbconvert_exporter": "python",
|
|
"pygments_lexer": "ipython3",
|
|
"version": "3.6.7"
|
|
}
|
|
},
|
|
"nbformat": 4,
|
|
"nbformat_minor": 2
|
|
}
|