From 17bc85ff54707d3a5974bacfe03c7be8cf9ff24b Mon Sep 17 00:00:00 2001 From: rickiepark Date: Sun, 20 May 2018 21:59:30 +0900 Subject: [PATCH] =?UTF-8?q?variance=5Fscaling=5Finitializer=20=EC=88=98?= =?UTF-8?q?=EC=A0=95,=20=ED=85=90=EC=84=9C=EB=B3=B4=EB=93=9C=20=EA=B7=B8?= =?UTF-8?q?=EB=9E=98=ED=94=84=20=EB=B6=84=EB=A6=AC,=20keras=20mnist=20?= =?UTF-8?q?=EC=A0=81=EC=9A=A9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- 11_deep_learning.ipynb | 274 ++++++++++++++----------------- 11_deep_learning_exercises.ipynb | 62 ++++--- 2 files changed, 158 insertions(+), 178 deletions(-) diff --git a/11_deep_learning.ipynb b/11_deep_learning.ipynb index 7e212c8..29b394c 100644 --- a/11_deep_learning.ipynb +++ b/11_deep_learning.ipynb @@ -186,7 +186,7 @@ "metadata": {}, "outputs": [], "source": [ - "he_init = tf.contrib.layers.variance_scaling_initializer()\n", + "he_init = tf.variance_scaling_initializer()\n", "hidden1 = tf.layers.dense(X, n_hidden1, activation=tf.nn.relu,\n", " kernel_initializer=he_init, name=\"hidden1\")" ] @@ -310,7 +310,7 @@ "outputs": [], "source": [ "X = tf.placeholder(tf.float32, shape=(None, n_inputs), name=\"X\")\n", - "y = tf.placeholder(tf.int64, shape=(None), name=\"y\")" + "y = tf.placeholder(tf.int32, shape=(None), name=\"y\")" ] }, { @@ -377,6 +377,42 @@ "데이터를 로드합니다:" ] }, + { + "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": 19, @@ -394,10 +430,8 @@ } ], "source": [ - "from tensorflow.examples.tutorials.mnist import input_data\n", - "tf.logging.set_verbosity(tf.logging.ERROR) # deprecated 경고 메세지를 출력하지 않기 위해 \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/\")" ] }, { @@ -429,13 +463,12 @@ "with tf.Session() as sess:\n", " init.run()\n", " for epoch in range(n_epochs):\n", - " for iteration in range(mnist.train.num_examples // batch_size):\n", - " X_batch, y_batch = mnist.train.next_batch(batch_size)\n", + " for X_batch, y_batch in shuffle_batch(X_train, y_train, batch_size):\n", " sess.run(training_op, feed_dict={X: X_batch, y: y_batch})\n", " if epoch % 5 == 0:\n", - " acc_train = accuracy.eval(feed_dict={X: X_batch, y: y_batch})\n", - " acc_test = accuracy.eval(feed_dict={X: mnist.validation.images, y: mnist.validation.labels})\n", - " print(epoch, \"배치 정확도:\", acc_train, \"검증 세트 정확도:\", acc_test)\n", + " acc_batch = accuracy.eval(feed_dict={X: X_batch, y: y_batch})\n", + " acc_valid = accuracy.eval(feed_dict={X: X_valid, y: y_valid})\n", + " print(epoch, \"배치 데이터 정확도:\", acc_batch, \"검증 세트 정확도:\", acc_valid)\n", "\n", " save_path = saver.save(sess, \"./my_model_final.ckpt\")" ] @@ -657,7 +690,7 @@ "n_outputs = 10\n", "\n", "X = tf.placeholder(tf.float32, shape=(None, n_inputs), name=\"X\")\n", - "y = tf.placeholder(tf.int64, shape=(None), name=\"y\")\n", + "y = tf.placeholder(tf.int32, shape=(None), name=\"y\")\n", "\n", "with tf.name_scope(\"dnn\"):\n", " hidden1 = tf.layers.dense(X, n_hidden1, activation=selu, name=\"hidden1\")\n", @@ -712,21 +745,20 @@ } ], "source": [ - "means = mnist.train.images.mean(axis=0, keepdims=True)\n", - "stds = mnist.train.images.std(axis=0, keepdims=True) + 1e-10\n", + "means = X_train.mean(axis=0, keepdims=True)\n", + "stds = X_train.std(axis=0, keepdims=True) + 1e-10\n", + "X_val_scaled = (X_valid - means) / stds\n", "\n", "with tf.Session() as sess:\n", " init.run()\n", " for epoch in range(n_epochs):\n", - " for iteration in range(mnist.train.num_examples // batch_size):\n", - " X_batch, y_batch = mnist.train.next_batch(batch_size)\n", + " for X_batch, y_batch in shuffle_batch(X_train, y_train, batch_size):\n", " X_batch_scaled = (X_batch - means) / stds\n", " sess.run(training_op, feed_dict={X: X_batch_scaled, y: y_batch})\n", " if epoch % 5 == 0:\n", - " acc_train = accuracy.eval(feed_dict={X: X_batch_scaled, y: y_batch})\n", - " X_val_scaled = (mnist.validation.images - means) / stds\n", - " acc_test = accuracy.eval(feed_dict={X: X_val_scaled, y: mnist.validation.labels})\n", - " print(epoch, \"배치 정확도:\", acc_train, \"검증 세트 정확도:\", acc_test)\n", + " acc_batch = accuracy.eval(feed_dict={X: X_batch_scaled, y: y_batch})\n", + " acc_valid = accuracy.eval(feed_dict={X: X_val_scaled, y: y_valid})\n", + " print(epoch, \"배치 데이터 정확도:\", acc_batch, \"검증 세트 정확도:\", acc_valid)\n", "\n", " save_path = saver.save(sess, \"./my_model_final_selu.ckpt\")" ] @@ -837,11 +869,11 @@ "batch_norm_momentum = 0.9\n", "\n", "X = tf.placeholder(tf.float32, shape=(None, n_inputs), name=\"X\")\n", - "y = tf.placeholder(tf.int64, shape=(None), name=\"y\")\n", + "y = tf.placeholder(tf.int32, shape=(None), name=\"y\")\n", "training = tf.placeholder_with_default(False, shape=(), name='training')\n", "\n", "with tf.name_scope(\"dnn\"):\n", - " he_init = tf.contrib.layers.variance_scaling_initializer()\n", + " he_init = tf.variance_scaling_initializer()\n", "\n", " my_batch_norm_layer = partial(\n", " tf.layers.batch_normalization,\n", @@ -930,13 +962,11 @@ "with tf.Session() as sess:\n", " init.run()\n", " for epoch in range(n_epochs):\n", - " for iteration in range(mnist.train.num_examples // batch_size):\n", - " X_batch, y_batch = mnist.train.next_batch(batch_size)\n", + " for X_batch, y_batch in shuffle_batch(X_train, y_train, batch_size):\n", " sess.run([training_op, extra_update_ops],\n", " feed_dict={training: True, X: X_batch, y: y_batch})\n", - " accuracy_val = accuracy.eval(feed_dict={X: mnist.test.images,\n", - " y: mnist.test.labels})\n", - " print(epoch, \"테스트 정확도:\", accuracy_val)\n", + " accuracy_val = accuracy.eval(feed_dict={X: X_valid, y: y_valid})\n", + " print(epoch, \"검증 세트 정확도:\", accuracy_val)\n", "\n", " save_path = saver.save(sess, \"./my_model_final.ckpt\")" ] @@ -1075,7 +1105,7 @@ "n_outputs = 10\n", "\n", "X = tf.placeholder(tf.float32, shape=(None, n_inputs), name=\"X\")\n", - "y = tf.placeholder(tf.int64, shape=(None), name=\"y\")\n", + "y = tf.placeholder(tf.int32, shape=(None), name=\"y\")\n", "\n", "with tf.name_scope(\"dnn\"):\n", " hidden1 = tf.layers.dense(X, n_hidden1, activation=tf.nn.relu, name=\"hidden1\")\n", @@ -1195,12 +1225,10 @@ "with tf.Session() as sess:\n", " init.run()\n", " for epoch in range(n_epochs):\n", - " for iteration in range(mnist.train.num_examples // batch_size):\n", - " X_batch, y_batch = mnist.train.next_batch(batch_size)\n", + " for X_batch, y_batch in shuffle_batch(X_train, y_train, batch_size):\n", " sess.run(training_op, feed_dict={X: X_batch, y: y_batch})\n", - " accuracy_val = accuracy.eval(feed_dict={X: mnist.test.images,\n", - " y: mnist.test.labels})\n", - " print(epoch, \"테스트 정확도:\", accuracy_val)\n", + " accuracy_val = accuracy.eval(feed_dict={X: X_valid, y: y_valid})\n", + " print(epoch, \"검증 세트 정확도:\", accuracy_val)\n", "\n", " save_path = saver.save(sess, \"./my_model_final.ckpt\")" ] @@ -1543,46 +1571,11 @@ }, { "cell_type": "code", - "execution_count": 49, + "execution_count": null, "metadata": {}, "outputs": [], "source": [ - "from IPython.display import clear_output, Image, display, HTML\n", - "\n", - "def strip_consts(graph_def, max_const_size=32):\n", - " \"\"\"Strip large constant values from graph_def.\"\"\"\n", - " strip_def = tf.GraphDef()\n", - " for n0 in graph_def.node:\n", - " n = strip_def.node.add() \n", - " n.MergeFrom(n0)\n", - " if n.op == 'Const':\n", - " tensor = n.attr['value'].tensor\n", - " size = len(tensor.tensor_content)\n", - " if size > max_const_size:\n", - " tensor.tensor_content = b\"\"%size\n", - " return strip_def\n", - "\n", - "def show_graph(graph_def, max_const_size=32):\n", - " \"\"\"Visualize TensorFlow graph.\"\"\"\n", - " if hasattr(graph_def, 'as_graph_def'):\n", - " graph_def = graph_def.as_graph_def()\n", - " strip_def = strip_consts(graph_def, max_const_size=max_const_size)\n", - " code = \"\"\"\n", - " \n", - " \n", - "
\n", - " \n", - "
\n", - " \"\"\".format(data=repr(str(strip_def)), id='graph'+str(np.random.rand()))\n", - "\n", - " iframe = \"\"\"\n", - " \n", - " \"\"\".format(code.replace('\"', '"'))\n", - " display(HTML(iframe))" + "from tensorflow_graph_in_jupyter import show_graph" ] }, { @@ -1744,12 +1737,10 @@ " saver.restore(sess, \"./my_model_final.ckpt\")\n", "\n", " for epoch in range(n_epochs):\n", - " for iteration in range(mnist.train.num_examples // batch_size):\n", - " X_batch, y_batch = mnist.train.next_batch(batch_size)\n", + " for X_batch, y_batch in shuffle_batch(X_train, y_train, batch_size):\n", " sess.run(training_op, feed_dict={X: X_batch, y: y_batch})\n", - " accuracy_val = accuracy.eval(feed_dict={X: mnist.test.images,\n", - " y: mnist.test.labels})\n", - " print(epoch, \"테스트 정확도:\", accuracy_val)\n", + " accuracy_val = accuracy.eval(feed_dict={X: X_valid, y: y_valid})\n", + " print(epoch, \"검증 세트 정확도:\", accuracy_val)\n", "\n", " save_path = saver.save(sess, \"./my_new_model_final.ckpt\") " ] @@ -1777,7 +1768,7 @@ "n_outputs = 10\n", "\n", "X = tf.placeholder(tf.float32, shape=(None, n_inputs), name=\"X\")\n", - "y = tf.placeholder(tf.int64, shape=(None), name=\"y\")\n", + "y = tf.placeholder(tf.int32, shape=(None), name=\"y\")\n", "\n", "with tf.name_scope(\"dnn\"):\n", " hidden1 = tf.layers.dense(X, n_hidden1, activation=tf.nn.relu, name=\"hidden1\")\n", @@ -1853,12 +1844,10 @@ " saver.restore(sess, \"./my_model_final.ckpt\")\n", "\n", " for epoch in range(n_epochs):\n", - " for iteration in range(mnist.train.num_examples // batch_size):\n", - " X_batch, y_batch = mnist.train.next_batch(batch_size)\n", + " for X_batch, y_batch in shuffle_batch(X_train, y_train, batch_size):\n", " sess.run(training_op, feed_dict={X: X_batch, y: y_batch})\n", - " accuracy_val = accuracy.eval(feed_dict={X: mnist.test.images,\n", - " y: mnist.test.labels})\n", - " print(epoch, \"테스트 정확도:\", accuracy_val)\n", + " accuracy_val = accuracy.eval(feed_dict={X: X_valid, y: y_valid})\n", + " print(epoch, \"검증 세트 정확도:\", accuracy_val)\n", "\n", " save_path = saver.save(sess, \"./my_new_model_final.ckpt\") " ] @@ -1953,12 +1942,10 @@ " saver.restore(sess, \"./my_model_final.ckpt\")\n", "\n", " for epoch in range(n_epochs):\n", - " for iteration in range(mnist.train.num_examples // batch_size):\n", - " X_batch, y_batch = mnist.train.next_batch(batch_size)\n", + " for X_batch, y_batch in shuffle_batch(X_train, y_train, batch_size):\n", " sess.run(training_op, feed_dict={X: X_batch, y: y_batch})\n", - " accuracy_val = accuracy.eval(feed_dict={X: mnist.test.images,\n", - " y: mnist.test.labels})\n", - " print(epoch, \"테스트 정확도:\", accuracy_val)\n", + " accuracy_val = accuracy.eval(feed_dict={X: X_valid, y: y_valid})\n", + " print(epoch, \"검증 세트 정확도:\", accuracy_val)\n", "\n", " save_path = new_saver.save(sess, \"./my_new_model_final.ckpt\")" ] @@ -1986,7 +1973,7 @@ "n_outputs = 10 # 새로 만듦!\n", "\n", "X = tf.placeholder(tf.float32, shape=(None, n_inputs), name=\"X\")\n", - "y = tf.placeholder(tf.int64, shape=(None), name=\"y\")\n", + "y = tf.placeholder(tf.int32, shape=(None), name=\"y\")\n", "\n", "with tf.name_scope(\"dnn\"):\n", " hidden1 = tf.layers.dense(X, n_hidden1, activation=tf.nn.relu, name=\"hidden1\") # 재사용\n", @@ -2060,13 +2047,11 @@ " init.run()\n", " restore_saver.restore(sess, \"./my_model_final.ckpt\")\n", "\n", - " for epoch in range(n_epochs): # 책에는 없음\n", - " for iteration in range(mnist.train.num_examples // batch_size): # 책에는 없음\n", - " X_batch, y_batch = mnist.train.next_batch(batch_size) # 책에는 없음\n", - " sess.run(training_op, feed_dict={X: X_batch, y: y_batch}) # 책에는 없음\n", - " accuracy_val = accuracy.eval(feed_dict={X: mnist.test.images, # 책에는 없음\n", - " y: mnist.test.labels}) # 책에는 없음\n", - " print(epoch, \"테스트 정확도:\", accuracy_val) # 책에는 없음\n", + " for epoch in range(n_epochs): # 책에는 없음\n", + " for X_batch, y_batch in shuffle_batch(X_train, y_train, batch_size): # 책에는 없음\n", + " sess.run(training_op, feed_dict={X: X_batch, y: y_batch}) # 책에는 없음\n", + " accuracy_val = accuracy.eval(feed_dict={X: X_valid, y: y_valid}) # 책에는 없음\n", + " print(epoch, \"검증 세트 정확도:\", accuracy_val) # 책에는 없음\n", "\n", " save_path = saver.save(sess, \"./my_new_model_final.ckpt\")" ] @@ -2285,7 +2270,7 @@ "n_outputs = 10 # 새로 만듦!\n", "\n", "X = tf.placeholder(tf.float32, shape=(None, n_inputs), name=\"X\")\n", - "y = tf.placeholder(tf.int64, shape=(None), name=\"y\")\n", + "y = tf.placeholder(tf.int32, shape=(None), name=\"y\")\n", "\n", "with tf.name_scope(\"dnn\"):\n", " hidden1 = tf.layers.dense(X, n_hidden1, activation=tf.nn.relu, name=\"hidden1\") # 재사용\n", @@ -2372,12 +2357,10 @@ " restore_saver.restore(sess, \"./my_model_final.ckpt\")\n", "\n", " for epoch in range(n_epochs):\n", - " for iteration in range(mnist.train.num_examples // batch_size):\n", - " X_batch, y_batch = mnist.train.next_batch(batch_size)\n", + " for X_batch, y_batch in shuffle_batch(X_train, y_train, batch_size):\n", " sess.run(training_op, feed_dict={X: X_batch, y: y_batch})\n", - " accuracy_val = accuracy.eval(feed_dict={X: mnist.test.images,\n", - " y: mnist.test.labels})\n", - " print(epoch, \"테스트 정확도:\", accuracy_val)\n", + " accuracy_val = accuracy.eval(feed_dict={X: X_valid, y: y_valid})\n", + " print(epoch, \"검증 세트 정확도:\", accuracy_val)\n", "\n", " save_path = saver.save(sess, \"./my_new_model_final.ckpt\")" ] @@ -2398,7 +2381,7 @@ "n_outputs = 10 # 새로 만듦!\n", "\n", "X = tf.placeholder(tf.float32, shape=(None, n_inputs), name=\"X\")\n", - "y = tf.placeholder(tf.int64, shape=(None), name=\"y\")" + "y = tf.placeholder(tf.int32, shape=(None), name=\"y\")" ] }, { @@ -2492,12 +2475,10 @@ " restore_saver.restore(sess, \"./my_model_final.ckpt\")\n", "\n", " for epoch in range(n_epochs):\n", - " for iteration in range(mnist.train.num_examples // batch_size):\n", - " X_batch, y_batch = mnist.train.next_batch(batch_size)\n", + " for X_batch, y_batch in shuffle_batch(X_train, y_train, batch_size):\n", " sess.run(training_op, feed_dict={X: X_batch, y: y_batch})\n", - " accuracy_val = accuracy.eval(feed_dict={X: mnist.test.images,\n", - " y: mnist.test.labels})\n", - " print(epoch, \"테스트 정확도:\", accuracy_val)\n", + " accuracy_val = accuracy.eval(feed_dict={X: X_valid, y: y_valid})\n", + " print(epoch, \"검증 세트 정확도:\", accuracy_val)\n", "\n", " save_path = saver.save(sess, \"./my_new_model_final.ckpt\")" ] @@ -2525,7 +2506,7 @@ "n_outputs = 10 # 새로 만듦!\n", "\n", "X = tf.placeholder(tf.float32, shape=(None, n_inputs), name=\"X\")\n", - "y = tf.placeholder(tf.int64, shape=(None), name=\"y\")\n", + "y = tf.placeholder(tf.int32, shape=(None), name=\"y\")\n", "\n", "with tf.name_scope(\"dnn\"):\n", " hidden1 = tf.layers.dense(X, n_hidden1, activation=tf.nn.relu,\n", @@ -2602,25 +2583,25 @@ "source": [ "import numpy as np\n", "\n", - "n_batches = mnist.train.num_examples // batch_size\n", + "n_batches = len(X_train) // batch_size\n", "\n", "with tf.Session() as sess:\n", " init.run()\n", " restore_saver.restore(sess, \"./my_model_final.ckpt\")\n", " \n", - " h2_cache = sess.run(hidden2, feed_dict={X: mnist.train.images})\n", - " h2_cache_test = sess.run(hidden2, feed_dict={X: mnist.test.images}) # 책에는 없음\n", + " h2_cache = sess.run(hidden2, feed_dict={X: X_train})\n", + " h2_cache_valid = sess.run(hidden2, feed_dict={X: X_valid}) # 책에는 없음\n", "\n", " for epoch in range(n_epochs):\n", - " shuffled_idx = np.random.permutation(mnist.train.num_examples)\n", + " shuffled_idx = np.random.permutation(len(X_train))\n", " hidden2_batches = np.array_split(h2_cache[shuffled_idx], n_batches)\n", - " y_batches = np.array_split(mnist.train.labels[shuffled_idx], n_batches)\n", + " y_batches = np.array_split(y_train[shuffled_idx], n_batches)\n", " for hidden2_batch, y_batch in zip(hidden2_batches, y_batches):\n", " sess.run(training_op, feed_dict={hidden2:hidden2_batch, y:y_batch})\n", "\n", - " accuracy_val = accuracy.eval(feed_dict={hidden2: h2_cache_test, # 책에는 없음\n", - " y: mnist.test.labels}) # 책에는 없음\n", - " print(epoch, \"테스트 정확도:\", accuracy_val) # 책에는 없음\n", + " accuracy_val = accuracy.eval(feed_dict={hidden2: h2_cache_valid, # 책에는 없음\n", + " y: y_valid}) # 책에는 없음\n", + " print(epoch, \"검증 세트 정확도:\", accuracy_val) # 책에는 없음\n", "\n", " save_path = saver.save(sess, \"./my_new_model_final.ckpt\")" ] @@ -2736,7 +2717,7 @@ "n_outputs = 10\n", "\n", "X = tf.placeholder(tf.float32, shape=(None, n_inputs), name=\"X\")\n", - "y = tf.placeholder(tf.int64, shape=(None), name=\"y\")\n", + "y = tf.placeholder(tf.int32, shape=(None), name=\"y\")\n", "\n", "with tf.name_scope(\"dnn\"):\n", " hidden1 = tf.layers.dense(X, n_hidden1, activation=tf.nn.relu, name=\"hidden1\")\n", @@ -2803,12 +2784,10 @@ "with tf.Session() as sess:\n", " init.run()\n", " for epoch in range(n_epochs):\n", - " for iteration in range(mnist.train.num_examples // batch_size):\n", - " X_batch, y_batch = mnist.train.next_batch(batch_size)\n", + " for X_batch, y_batch in shuffle_batch(X_train, y_train, batch_size):\n", " sess.run(training_op, feed_dict={X: X_batch, y: y_batch})\n", - " accuracy_val = accuracy.eval(feed_dict={X: mnist.test.images,\n", - " y: mnist.test.labels})\n", - " print(epoch, \"테스트 정확도:\", accuracy_val)\n", + " accuracy_val = accuracy.eval(feed_dict={X: X_valid, y: y_valid})\n", + " print(epoch, \"검증 세트 정확도:\", accuracy_val)\n", "\n", " save_path = saver.save(sess, \"./my_model_final.ckpt\")" ] @@ -2847,7 +2826,7 @@ "n_outputs = 10\n", "\n", "X = tf.placeholder(tf.float32, shape=(None, n_inputs), name=\"X\")\n", - "y = tf.placeholder(tf.int64, shape=(None), name=\"y\")\n", + "y = tf.placeholder(tf.int32, shape=(None), name=\"y\")\n", "\n", "with tf.name_scope(\"dnn\"):\n", " hidden1 = tf.layers.dense(X, n_hidden1, activation=tf.nn.relu, name=\"hidden1\")\n", @@ -2948,12 +2927,10 @@ "with tf.Session() as sess:\n", " init.run()\n", " for epoch in range(n_epochs):\n", - " for iteration in range(mnist.train.num_examples // batch_size):\n", - " X_batch, y_batch = mnist.train.next_batch(batch_size)\n", + " for X_batch, y_batch in shuffle_batch(X_train, y_train, batch_size):\n", " sess.run(training_op, feed_dict={X: X_batch, y: y_batch})\n", - " accuracy_val = accuracy.eval(feed_dict={X: mnist.test.images,\n", - " y: mnist.test.labels})\n", - " print(epoch, \"테스트 정확도:\", accuracy_val)\n", + " accuracy_val = accuracy.eval(feed_dict={X: X_valid, y: y_valid})\n", + " print(epoch, \"검증 세트 정확도:\", accuracy_val)\n", "\n", " save_path = saver.save(sess, \"./my_model_final.ckpt\")" ] @@ -2979,7 +2956,7 @@ "n_outputs = 10\n", "\n", "X = tf.placeholder(tf.float32, shape=(None, n_inputs), name=\"X\")\n", - "y = tf.placeholder(tf.int64, shape=(None), name=\"y\")" + "y = tf.placeholder(tf.int32, shape=(None), name=\"y\")" ] }, { @@ -3104,12 +3081,10 @@ "with tf.Session() as sess:\n", " init.run()\n", " for epoch in range(n_epochs):\n", - " for iteration in range(mnist.train.num_examples // batch_size):\n", - " X_batch, y_batch = mnist.train.next_batch(batch_size)\n", + " for X_batch, y_batch in shuffle_batch(X_train, y_train, batch_size):\n", " sess.run(training_op, feed_dict={X: X_batch, y: y_batch})\n", - " accuracy_val = accuracy.eval(feed_dict={X: mnist.test.images,\n", - " y: mnist.test.labels})\n", - " print(epoch, \"테스트 정확도:\", accuracy_val)\n", + " accuracy_val = accuracy.eval(feed_dict={X: X_valid, y: y_valid})\n", + " print(epoch, \"검증 세트 정확도:\", accuracy_val)\n", "\n", " save_path = saver.save(sess, \"./my_model_final.ckpt\")" ] @@ -3130,7 +3105,7 @@ "reset_graph()\n", "\n", "X = tf.placeholder(tf.float32, shape=(None, n_inputs), name=\"X\")\n", - "y = tf.placeholder(tf.int64, shape=(None), name=\"y\")" + "y = tf.placeholder(tf.int32, shape=(None), name=\"y\")" ] }, { @@ -3217,11 +3192,10 @@ "with tf.Session() as sess:\n", " init.run()\n", " for epoch in range(n_epochs):\n", - " for iteration in range(mnist.train.num_examples // batch_size):\n", - " X_batch, y_batch = mnist.train.next_batch(batch_size)\n", + " for X_batch, y_batch in shuffle_batch(X_train, y_train, batch_size):\n", " sess.run(training_op, feed_dict={training: True, X: X_batch, y: y_batch})\n", - " acc_test = accuracy.eval(feed_dict={X: mnist.test.images, y: mnist.test.labels})\n", - " print(epoch, \"테스트 정확도:\", acc_test)\n", + " accuracy_val = accuracy.eval(feed_dict={X: X_valid, y: y_valid})\n", + " print(epoch, \"검증 세트 정확도:\", accuracy_val)\n", "\n", " save_path = saver.save(sess, \"./my_model_final.ckpt\")" ] @@ -3257,7 +3231,7 @@ "momentum = 0.9\n", "\n", "X = tf.placeholder(tf.float32, shape=(None, n_inputs), name=\"X\")\n", - "y = tf.placeholder(tf.int64, shape=(None), name=\"y\")\n", + "y = tf.placeholder(tf.int32, shape=(None), name=\"y\")\n", "\n", "with tf.name_scope(\"dnn\"):\n", " hidden1 = tf.layers.dense(X, n_hidden1, activation=tf.nn.relu, name=\"hidden1\")\n", @@ -3384,14 +3358,12 @@ "with tf.Session() as sess: # 책에는 없음\n", " init.run() # 책에는 없음\n", " for epoch in range(n_epochs): # 책에는 없음\n", - " for iteration in range(mnist.train.num_examples // batch_size): # 책에는 없음\n", - " X_batch, y_batch = mnist.train.next_batch(batch_size) # 책에는 없음\n", + " for X_batch, y_batch in shuffle_batch(X_train, y_train, batch_size): # 책에는 없음\n", " sess.run(training_op, feed_dict={X: X_batch, y: y_batch})\n", " clip_weights.eval()\n", " clip_weights2.eval() # 책에는 없음\n", - " acc_test = accuracy.eval(feed_dict={X: mnist.test.images, # 책에는 없음\n", - " y: mnist.test.labels}) # 책에는 없음\n", - " print(epoch, \"테스트 정확도:\", acc_test) # 책에는 없음\n", + " accuracy_val = accuracy.eval(feed_dict={X: X_valid, y: y_valid}) # 책에는 없음\n", + " print(epoch, \"검증 세트 정확도:\", accuracy_val) # 책에는 없음\n", "\n", " save_path = saver.save(sess, \"./my_model_final.ckpt\") # 책에는 없음" ] @@ -3443,7 +3415,7 @@ "momentum = 0.9\n", "\n", "X = tf.placeholder(tf.float32, shape=(None, n_inputs), name=\"X\")\n", - "y = tf.placeholder(tf.int64, shape=(None), name=\"y\")" + "y = tf.placeholder(tf.int32, shape=(None), name=\"y\")" ] }, { @@ -3541,15 +3513,13 @@ "with tf.Session() as sess:\n", " init.run()\n", " for epoch in range(n_epochs):\n", - " for iteration in range(mnist.train.num_examples // batch_size):\n", - " X_batch, y_batch = mnist.train.next_batch(batch_size)\n", + " for X_batch, y_batch in shuffle_batch(X_train, y_train, batch_size):\n", " sess.run(training_op, feed_dict={X: X_batch, y: y_batch})\n", " sess.run(clip_all_weights)\n", - " acc_test = accuracy.eval(feed_dict={X: mnist.test.images, # 책에는 없음\n", - " y: mnist.test.labels}) # 책에는 없음\n", - " print(epoch, \"테스트 정확도:\", acc_test) # 책에는 없음\n", + " accuracy_val = accuracy.eval(feed_dict={X: X_valid, y: y_valid}) # 책에는 없음\n", + " print(epoch, \"검증 세트 정확도:\", accuracy_val) # 책에는 없음\n", "\n", - " save_path = saver.save(sess, \"./my_model_final.ckpt\") # 책에는 없음" + " save_path = saver.save(sess, \"./my_model_final.ckpt\") # 책에는 없음" ] }, { @@ -3585,7 +3555,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.5.5" + "version": "3.6.5" }, "nav_menu": { "height": "360px", diff --git a/11_deep_learning_exercises.ipynb b/11_deep_learning_exercises.ipynb index cd5a737..b98b9d0 100644 --- a/11_deep_learning_exercises.ipynb +++ b/11_deep_learning_exercises.ipynb @@ -163,7 +163,7 @@ "metadata": {}, "outputs": [], "source": [ - "he_init = tf.contrib.layers.variance_scaling_initializer()\n", + "he_init = tf.variance_scaling_initializer()\n", "\n", "def dnn(inputs, n_hidden_layers=5, n_neurons=100, name=None,\n", " activation=tf.nn.elu, initializer=he_init):\n", @@ -189,7 +189,7 @@ "reset_graph()\n", "\n", "X = tf.placeholder(tf.float32, shape=(None, n_inputs), name=\"X\")\n", - "y = tf.placeholder(tf.int64, shape=(None), name=\"y\")\n", + "y = tf.placeholder(tf.int32, shape=(None), name=\"y\")\n", "\n", "dnn_outputs = dnn(X)\n", "\n", @@ -246,6 +246,13 @@ "MNIST 데이터셋을 로드합니다:" ] }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "주의: `tf.examples.tutorials.mnist`은 삭제될 예정이므로 대신 `tf.keras.datasets.mnist`를 사용하겠습니다." + ] + }, { "cell_type": "code", "execution_count": 7, @@ -263,10 +270,13 @@ } ], "source": [ - "from tensorflow.examples.tutorials.mnist import input_data\n", - "tf.logging.set_verbosity(tf.logging.ERROR) # deprecated 경고 메세지를 출력하지 않기 위해 \n", - "mnist = input_data.read_data_sets(\"/tmp/data/\")\n", - "tf.logging.set_verbosity(tf.logging.INFO)" + "(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:]" ] }, { @@ -282,12 +292,12 @@ "metadata": {}, "outputs": [], "source": [ - "X_train1 = mnist.train.images[mnist.train.labels < 5]\n", - "y_train1 = mnist.train.labels[mnist.train.labels < 5]\n", - "X_valid1 = mnist.validation.images[mnist.validation.labels < 5]\n", - "y_valid1 = mnist.validation.labels[mnist.validation.labels < 5]\n", - "X_test1 = mnist.test.images[mnist.test.labels < 5]\n", - "y_test1 = mnist.test.labels[mnist.test.labels < 5]" + "X_train1 = X_train[y_train < 5]\n", + "y_train1 = y_train[y_train < 5]\n", + "X_valid1 = X_valid[y_valid < 5]\n", + "y_valid1 = y_valid[y_valid < 5]\n", + "X_test1 = X_test[y_test < 5]\n", + "y_test1 = y_test[y_test < 5]" ] }, { @@ -20536,12 +20546,12 @@ "metadata": {}, "outputs": [], "source": [ - "X_train2_full = mnist.train.images[mnist.train.labels >= 5]\n", - "y_train2_full = mnist.train.labels[mnist.train.labels >= 5] - 5\n", - "X_valid2_full = mnist.validation.images[mnist.validation.labels >= 5]\n", - "y_valid2_full = mnist.validation.labels[mnist.validation.labels >= 5] - 5\n", - "X_test2 = mnist.test.images[mnist.test.labels >= 5]\n", - "y_test2 = mnist.test.labels[mnist.test.labels >= 5] - 5" + "X_train2_full = X_train[y_train >= 5]\n", + "y_train2_full = y_train[y_train >= 5] - 5\n", + "X_valid2_full = X_valid[y_valid >= 5]\n", + "y_valid2_full = y_valid[y_valid >= 5] - 5\n", + "X_test2 = X_test[y_test >= 5]\n", + "y_test2 = y_test[y_test >= 5] - 5" ] }, { @@ -21577,14 +21587,14 @@ "metadata": {}, "outputs": [], "source": [ - "X_train1 = mnist.train.images\n", - "y_train1 = mnist.train.labels\n", + "X_train1 = X_train\n", + "y_train1 = y_train\n", "\n", - "X_train2 = mnist.validation.images\n", - "y_train2 = mnist.validation.labels\n", + "X_train2 = X_valid\n", + "y_train2 = y_valid\n", "\n", - "X_test = mnist.test.images\n", - "y_test = mnist.test.labels" + "X_test = X_test\n", + "y_test = y_test" ] }, { @@ -21907,7 +21917,7 @@ "with tf.Session() as sess:\n", " init.run()\n", " for epoch in range(n_epochs):\n", - " for iteration in range(mnist.train.num_examples // batch_size):\n", + " for iteration in range(len(X_train1) // batch_size):\n", " X_batch, y_batch = generate_batch(X_train1, y_train1, batch_size)\n", " loss_val, _ = sess.run([loss, training_op], feed_dict={X: X_batch, y: y_batch})\n", " print(epoch, \"훈련 손실:\", loss_val)\n", @@ -22142,7 +22152,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.5.5" + "version": "3.6.5" }, "nav_menu": { "height": "360px",