{ "cells": [ { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [], "source": [ "# 사용할 라이브러리 불러오기\n", "\n", "import tensorflow as tf\n", "import numpy as np\n", "import matplotlib.pyplot as plt" ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "'2.7.12 (default, Jan 4 2017, 21:04:22) \\n[GCC 4.2.1 Compatible Apple LLVM 8.0.0 (clang-800.0.42.1)]'" ] }, "execution_count": 2, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Python 버전 확인\n", "# 가능하면 Python 3를 사용하는 게 좋습니다.\n", "\n", "import sys\n", "\n", "sys.version" ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [], "source": [ "# Python 2에서 Python 3 기능 사용\n", "\n", "from __future__ import print_function" ] }, { "cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "'1.1.0'" ] }, "execution_count": 4, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# TensorFlow 버전 확인\n", "# 최신 버전은 1.3.0이지만 실습 환경은 1.1.0으로 구성되어 있습니다.\n", "\n", "tf.__version__" ] }, { "cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [], "source": [ "# MNIST 데이터 로딩\n", "\n", "import numpy as np\n", "\n", "with open('data/train-images-idx3-ubyte', 'rb') as f:\n", " x_train = np.frombuffer(f.read(), np.uint8, offset=16).reshape(-1, 28 * 28) / 255.0\n", "\n", "with open('data/train-labels-idx1-ubyte', 'rb') as f:\n", " y_train = np.frombuffer(f.read(), np.uint8, offset=8)\n", "\n", "with open('data/t10k-images-idx3-ubyte', 'rb') as f:\n", " x_test = np.frombuffer(f.read(), np.uint8, offset=16).reshape(-1, 28 * 28) / 255.0\n", "\n", "with open('data/t10k-labels-idx1-ubyte', 'rb') as f:\n", " y_test = np.frombuffer(f.read(), np.uint8, offset=8)" ] }, { "cell_type": "code", "execution_count": 6, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "((60000, 784), (60000,))" ] }, "execution_count": 6, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# 훈련 데이터 확인\n", "\n", "x_train.shape, y_train.shape" ] }, { "cell_type": "code", "execution_count": 7, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "((10000, 784), (10000,))" ] }, "execution_count": 7, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# 테스트 데이터 확인\n", "\n", "x_test.shape, y_test.shape" ] }, { "cell_type": "code", "execution_count": 8, "metadata": {}, "outputs": [ { "data": { "image/png": "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\nAABJRU5ErkJggg==\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "image/png": "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\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "# 손글씨 이미지 시각화\n", "\n", "def draw_image(images, labels):\n", " fig, axes = plt.subplots(1, images.shape[0])\n", " for i, ax in enumerate(axes.flat):\n", " ax.set_axis_off()\n", " ax.imshow(images[i].reshape(28, 28))\n", " ax.set_title(labels[i])\n", " plt.show()\n", "\n", "draw_image(x_train[:10], y_train[:10])\n", "\n", "draw_image(x_test[:10], y_test[:10])" ] }, { "cell_type": "code", "execution_count": 9, "metadata": {}, "outputs": [], "source": [ "# 훈련 데이터 배치로 분할\n", "\n", "batch_size = 1000\n", "\n", "sample_size = x_train.shape[0]\n", "batch_range = range(0, sample_size, batch_size)\n", "\n", "x_batches = [x_train[i:i + batch_size] for i in batch_range]\n", "y_batches = [y_train[i:i + batch_size] for i in batch_range]" ] }, { "cell_type": "code", "execution_count": 10, "metadata": {}, "outputs": [], "source": [ "# 신경망 모델 생성\n", "\n", "x = tf.placeholder(tf.float32, [None, 28 * 28])\n", "y = tf.placeholder(tf.int64, [None])\n", "\n", "u = tf.layers.dense(x, 10)\n", "z = tf.nn.softmax(u)" ] }, { "cell_type": "code", "execution_count": 11, "metadata": {}, "outputs": [], "source": [ "# 비용-최적화\n", "\n", "loss = tf.nn.softmax_cross_entropy_with_logits(\n", " logits=u, # softmax 적용 전!\n", " labels=tf.one_hot(y, 10) # one-hot encoding\n", ")\n", "\n", "learning_rate = 0.0001\n", "train = tf.train.AdamOptimizer(learning_rate).minimize(loss)" ] }, { "cell_type": "code", "execution_count": 12, "metadata": {}, "outputs": [], "source": [ "# 예측 및 정확도\n", "\n", "predict = tf.argmax(z, axis=1)\n", "\n", "correct = tf.equal(y, predict)\n", "accuracy = tf.reduce_mean(tf.cast(correct, tf.float32))" ] }, { "cell_type": "code", "execution_count": 13, "metadata": {}, "outputs": [], "source": [ "# TensorFlow 세션 준비\n", "\n", "session = tf.Session()\n", "session.run(tf.global_variables_initializer())" ] }, { "cell_type": "code", "execution_count": 14, "metadata": { "scrolled": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Epoch #1/10\n", "............................................................\n", "Test Accuracy: 0.26060000062\n", "\n", "Epoch #2/10\n", "............................................................\n", "Test Accuracy: 0.462999999523\n", "\n", "Epoch #3/10\n", "............................................................\n", "Test Accuracy: 0.608900010586\n", "\n", "Epoch #4/10\n", "............................................................\n", "Test Accuracy: 0.679499983788\n", "\n", "Epoch #5/10\n", "............................................................\n", "Test Accuracy: 0.721199989319\n", "\n", "Epoch #6/10\n", "............................................................\n", "Test Accuracy: 0.750899970531\n", "\n", "Epoch #7/10\n", "............................................................\n", "Test Accuracy: 0.77270001173\n", "\n", "Epoch #8/10\n", "............................................................\n", "Test Accuracy: 0.787400007248\n", "\n", "Epoch #9/10\n", "............................................................\n", "Test Accuracy: 0.800300002098\n", "\n", "Epoch #10/10\n", "............................................................\n", "Test Accuracy: 0.809599995613\n", "\n", "Done!\n" ] } ], "source": [ "# 반복\n", "\n", "num_epoch = 10\n", "\n", "test_feed = {\n", " x: x_test,\n", " y: y_test\n", "}\n", "\n", "for i in range(num_epoch):\n", " print('Epoch #{}/{}'.format(i + 1, num_epoch))\n", "\n", " # 훈련\n", " for x_data, y_data in zip(x_batches, y_batches):\n", " train_feed = {\n", " x: x_data,\n", " y: y_data\n", " }\n", " session.run(train, feed_dict=train_feed)\n", " print('.', end='')\n", " print()\n", "\n", " # 정확도\n", " test_accuracy = session.run(accuracy, feed_dict=test_feed)\n", " print('Test Accuracy: {}'.format(test_accuracy))\n", " print()\n", "\n", "print('Done!')" ] }, { "cell_type": "code", "execution_count": 15, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "# 오답 시각화\n", "\n", "p, c = session.run([predict, correct], feed_dict=test_feed)\n", "\n", "images = x_test[~c]\n", "labels = p[~c]\n", "\n", "draw_image(images[:10], labels[:10])" ] }, { "cell_type": "code", "execution_count": 16, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "(?, 28, 28, 1)\n", "(?, 14, 14, 4)\n", "(?, 7, 7, 8)\n", "(?, 392)\n", "(?, 200)\n", "(?, 10)\n" ] } ], "source": [ "# CNN 모델 생성\n", "\n", "tf.reset_default_graph()\n", "\n", "x = tf.placeholder(tf.float32, [None, 28 * 28])\n", "y = tf.placeholder(tf.int64, [None])\n", "keep_prob = tf.placeholder(tf.float32)\n", "\n", "x_2d = tf.reshape(x, [-1, 28, 28, 1])\n", "\n", "print(x_2d.shape)\n", "\n", "# 1단계\n", "\n", "c1 = tf.contrib.layers.conv2d(x_2d, 4, [5, 5])\n", "p1 = tf.contrib.layers.max_pool2d(c1, [2, 2])\n", "\n", "print(p1.shape)\n", "\n", "# 2단계\n", "\n", "c2 = tf.contrib.layers.conv2d(p1, 8, [5, 5])\n", "p2 = tf.contrib.layers.max_pool2d(c2, [2, 2])\n", "\n", "print(p2.shape)\n", "\n", "# Fully Connected\n", "\n", "flat = tf.contrib.layers.flatten(p2)\n", "\n", "print(flat.shape)\n", "\n", "fc = tf.contrib.layers.fully_connected(flat, 200)\n", "\n", "print(fc.shape)\n", "\n", "drop = tf.nn.dropout(fc, keep_prob)\n", "\n", "u = tf.layers.dense(drop, 10)\n", "z = tf.nn.softmax(u)\n", "\n", "print(z.shape)" ] }, { "cell_type": "code", "execution_count": 17, "metadata": {}, "outputs": [], "source": [ "# 비용-최적화\n", "\n", "loss = tf.nn.softmax_cross_entropy_with_logits(\n", " logits=u, # softmax 적용 전!\n", " labels=tf.one_hot(y, 10) # one-hot encoding\n", ")\n", "\n", "learning_rate = 0.0001\n", "train = tf.train.AdamOptimizer(learning_rate).minimize(loss)" ] }, { "cell_type": "code", "execution_count": 18, "metadata": {}, "outputs": [], "source": [ "# 예측 및 정확도\n", "\n", "predict = tf.argmax(z, axis=1)\n", "\n", "correct = tf.equal(y, predict)\n", "accuracy = tf.reduce_mean(tf.cast(correct, tf.float32))" ] }, { "cell_type": "code", "execution_count": 19, "metadata": {}, "outputs": [], "source": [ "# TensorFlow 세션 준비\n", "\n", "session = tf.Session()\n", "session.run(tf.global_variables_initializer())" ] }, { "cell_type": "code", "execution_count": 20, "metadata": { "scrolled": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Epoch #1/10\n", "............................................................\n", "Test Accuracy: 0.598299980164\n", "\n", "Epoch #2/10\n", "............................................................\n", "Test Accuracy: 0.767599999905\n", "\n", "Epoch #3/10\n", "............................................................\n", "Test Accuracy: 0.832300007343\n", "\n", "Epoch #4/10\n", "............................................................\n", "Test Accuracy: 0.865899980068\n", "\n", "Epoch #5/10\n", "............................................................\n", "Test Accuracy: 0.885800004005\n", "\n", "Epoch #6/10\n", "............................................................\n", "Test Accuracy: 0.900200009346\n", "\n", "Epoch #7/10\n", "............................................................\n", "Test Accuracy: 0.910499989986\n", "\n", "Epoch #8/10\n", "............................................................\n", "Test Accuracy: 0.919200003147\n", "\n", "Epoch #9/10\n", "............................................................\n", "Test Accuracy: 0.923500001431\n", "\n", "Epoch #10/10\n", "............................................................\n", "Test Accuracy: 0.929099977016\n", "\n", "Done!\n" ] } ], "source": [ "# 반복\n", "\n", "num_epoch = 10\n", "\n", "test_feed = {\n", " x: x_test,\n", " y: y_test,\n", " keep_prob: 1.0\n", "}\n", "\n", "for i in range(num_epoch):\n", " print('Epoch #{}/{}'.format(i + 1, num_epoch))\n", "\n", " # 훈련\n", " for x_data, y_data in zip(x_batches, y_batches):\n", " train_feed = {\n", " x: x_data,\n", " y: y_data,\n", " keep_prob: 0.5\n", " }\n", " session.run(train, feed_dict=train_feed)\n", " print('.', end='')\n", " print()\n", "\n", " # 정확도\n", " test_accuracy = session.run(accuracy, feed_dict=test_feed)\n", " print('Test Accuracy: {}'.format(test_accuracy))\n", " print()\n", "\n", "print('Done!')" ] }, { "cell_type": "code", "execution_count": 21, "metadata": {}, "outputs": [ { "data": { "image/png": "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\nTkGrfbZ+AAAAAElFTkSuQmCC\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "# 오답 시각화\n", "\n", "p, c = session.run([predict, correct], feed_dict=test_feed)\n", "\n", "images = x_test[~c]\n", "labels = p[~c]\n", "\n", "draw_image(images[:10], labels[:10])" ] }, { "cell_type": "code", "execution_count": 22, "metadata": { "scrolled": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "(?, 14, 28)\n", "(?, 200)\n", "(?, 2800)\n", "(?, 200)\n", "(?, 392)\n" ] } ], "source": [ "# RNN 모델 생성\n", "\n", "tf.reset_default_graph()\n", "\n", "x = tf.placeholder(tf.float32, [None, 14 * 28])\n", "y = tf.placeholder(tf.float32, [None, 14 * 28])\n", "\n", "inputs = tf.reshape(x, [-1, 14, 28])\n", "\n", "print(inputs.shape)\n", "\n", "# TensorFlow 1.2부터 지원하는 dynamic_rnn을 쓰시는 게 더 낫습니다.\n", "# https://www.tensorflow.org/versions/r1.2/api_docs/python/tf/nn/dynamic_rnn\n", "\n", "cell = tf.contrib.rnn.BasicLSTMCell(200)\n", "outputs, states = tf.contrib.rnn.static_rnn(\n", " cell,\n", " tf.unstack(inputs, axis=1), # Python 리스트로 변환\n", " dtype=tf.float32\n", ")\n", "\n", "print(outputs[0].shape)\n", "\n", "# Fully Connected\n", "\n", "output = tf.concat(outputs, axis=1)\n", "\n", "print(output.shape)\n", "\n", "fc = tf.contrib.layers.fully_connected(output, 200)\n", "\n", "print(fc.shape)\n", "\n", "u = tf.layers.dense(output, 14 * 28)\n", "z = tf.nn.sigmoid(u)\n", "\n", "print(z.shape)" ] }, { "cell_type": "code", "execution_count": 23, "metadata": {}, "outputs": [], "source": [ "# 비용-최적화\n", "\n", "loss = tf.nn.sigmoid_cross_entropy_with_logits(\n", " logits=u, # softmax 적용 전!\n", " labels=y\n", ")\n", "\n", "learning_rate = 0.0001\n", "train = tf.train.AdamOptimizer(learning_rate).minimize(loss)" ] }, { "cell_type": "code", "execution_count": 24, "metadata": {}, "outputs": [], "source": [ "# TensorFlow 세션 준비\n", "\n", "session = tf.Session()\n", "session.run(tf.global_variables_initializer())" ] }, { "cell_type": "code", "execution_count": 25, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Epoch #1/5\n", "............................................................\n", "Epoch #2/5\n", "............................................................\n", "Epoch #3/5\n", "............................................................\n", "Epoch #4/5\n", "............................................................\n", "Epoch #5/5\n", "............................................................\n", "Done!\n" ] } ], "source": [ "# 반복\n", "\n", "num_epoch = 5\n", "\n", "for i in range(num_epoch):\n", " print('Epoch #{}/{}'.format(i + 1, num_epoch))\n", "\n", " # 훈련\n", " for x_data in x_batches:\n", " train_feed = {\n", " x: x_data[:, :14 * 28],\n", " y: x_data[:, 14 * 28:]\n", " }\n", " session.run(train, feed_dict=train_feed)\n", " print('.', end='')\n", " print()\n", "\n", "print('Done!')" ] }, { "cell_type": "code", "execution_count": 26, "metadata": {}, "outputs": [ { "data": { "image/png": "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\nv9mQDDOvSVAAAAAASUVORK5CYII=\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "# 예측 및 시각화\n", "\n", "count = 8\n", "\n", "images1 = x_test[:count, :14 * 28]\n", "images2 = session.run(z, feed_dict={\n", " x: images1\n", "})\n", "\n", "images = np.concatenate([images1, images2], axis=1)\n", "\n", "draw_image(images, y_test[:count])" ] } ], "metadata": { "kernelspec": { "display_name": "Python 2", "language": "python", "name": "python2" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 2 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython2", "version": "2.7.12" } }, "nbformat": 4, "nbformat_minor": 2 }