{"nbformat":4,"nbformat_minor":0,"metadata":{"colab":{"name":"08_대표적 비지도 학습법Autoencoder.ipynb","provenance":[],"collapsed_sections":[]},"kernelspec":{"name":"python3","display_name":"Python 3"}},"cells":[{"cell_type":"markdown","metadata":{"id":"F-132lLltG57","colab_type":"text"},"source":["#비지도 학습\n","오토 인코더"]},{"cell_type":"markdown","metadata":{"id":"jDTJotAwtO7F","colab_type":"text"},"source":["변이형 오토 인코더, 잡음 제거 오토 인코더"]},{"cell_type":"code","metadata":{"id":"TMDnP8RQs99a","colab_type":"code","colab":{"base_uri":"https://localhost:8080/","height":63},"outputId":"2993b292-1d25-4d39-8ae0-bb600d7ec45b","executionInfo":{"status":"ok","timestamp":1573530215586,"user_tz":-540,"elapsed":2754,"user":{"displayName":"Yoon Jack","photoUrl":"","userId":"04923927567667044980"}}},"source":["import tensorflow as tf\n","import numpy as np\n","import matplotlib.pyplot as plt"],"execution_count":1,"outputs":[{"output_type":"display_data","data":{"text/html":["

\n","The default version of TensorFlow in Colab will soon switch to TensorFlow 2.x.
\n","We recommend you upgrade now \n","or ensure your notebook will continue to use TensorFlow 1.x via the %tensorflow_version 1.x magic:\n","more info.

\n"],"text/plain":[""]},"metadata":{"tags":[]}}]},{"cell_type":"code","metadata":{"id":"s0wTZyKPtYN4","colab_type":"code","colab":{"base_uri":"https://localhost:8080/","height":552},"outputId":"25b02980-8b2f-4448-a446-aedf2a7ea913","executionInfo":{"status":"ok","timestamp":1573530269994,"user_tz":-540,"elapsed":1977,"user":{"displayName":"Yoon Jack","photoUrl":"","userId":"04923927567667044980"}}},"source":["from tensorflow.examples.tutorials.mnist import input_data\n","mnist = input_data.read_data_sets(\"./mnist/data/\", one_hot = True)"],"execution_count":2,"outputs":[{"output_type":"stream","text":["WARNING:tensorflow:From :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 /usr/local/lib/python3.6/dist-packages/tensorflow_core/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 /usr/local/lib/python3.6/dist-packages/tensorflow_core/contrib/learn/python/learn/datasets/base.py:252: _internal_retry..wrap..wrapped_fn (from tensorflow.contrib.learn.python.learn.datasets.base) is deprecated and will be removed in a future version.\n","Instructions for updating:\n","Please use urllib or similar directly.\n","Successfully downloaded train-images-idx3-ubyte.gz 9912422 bytes.\n","WARNING:tensorflow:From /usr/local/lib/python3.6/dist-packages/tensorflow_core/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","Successfully downloaded train-labels-idx1-ubyte.gz 28881 bytes.\n","WARNING:tensorflow:From /usr/local/lib/python3.6/dist-packages/tensorflow_core/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 /usr/local/lib/python3.6/dist-packages/tensorflow_core/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","Successfully downloaded t10k-images-idx3-ubyte.gz 1648877 bytes.\n","Extracting ./mnist/data/t10k-images-idx3-ubyte.gz\n","Successfully downloaded t10k-labels-idx1-ubyte.gz 4542 bytes.\n","Extracting ./mnist/data/t10k-labels-idx1-ubyte.gz\n","WARNING:tensorflow:From /usr/local/lib/python3.6/dist-packages/tensorflow_core/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"],"name":"stdout"}]},{"cell_type":"code","metadata":{"id":"tWESEE3YtnC0","colab_type":"code","colab":{}},"source":["# 하이퍼 파라미터 분리\n","learning_rate = 0.01\n","training_epoch = 20\n","batch_size = 100\n","n_hidden = 256\n","n_input = 28 * 28"],"execution_count":0,"outputs":[]},{"cell_type":"code","metadata":{"id":"ri2dixxgtxz9","colab_type":"code","colab":{}},"source":["# 비지도 학습이므로 Y값이 존재 하지 않는다.\n","X = tf.placeholder(tf.float32, [None, n_input])"],"execution_count":0,"outputs":[]},{"cell_type":"markdown","metadata":{"id":"yk7Uv0SjuBjh","colab_type":"text"},"source":["인코더와 디코더 제작"]},{"cell_type":"code","metadata":{"id":"ROXmQQ1mt-eh","colab_type":"code","colab":{}},"source":["#인코더\n","W_encode = tf.Variable(tf.random_normal([n_input, n_hidden]))\n","b_encode = tf.Variable(tf.random_normal([n_hidden]))\n","\n","encoder = tf.nn.sigmoid(\n"," tf.add(tf.matmul(X, W_encode), b_encode)\n",")"],"execution_count":0,"outputs":[]},{"cell_type":"code","metadata":{"id":"fqBkxbtLuaCL","colab_type":"code","colab":{}},"source":["#디코더\n","W_decode = tf.Variable(tf.random_normal([n_hidden, n_input]))\n","b_decode = tf.Variable(tf.random_normal([n_input]))\n","\n","decoder = tf.nn.sigmoid(\n"," tf.add(tf.matmul(encoder, W_decode), b_decode)\n",")"],"execution_count":0,"outputs":[]},{"cell_type":"markdown","metadata":{"id":"ubOnH3fku4sd","colab_type":"text"},"source":["입력층(784) - 은닉층(256) - 출력층(784) 제작"]},{"cell_type":"code","metadata":{"id":"kywP7maeu1Z_","colab_type":"code","colab":{}},"source":["# 비용함수 : 거리함수로 계산\n","cost = tf.reduce_mean(tf.pow(X - decoder, 2))"],"execution_count":0,"outputs":[]},{"cell_type":"code","metadata":{"id":"2wRHIN0tvHdF","colab_type":"code","colab":{"base_uri":"https://localhost:8080/","height":123},"outputId":"d76d6985-9f9d-4214-fdcb-7f19ca6d5be5","executionInfo":{"status":"ok","timestamp":1573530736831,"user_tz":-540,"elapsed":911,"user":{"displayName":"Yoon Jack","photoUrl":"","userId":"04923927567667044980"}}},"source":["# RMSPropOptimizer\n","optimizer = tf.train.RMSPropOptimizer(learning_rate).minimize(cost)"],"execution_count":11,"outputs":[{"output_type":"stream","text":["WARNING:tensorflow:From /usr/local/lib/python3.6/dist-packages/tensorflow_core/python/ops/math_grad.py:1375: where (from tensorflow.python.ops.array_ops) is deprecated and will be removed in a future version.\n","Instructions for updating:\n","Use tf.where in 2.0, which has the same broadcast rule as np.where\n","WARNING:tensorflow:From /usr/local/lib/python3.6/dist-packages/tensorflow_core/python/training/rmsprop.py:119: calling Ones.__init__ (from tensorflow.python.ops.init_ops) with dtype is deprecated and will be removed in a future version.\n","Instructions for updating:\n","Call initializer instance with the dtype argument instead of passing it to the constructor\n"],"name":"stdout"}]},{"cell_type":"code","metadata":{"id":"XLLJ90K0vZTq","colab_type":"code","colab":{"base_uri":"https://localhost:8080/","height":390},"outputId":"f655f5d0-7b68-43c2-bb58-94613bedb40b","executionInfo":{"status":"ok","timestamp":1573531049369,"user_tz":-540,"elapsed":88442,"user":{"displayName":"Yoon Jack","photoUrl":"","userId":"04923927567667044980"}}},"source":["init = tf.global_variables_initializer()\n","sess= tf.Session()\n","sess.run(init)\n","\n","total_batch = int(mnist.train.num_examples / batch_size)\n","\n","for epoch in range(training_epoch):\n"," total_cost = 0\n","\n"," for i in range(total_batch):\n"," batch_xs, batch_ys = mnist.train.next_batch(batch_size)\n"," _,cost_val = sess.run([optimizer, cost], feed_dict = {X: batch_xs})\n"," total_cost += cost_val\n","\n"," print('Epoch : ', '%04d' % (epoch + 1),\n"," 'Avg. cost : ', '{:.4f}'.format(total_cost / total_batch))\n","print('---최적화 완료---')"],"execution_count":12,"outputs":[{"output_type":"stream","text":["Epoch : 0001 Avg. cost : 0.1961\n","Epoch : 0002 Avg. cost : 0.0554\n","Epoch : 0003 Avg. cost : 0.0476\n","Epoch : 0004 Avg. cost : 0.0430\n","Epoch : 0005 Avg. cost : 0.0395\n","Epoch : 0006 Avg. cost : 0.0382\n","Epoch : 0007 Avg. cost : 0.0355\n","Epoch : 0008 Avg. cost : 0.0345\n","Epoch : 0009 Avg. cost : 0.0323\n","Epoch : 0010 Avg. cost : 0.0312\n","Epoch : 0011 Avg. cost : 0.0308\n","Epoch : 0012 Avg. cost : 0.0304\n","Epoch : 0013 Avg. cost : 0.0299\n","Epoch : 0014 Avg. cost : 0.0282\n","Epoch : 0015 Avg. cost : 0.0275\n","Epoch : 0016 Avg. cost : 0.0262\n","Epoch : 0017 Avg. cost : 0.0258\n","Epoch : 0018 Avg. cost : 0.0255\n","Epoch : 0019 Avg. cost : 0.0253\n","Epoch : 0020 Avg. cost : 0.0252\n","---최적화 완료---\n"],"name":"stdout"}]},{"cell_type":"code","metadata":{"id":"dMngL5J3wQO1","colab_type":"code","colab":{}},"source":["sample_size = 10\n","samples = sess.run(decoder, feed_dict = {X: mnist.test.images[:sample_size]})"],"execution_count":0,"outputs":[]},{"cell_type":"code","metadata":{"id":"J81Sa-QSwtHY","colab_type":"code","colab":{"base_uri":"https://localhost:8080/","height":136},"outputId":"0a0b5943-7ffc-4773-f1fd-95afbe57e812","executionInfo":{"status":"ok","timestamp":1573531216209,"user_tz":-540,"elapsed":1234,"user":{"displayName":"Yoon Jack","photoUrl":"","userId":"04923927567667044980"}}},"source":["fig, ax = plt.subplots(2, sample_size, figsize = (sample_size, 2))\n","\n","for i in range(sample_size):\n"," ax[0][i].set_axis_off()\n"," ax[1][i].set_axis_off()\n"," ax[0][i].imshow(np.reshape(mnist.test.images[i], (28, 28)))\n"," ax[1][i].imshow(np.reshape(samples[i], (28, 28)))\n","\n","plt.show()"],"execution_count":15,"outputs":[{"output_type":"display_data","data":{"image/png":"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\n","text/plain":["
"]},"metadata":{"tags":[]}}]},{"cell_type":"code","metadata":{"id":"xpCh3FdVxMZi","colab_type":"code","colab":{}},"source":[""],"execution_count":0,"outputs":[]}]}