Keras mnist dataset으로 변경

This commit is contained in:
rickiepark
2018-05-20 23:09:27 +09:00
parent 17bc85ff54
commit 3ae60bc7c9
4 changed files with 186 additions and 87 deletions

View File

@@ -274,6 +274,42 @@
"MNIST 데이터셋을 사용합니다:"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"주의: `tf.examples.tutorials.mnist`은 삭제될 예정이므로 대신 `tf.keras.datasets.mnist`를 사용하겠습니다."
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"(X_train, y_train), (X_test, y_test) = tf.keras.datasets.mnist.load_data()\n",
"X_train = X_train.astype(np.float32).reshape(-1, 28*28) / 255.0\n",
"X_test = X_test.astype(np.float32).reshape(-1, 28*28) / 255.0\n",
"y_train = y_train.astype(np.int32)\n",
"y_test = y_test.astype(np.int32)\n",
"X_valid, X_train = X_train[:5000], X_train[5000:]\n",
"y_valid, y_train = y_train[:5000], y_train[5000:]"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"def shuffle_batch(X, y, batch_size):\n",
" rnd_idx = np.random.permutation(len(X))\n",
" n_batches = len(X) // batch_size\n",
" for batch_idx in np.array_split(rnd_idx, n_batches):\n",
" X_batch, y_batch = X[batch_idx], y[batch_idx]\n",
" yield X_batch, y_batch"
]
},
{
"cell_type": "code",
"execution_count": 10,
@@ -291,10 +327,8 @@
}
],
"source": [
"tf.logging.set_verbosity(tf.logging.ERROR) # deprecated 경고 메세지를 출력하지 않기 위해 \n",
"from tensorflow.examples.tutorials.mnist import input_data\n",
"mnist = input_data.read_data_sets(\"/tmp/data/\")\n",
"tf.logging.set_verbosity(tf.logging.INFO)"
"# from tensorflow.examples.tutorials.mnist import input_data\n",
"# mnist = input_data.read_data_sets(\"/tmp/data/\")"
]
},
{
@@ -389,14 +423,14 @@
"with tf.Session() as sess:\n",
" init.run()\n",
" for epoch in range(n_epochs):\n",
" n_batches = mnist.train.num_examples // batch_size\n",
" n_batches = len(X_train) // batch_size\n",
" for iteration in range(n_batches):\n",
" print(\"\\r{}%\".format(100 * iteration // n_batches), end=\"\") # 책에는 없음\n",
" sys.stdout.flush() # 책에는 없음\n",
" X_batch, y_batch = mnist.train.next_batch(batch_size)\n",
" X_batch, y_batch = shuffle_batch(X_train, y_train, batch_size):\n",
" sess.run(training_op, feed_dict={X: X_batch})\n",
" loss_train = reconstruction_loss.eval(feed_dict={X: X_batch}) # 책에는 없음\n",
" print(\"\\r{}\".format(epoch), \"훈련 MSE:\", loss_train) # 책에는 없음\n",
" print(\"\\r{}\".format(epoch), \"훈련 MSE:\", loss_train) # 책에는 없음\n",
" saver.save(sess, \"./my_model_all_layers.ckpt\") # 책에는 없음"
]
},
@@ -417,8 +451,8 @@
" with tf.Session() as sess:\n",
" if model_path:\n",
" saver.restore(sess, model_path)\n",
" X_test = mnist.test.images[:n_test_digits]\n",
" outputs_val = outputs.eval(feed_dict={X: X_test})\n",
"# X_test = mnist.test.images[:n_test_digits]\n",
" outputs_val = outputs.eval(feed_dict={X: X_test[:n_test_digits]})\n",
"\n",
" fig = plt.figure(figsize=(8, 3 * n_test_digits))\n",
" for digit_index in range(n_test_digits):\n",
@@ -432,7 +466,7 @@
"cell_type": "code",
"execution_count": 14,
"metadata": {
"scrolled": true
"scrolled": false
},
"outputs": [
{
@@ -563,11 +597,11 @@
"with tf.Session() as sess:\n",
" init.run()\n",
" for epoch in range(n_epochs):\n",
" n_batches = mnist.train.num_examples // batch_size\n",
" n_batches = len(X_train) // batch_size\n",
" for iteration in range(n_batches):\n",
" print(\"\\r{}%\".format(100 * iteration // n_batches), end=\"\")\n",
" sys.stdout.flush()\n",
" X_batch, y_batch = mnist.train.next_batch(batch_size)\n",
" X_batch, y_batch = shuffle_batch(X_train, y_train, batch_size):s\n",
" sess.run(training_op, feed_dict={X: X_batch})\n",
" loss_train = reconstruction_loss.eval(feed_dict={X: X_batch})\n",
" print(\"\\r{}\".format(epoch), \"훈련 MSE:\", loss_train)\n",
@@ -707,7 +741,7 @@
}
],
"source": [
"hidden_output, W1, b1, W4, b4 = train_autoencoder(mnist.train.images, n_neurons=300, n_epochs=4, batch_size=150,\n",
"hidden_output, W1, b1, W4, b4 = train_autoencoder(X_train, n_neurons=300, n_epochs=4, batch_size=150,\n",
" output_activation=None)\n",
"_, W2, b2, W3, b3 = train_autoencoder(hidden_output, n_neurons=150, n_epochs=4, batch_size=150)"
]
@@ -883,16 +917,16 @@
" for phase in range(2):\n",
" print(\"훈련 단계 #{}\".format(phase + 1))\n",
" for epoch in range(n_epochs[phase]):\n",
" n_batches = mnist.train.num_examples // batch_sizes[phase]\n",
" n_batches = len(X_train) // batch_sizes[phase]\n",
" for iteration in range(n_batches):\n",
" print(\"\\r{}%\".format(100 * iteration // n_batches), end=\"\")\n",
" sys.stdout.flush()\n",
" X_batch, y_batch = mnist.train.next_batch(batch_sizes[phase])\n",
" X_batch, y_batch = shuffle_batch(X_train, y_train, batch_sizes[phase]):\n",
" sess.run(training_ops[phase], feed_dict={X: X_batch})\n",
" loss_train = reconstruction_losses[phase].eval(feed_dict={X: X_batch})\n",
" print(\"\\r{}\".format(epoch), \"훈련 MSE:\", loss_train)\n",
" saver.save(sess, \"./my_model_one_at_a_time.ckpt\")\n",
" loss_test = reconstruction_loss.eval(feed_dict={X: mnist.test.images})\n",
" loss_test = reconstruction_loss.eval(feed_dict={X: X_test})\n",
" print(\"테스트 MSE:\", loss_test)"
]
},
@@ -939,25 +973,25 @@
" for phase in range(2):\n",
" print(\"훈련 단계 #{}\".format(phase + 1))\n",
" if phase == 1:\n",
" hidden1_cache = hidden1.eval(feed_dict={X: mnist.train.images})\n",
" hidden1_cache = hidden1.eval(feed_dict={X: X_train})\n",
" for epoch in range(n_epochs[phase]):\n",
" n_batches = mnist.train.num_examples // batch_sizes[phase]\n",
" n_batches = len(X_train) // batch_sizes[phase]\n",
" for iteration in range(n_batches):\n",
" print(\"\\r{}%\".format(100 * iteration // n_batches), end=\"\")\n",
" sys.stdout.flush()\n",
" if phase == 1:\n",
" indices = rnd.permutation(mnist.train.num_examples)\n",
" indices = rnd.permutation(len(X_train))\n",
" hidden1_batch = hidden1_cache[indices[:batch_sizes[phase]]]\n",
" feed_dict = {hidden1: hidden1_batch}\n",
" sess.run(training_ops[phase], feed_dict=feed_dict)\n",
" else:\n",
" X_batch, y_batch = mnist.train.next_batch(batch_sizes[phase])\n",
" X_batch, y_batch = shuffle_batch(X_train, y_train, batch_sizes[phase]):\n",
" feed_dict = {X: X_batch}\n",
" sess.run(training_ops[phase], feed_dict=feed_dict)\n",
" loss_train = reconstruction_losses[phase].eval(feed_dict=feed_dict)\n",
" print(\"\\r{}\".format(epoch), \"훈련 MSE:\", loss_train)\n",
" saver.save(sess, \"./my_model_cache_frozen.ckpt\")\n",
" loss_test = reconstruction_loss.eval(feed_dict={X: mnist.test.images})\n",
" loss_test = reconstruction_loss.eval(feed_dict={X: X_test})\n",
" print(\"테스트 MSE:\", loss_test)"
]
},
@@ -993,11 +1027,11 @@
],
"source": [
"n_test_digits = 2\n",
"X_test = mnist.test.images[:n_test_digits]\n",
"# X_test = mnist.test.images[:n_test_digits]\n",
"\n",
"with tf.Session() as sess:\n",
" saver.restore(sess, \"./my_model_one_at_a_time.ckpt\") # not shown in the book\n",
" outputs_val = outputs.eval(feed_dict={X: X_test})\n",
" outputs_val = outputs.eval(feed_dict={X: X_test[:n_test_digits]})\n",
"\n",
"def plot_image(image, shape=[28, 28]):\n",
" plt.imshow(image.reshape(shape), cmap=\"Greys\", interpolation=\"nearest\")\n",
@@ -1156,13 +1190,13 @@
" print(\"\\r{}%\".format(100 * iteration // n_batches), end=\"\")\n",
" sys.stdout.flush()\n",
" indices = rnd.permutation(n_labeled_instances)[:batch_size]\n",
" X_batch, y_batch = mnist.train.images[indices], mnist.train.labels[indices]\n",
" X_batch, y_batch = X_train[indices], y_train[indices]\n",
" sess.run(training_op, feed_dict={X: X_batch, y: y_batch})\n",
" accuracy_val = accuracy.eval(feed_dict={X: X_batch, y: y_batch})\n",
" print(\"\\r{}\".format(epoch), \"훈련 정확도:\", accuracy_val, end=\" \")\n",
" print(\"\\r{}\".format(epoch), \"검증 세트 정확도:\", accuracy_val, end=\" \")\n",
" saver.save(sess, \"./my_model_supervised.ckpt\")\n",
" accuracy_val = accuracy.eval(feed_dict={X: mnist.test.images, y: mnist.test.labels})\n",
" print(\"테스트 정확도:\", accuracy_val)"
" test_val = accuracy.eval(feed_dict={X: X_test, y: y_test})\n",
" print(\"테스트 정확도:\", test_val)"
]
},
{
@@ -1205,13 +1239,13 @@
" print(\"\\r{}%\".format(100 * iteration // n_batches), end=\"\")\n",
" sys.stdout.flush()\n",
" indices = rnd.permutation(n_labeled_instances)[:batch_size]\n",
" X_batch, y_batch = mnist.train.images[indices], mnist.train.labels[indices]\n",
" X_batch, y_batch = X_train[indices], y_train[indices]\n",
" sess.run(training_op, feed_dict={X: X_batch, y: y_batch})\n",
" accuracy_val = accuracy.eval(feed_dict={X: X_batch, y: y_batch})\n",
" print(\"\\r{}\".format(epoch), \"훈련 정확도:\", accuracy_val, end=\"\\t\")\n",
" saver.save(sess, \"./my_model_supervised_pretrained.ckpt\")\n",
" accuracy_val = accuracy.eval(feed_dict={X: mnist.test.images, y: mnist.test.labels})\n",
" print(\"테스트 정확도:\", accuracy_val)"
" test_val = accuracy.eval(feed_dict={X: X_test, y: y_test})\n",
" print(\"테스트 정확도:\", test_val)"
]
},
{
@@ -1309,11 +1343,11 @@
"with tf.Session() as sess:\n",
" init.run()\n",
" for epoch in range(n_epochs):\n",
" n_batches = mnist.train.num_examples // batch_size\n",
" n_batches = len(X_train) // batch_size\n",
" for iteration in range(n_batches):\n",
" print(\"\\r{}%\".format(100 * iteration // n_batches), end=\"\")\n",
" sys.stdout.flush()\n",
" X_batch, y_batch = mnist.train.next_batch(batch_size)\n",
" X_batch, y_batch = shuffle_batch(X_train, y_train, batch_size):\n",
" sess.run(training_op, feed_dict={X: X_batch})\n",
" loss_train = reconstruction_loss.eval(feed_dict={X: X_batch})\n",
" print(\"\\r{}\".format(epoch), \"훈련 MSE:\", loss_train)\n",
@@ -1410,11 +1444,11 @@
"with tf.Session() as sess:\n",
" init.run()\n",
" for epoch in range(n_epochs):\n",
" n_batches = mnist.train.num_examples // batch_size\n",
" n_batches = len(X_train) // batch_size\n",
" for iteration in range(n_batches):\n",
" print(\"\\r{}%\".format(100 * iteration // n_batches), end=\"\")\n",
" sys.stdout.flush()\n",
" X_batch, y_batch = mnist.train.next_batch(batch_size)\n",
" X_batch, y_batch = shuffle_batch(X_train, y_train, batch_size):\n",
" sess.run(training_op, feed_dict={X: X_batch, training: True})\n",
" loss_train = reconstruction_loss.eval(feed_dict={X: X_batch})\n",
" print(\"\\r{}\".format(epoch), \"훈련 MSE:\", loss_train)\n",
@@ -1657,11 +1691,11 @@
"with tf.Session() as sess:\n",
" init.run()\n",
" for epoch in range(n_epochs):\n",
" n_batches = mnist.train.num_examples // batch_size\n",
" n_batches = len(X_train) // batch_size\n",
" for iteration in range(n_batches):\n",
" print(\"\\r{}%\".format(100 * iteration // n_batches), end=\"\")\n",
" sys.stdout.flush()\n",
" X_batch, y_batch = mnist.train.next_batch(batch_size)\n",
" X_batch, y_batch = shuffle_batch(X_train, y_train, batch_size):\n",
" sess.run(training_op, feed_dict={X: X_batch})\n",
" reconstruction_loss_val, sparsity_loss_val, loss_val = sess.run([reconstruction_loss, sparsity_loss, loss], feed_dict={X: X_batch})\n",
" print(\"\\r{}\".format(epoch), \"훈련 MSE:\", reconstruction_loss_val, \"\\t희소 손실:\", sparsity_loss_val, \"\\t전체 손실:\", loss_val)\n",
@@ -1876,11 +1910,11 @@
"with tf.Session() as sess:\n",
" init.run()\n",
" for epoch in range(n_epochs):\n",
" n_batches = mnist.train.num_examples // batch_size\n",
" n_batches = len(X_train) // batch_size\n",
" for iteration in range(n_batches):\n",
" print(\"\\r{}%\".format(100 * iteration // n_batches), end=\"\")\n",
" sys.stdout.flush()\n",
" X_batch, y_batch = mnist.train.next_batch(batch_size)\n",
" X_batch, y_batch = shuffle_batch(X_train, y_train, batch_size):\n",
" sess.run(training_op, feed_dict={X: X_batch})\n",
" loss_val, reconstruction_loss_val, latent_loss_val = sess.run([loss, reconstruction_loss, latent_loss], feed_dict={X: X_batch})\n",
" print(\"\\r{}\".format(epoch), \"훈련 전체 손실:\", loss_val, \"\\t재구성 손실:\", reconstruction_loss_val, \"\\t잠재 손실:\", latent_loss_val)\n",
@@ -2023,11 +2057,11 @@
"with tf.Session() as sess:\n",
" init.run()\n",
" for epoch in range(n_epochs):\n",
" n_batches = mnist.train.num_examples // batch_size\n",
" n_batches = len(X_train) // batch_size\n",
" for iteration in range(n_batches):\n",
" print(\"\\r{}%\".format(100 * iteration // n_batches), end=\"\") # not shown in the book\n",
" sys.stdout.flush() # not shown\n",
" X_batch, y_batch = mnist.train.next_batch(batch_size)\n",
" X_batch, y_batch = shuffle_batch(X_train, y_train, batch_size):\n",
" sess.run(training_op, feed_dict={X: X_batch})\n",
" loss_val, reconstruction_loss_val, latent_loss_val = sess.run([loss, reconstruction_loss, latent_loss], feed_dict={X: X_batch}) # not shown\n",
" print(\"\\r{}\".format(epoch), \"훈련 전체 손실:\", loss_val, \"\\t재구성 손실:\", reconstruction_loss_val, \"\\t잠재 손실:\", latent_loss_val) # not shown\n",
@@ -2130,12 +2164,13 @@
],
"source": [
"n_digits = 3\n",
"X_test, y_test = mnist.test.next_batch(batch_size)\n",
"# X_test, y_test = mnist.test.next_batch(batch_size)\n",
"X_test_batch, y_test_batch = shuffle_batch(X_test, y_test, batch_size):\n",
"codings = hidden3\n",
"\n",
"with tf.Session() as sess:\n",
" saver.restore(sess, \"./my_model_variational.ckpt\")\n",
" codings_val = codings.eval(feed_dict={X: X_test})"
" codings_val = codings.eval(feed_dict={X: X_test_batch})"
]
},
{
@@ -2191,7 +2226,7 @@
"fig = plt.figure(figsize=(8, 2.5 * n_digits))\n",
"for iteration in range(n_digits):\n",
" plt.subplot(n_digits, 2, 1 + 2 * iteration)\n",
" plot_image(X_test[iteration])\n",
" plot_image(X_test_batch[iteration])\n",
" plt.subplot(n_digits, 2, 2 + 2 * iteration)\n",
" plot_image(outputs_val[iteration])"
]
@@ -2307,7 +2342,7 @@
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.5.5"
"version": "3.6.5"
},
"nav_menu": {
"height": "381px",