variance_scaling_initializer 수정, 텐서보드 그래프 분리, keras mnist 적용

This commit is contained in:
rickiepark
2018-05-20 21:59:30 +09:00
parent b2e79fb5d0
commit 17bc85ff54
2 changed files with 158 additions and 178 deletions

View File

@@ -186,7 +186,7 @@
"metadata": {}, "metadata": {},
"outputs": [], "outputs": [],
"source": [ "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", "hidden1 = tf.layers.dense(X, n_hidden1, activation=tf.nn.relu,\n",
" kernel_initializer=he_init, name=\"hidden1\")" " kernel_initializer=he_init, name=\"hidden1\")"
] ]
@@ -310,7 +310,7 @@
"outputs": [], "outputs": [],
"source": [ "source": [
"X = tf.placeholder(tf.float32, shape=(None, n_inputs), name=\"X\")\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\")"
] ]
}, },
{ {
@@ -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", "cell_type": "code",
"execution_count": 19, "execution_count": 19,
@@ -394,10 +430,8 @@
} }
], ],
"source": [ "source": [
"from tensorflow.examples.tutorials.mnist import input_data\n", "# 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/\")"
"mnist = input_data.read_data_sets(\"/tmp/data/\")\n",
"tf.logging.set_verbosity(tf.logging.INFO)"
] ]
}, },
{ {
@@ -429,13 +463,12 @@
"with tf.Session() as sess:\n", "with tf.Session() as sess:\n",
" init.run()\n", " init.run()\n",
" for epoch in range(n_epochs):\n", " for epoch in range(n_epochs):\n",
" for iteration in range(mnist.train.num_examples // batch_size):\n", " for X_batch, y_batch in shuffle_batch(X_train, y_train, 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", " sess.run(training_op, feed_dict={X: X_batch, y: y_batch})\n",
" if epoch % 5 == 0:\n", " if epoch % 5 == 0:\n",
" acc_train = accuracy.eval(feed_dict={X: X_batch, y: y_batch})\n", " acc_batch = 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", " acc_valid = accuracy.eval(feed_dict={X: X_valid, y: y_valid})\n",
" print(epoch, \"배치 정확도:\", acc_train, \"검증 세트 정확도:\", acc_test)\n", " print(epoch, \"배치 데이터 정확도:\", acc_batch, \"검증 세트 정확도:\", acc_valid)\n",
"\n", "\n",
" save_path = saver.save(sess, \"./my_model_final.ckpt\")" " save_path = saver.save(sess, \"./my_model_final.ckpt\")"
] ]
@@ -657,7 +690,7 @@
"n_outputs = 10\n", "n_outputs = 10\n",
"\n", "\n",
"X = tf.placeholder(tf.float32, shape=(None, n_inputs), name=\"X\")\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", "\n",
"with tf.name_scope(\"dnn\"):\n", "with tf.name_scope(\"dnn\"):\n",
" hidden1 = tf.layers.dense(X, n_hidden1, activation=selu, name=\"hidden1\")\n", " hidden1 = tf.layers.dense(X, n_hidden1, activation=selu, name=\"hidden1\")\n",
@@ -712,21 +745,20 @@
} }
], ],
"source": [ "source": [
"means = mnist.train.images.mean(axis=0, keepdims=True)\n", "means = X_train.mean(axis=0, keepdims=True)\n",
"stds = mnist.train.images.std(axis=0, keepdims=True) + 1e-10\n", "stds = X_train.std(axis=0, keepdims=True) + 1e-10\n",
"X_val_scaled = (X_valid - means) / stds\n",
"\n", "\n",
"with tf.Session() as sess:\n", "with tf.Session() as sess:\n",
" init.run()\n", " init.run()\n",
" for epoch in range(n_epochs):\n", " for epoch in range(n_epochs):\n",
" for iteration in range(mnist.train.num_examples // batch_size):\n", " for X_batch, y_batch in shuffle_batch(X_train, y_train, batch_size):\n",
" X_batch, y_batch = mnist.train.next_batch(batch_size)\n",
" X_batch_scaled = (X_batch - means) / stds\n", " X_batch_scaled = (X_batch - means) / stds\n",
" sess.run(training_op, feed_dict={X: X_batch_scaled, y: y_batch})\n", " sess.run(training_op, feed_dict={X: X_batch_scaled, y: y_batch})\n",
" if epoch % 5 == 0:\n", " if epoch % 5 == 0:\n",
" acc_train = accuracy.eval(feed_dict={X: X_batch_scaled, y: y_batch})\n", " acc_batch = accuracy.eval(feed_dict={X: X_batch_scaled, y: y_batch})\n",
" X_val_scaled = (mnist.validation.images - means) / stds\n", " acc_valid = accuracy.eval(feed_dict={X: X_val_scaled, y: y_valid})\n",
" acc_test = accuracy.eval(feed_dict={X: X_val_scaled, y: mnist.validation.labels})\n", " print(epoch, \"배치 데이터 정확도:\", acc_batch, \"검증 세트 정확도:\", acc_valid)\n",
" print(epoch, \"배치 정확도:\", acc_train, \"검증 세트 정확도:\", acc_test)\n",
"\n", "\n",
" save_path = saver.save(sess, \"./my_model_final_selu.ckpt\")" " save_path = saver.save(sess, \"./my_model_final_selu.ckpt\")"
] ]
@@ -837,11 +869,11 @@
"batch_norm_momentum = 0.9\n", "batch_norm_momentum = 0.9\n",
"\n", "\n",
"X = tf.placeholder(tf.float32, shape=(None, n_inputs), name=\"X\")\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", "training = tf.placeholder_with_default(False, shape=(), name='training')\n",
"\n", "\n",
"with tf.name_scope(\"dnn\"):\n", "with tf.name_scope(\"dnn\"):\n",
" he_init = tf.contrib.layers.variance_scaling_initializer()\n", " he_init = tf.variance_scaling_initializer()\n",
"\n", "\n",
" my_batch_norm_layer = partial(\n", " my_batch_norm_layer = partial(\n",
" tf.layers.batch_normalization,\n", " tf.layers.batch_normalization,\n",
@@ -930,13 +962,11 @@
"with tf.Session() as sess:\n", "with tf.Session() as sess:\n",
" init.run()\n", " init.run()\n",
" for epoch in range(n_epochs):\n", " for epoch in range(n_epochs):\n",
" for iteration in range(mnist.train.num_examples // batch_size):\n", " for X_batch, y_batch in shuffle_batch(X_train, y_train, batch_size):\n",
" X_batch, y_batch = mnist.train.next_batch(batch_size)\n",
" sess.run([training_op, extra_update_ops],\n", " sess.run([training_op, extra_update_ops],\n",
" feed_dict={training: True, X: X_batch, y: y_batch})\n", " feed_dict={training: True, X: X_batch, y: y_batch})\n",
" accuracy_val = accuracy.eval(feed_dict={X: mnist.test.images,\n", " accuracy_val = accuracy.eval(feed_dict={X: X_valid, y: y_valid})\n",
" y: mnist.test.labels})\n", " print(epoch, \"검증 세트 정확도:\", accuracy_val)\n",
" print(epoch, \"테스트 정확도:\", accuracy_val)\n",
"\n", "\n",
" save_path = saver.save(sess, \"./my_model_final.ckpt\")" " save_path = saver.save(sess, \"./my_model_final.ckpt\")"
] ]
@@ -1075,7 +1105,7 @@
"n_outputs = 10\n", "n_outputs = 10\n",
"\n", "\n",
"X = tf.placeholder(tf.float32, shape=(None, n_inputs), name=\"X\")\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", "\n",
"with tf.name_scope(\"dnn\"):\n", "with tf.name_scope(\"dnn\"):\n",
" hidden1 = tf.layers.dense(X, n_hidden1, activation=tf.nn.relu, name=\"hidden1\")\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", "with tf.Session() as sess:\n",
" init.run()\n", " init.run()\n",
" for epoch in range(n_epochs):\n", " for epoch in range(n_epochs):\n",
" for iteration in range(mnist.train.num_examples // batch_size):\n", " for X_batch, y_batch in shuffle_batch(X_train, y_train, 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", " sess.run(training_op, feed_dict={X: X_batch, y: y_batch})\n",
" accuracy_val = accuracy.eval(feed_dict={X: mnist.test.images,\n", " accuracy_val = accuracy.eval(feed_dict={X: X_valid, y: y_valid})\n",
" y: mnist.test.labels})\n", " print(epoch, \"검증 세트 정확도:\", accuracy_val)\n",
" print(epoch, \"테스트 정확도:\", accuracy_val)\n",
"\n", "\n",
" save_path = saver.save(sess, \"./my_model_final.ckpt\")" " save_path = saver.save(sess, \"./my_model_final.ckpt\")"
] ]
@@ -1543,46 +1571,11 @@
}, },
{ {
"cell_type": "code", "cell_type": "code",
"execution_count": 49, "execution_count": null,
"metadata": {}, "metadata": {},
"outputs": [], "outputs": [],
"source": [ "source": [
"from IPython.display import clear_output, Image, display, HTML\n", "from tensorflow_graph_in_jupyter import show_graph"
"\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\"<stripped %d bytes>\"%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",
" <script>\n",
" function load() {{\n",
" document.getElementById(\"{id}\").pbtxt = {data};\n",
" }}\n",
" </script>\n",
" <link rel=\"import\" href=\"https://tensorboard.appspot.com/tf-graph-basic.build.html\" onload=load()>\n",
" <div style=\"height:600px\">\n",
" <tf-graph-basic id=\"{id}\"></tf-graph-basic>\n",
" </div>\n",
" \"\"\".format(data=repr(str(strip_def)), id='graph'+str(np.random.rand()))\n",
"\n",
" iframe = \"\"\"\n",
" <iframe seamless style=\"width:1200px;height:620px;border:0\" srcdoc=\"{}\"></iframe>\n",
" \"\"\".format(code.replace('\"', '&quot;'))\n",
" display(HTML(iframe))"
] ]
}, },
{ {
@@ -1744,12 +1737,10 @@
" saver.restore(sess, \"./my_model_final.ckpt\")\n", " saver.restore(sess, \"./my_model_final.ckpt\")\n",
"\n", "\n",
" for epoch in range(n_epochs):\n", " for epoch in range(n_epochs):\n",
" for iteration in range(mnist.train.num_examples // batch_size):\n", " for X_batch, y_batch in shuffle_batch(X_train, y_train, 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", " sess.run(training_op, feed_dict={X: X_batch, y: y_batch})\n",
" accuracy_val = accuracy.eval(feed_dict={X: mnist.test.images,\n", " accuracy_val = accuracy.eval(feed_dict={X: X_valid, y: y_valid})\n",
" y: mnist.test.labels})\n", " print(epoch, \"검증 세트 정확도:\", accuracy_val)\n",
" print(epoch, \"테스트 정확도:\", accuracy_val)\n",
"\n", "\n",
" save_path = saver.save(sess, \"./my_new_model_final.ckpt\") " " save_path = saver.save(sess, \"./my_new_model_final.ckpt\") "
] ]
@@ -1777,7 +1768,7 @@
"n_outputs = 10\n", "n_outputs = 10\n",
"\n", "\n",
"X = tf.placeholder(tf.float32, shape=(None, n_inputs), name=\"X\")\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", "\n",
"with tf.name_scope(\"dnn\"):\n", "with tf.name_scope(\"dnn\"):\n",
" hidden1 = tf.layers.dense(X, n_hidden1, activation=tf.nn.relu, name=\"hidden1\")\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", " saver.restore(sess, \"./my_model_final.ckpt\")\n",
"\n", "\n",
" for epoch in range(n_epochs):\n", " for epoch in range(n_epochs):\n",
" for iteration in range(mnist.train.num_examples // batch_size):\n", " for X_batch, y_batch in shuffle_batch(X_train, y_train, 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", " sess.run(training_op, feed_dict={X: X_batch, y: y_batch})\n",
" accuracy_val = accuracy.eval(feed_dict={X: mnist.test.images,\n", " accuracy_val = accuracy.eval(feed_dict={X: X_valid, y: y_valid})\n",
" y: mnist.test.labels})\n", " print(epoch, \"검증 세트 정확도:\", accuracy_val)\n",
" print(epoch, \"테스트 정확도:\", accuracy_val)\n",
"\n", "\n",
" save_path = saver.save(sess, \"./my_new_model_final.ckpt\") " " save_path = saver.save(sess, \"./my_new_model_final.ckpt\") "
] ]
@@ -1953,12 +1942,10 @@
" saver.restore(sess, \"./my_model_final.ckpt\")\n", " saver.restore(sess, \"./my_model_final.ckpt\")\n",
"\n", "\n",
" for epoch in range(n_epochs):\n", " for epoch in range(n_epochs):\n",
" for iteration in range(mnist.train.num_examples // batch_size):\n", " for X_batch, y_batch in shuffle_batch(X_train, y_train, 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", " sess.run(training_op, feed_dict={X: X_batch, y: y_batch})\n",
" accuracy_val = accuracy.eval(feed_dict={X: mnist.test.images,\n", " accuracy_val = accuracy.eval(feed_dict={X: X_valid, y: y_valid})\n",
" y: mnist.test.labels})\n", " print(epoch, \"검증 세트 정확도:\", accuracy_val)\n",
" print(epoch, \"테스트 정확도:\", accuracy_val)\n",
"\n", "\n",
" save_path = new_saver.save(sess, \"./my_new_model_final.ckpt\")" " save_path = new_saver.save(sess, \"./my_new_model_final.ckpt\")"
] ]
@@ -1986,7 +1973,7 @@
"n_outputs = 10 # 새로 만듦!\n", "n_outputs = 10 # 새로 만듦!\n",
"\n", "\n",
"X = tf.placeholder(tf.float32, shape=(None, n_inputs), name=\"X\")\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", "\n",
"with tf.name_scope(\"dnn\"):\n", "with tf.name_scope(\"dnn\"):\n",
" hidden1 = tf.layers.dense(X, n_hidden1, activation=tf.nn.relu, name=\"hidden1\") # 재사용\n", " hidden1 = tf.layers.dense(X, n_hidden1, activation=tf.nn.relu, name=\"hidden1\") # 재사용\n",
@@ -2060,13 +2047,11 @@
" init.run()\n", " init.run()\n",
" restore_saver.restore(sess, \"./my_model_final.ckpt\")\n", " restore_saver.restore(sess, \"./my_model_final.ckpt\")\n",
"\n", "\n",
" for epoch in range(n_epochs): # 책에는 없음\n", " for epoch in range(n_epochs): # 책에는 없음\n",
" for iteration in range(mnist.train.num_examples // batch_size): # 책에는 없음\n", " for X_batch, y_batch in shuffle_batch(X_train, y_train, 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",
" 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",
" accuracy_val = accuracy.eval(feed_dict={X: mnist.test.images, # 책에는 없음\n", " print(epoch, \"검증 세트 정확도:\", accuracy_val) # 책에는 없음\n",
" y: mnist.test.labels}) # 책에는 없음\n",
" print(epoch, \"테스트 정확도:\", accuracy_val) # 책에는 없음\n",
"\n", "\n",
" save_path = saver.save(sess, \"./my_new_model_final.ckpt\")" " save_path = saver.save(sess, \"./my_new_model_final.ckpt\")"
] ]
@@ -2285,7 +2270,7 @@
"n_outputs = 10 # 새로 만듦!\n", "n_outputs = 10 # 새로 만듦!\n",
"\n", "\n",
"X = tf.placeholder(tf.float32, shape=(None, n_inputs), name=\"X\")\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", "\n",
"with tf.name_scope(\"dnn\"):\n", "with tf.name_scope(\"dnn\"):\n",
" hidden1 = tf.layers.dense(X, n_hidden1, activation=tf.nn.relu, name=\"hidden1\") # 재사용\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", " restore_saver.restore(sess, \"./my_model_final.ckpt\")\n",
"\n", "\n",
" for epoch in range(n_epochs):\n", " for epoch in range(n_epochs):\n",
" for iteration in range(mnist.train.num_examples // batch_size):\n", " for X_batch, y_batch in shuffle_batch(X_train, y_train, 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", " sess.run(training_op, feed_dict={X: X_batch, y: y_batch})\n",
" accuracy_val = accuracy.eval(feed_dict={X: mnist.test.images,\n", " accuracy_val = accuracy.eval(feed_dict={X: X_valid, y: y_valid})\n",
" y: mnist.test.labels})\n", " print(epoch, \"검증 세트 정확도:\", accuracy_val)\n",
" print(epoch, \"테스트 정확도:\", accuracy_val)\n",
"\n", "\n",
" save_path = saver.save(sess, \"./my_new_model_final.ckpt\")" " save_path = saver.save(sess, \"./my_new_model_final.ckpt\")"
] ]
@@ -2398,7 +2381,7 @@
"n_outputs = 10 # 새로 만듦!\n", "n_outputs = 10 # 새로 만듦!\n",
"\n", "\n",
"X = tf.placeholder(tf.float32, shape=(None, n_inputs), name=\"X\")\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", " restore_saver.restore(sess, \"./my_model_final.ckpt\")\n",
"\n", "\n",
" for epoch in range(n_epochs):\n", " for epoch in range(n_epochs):\n",
" for iteration in range(mnist.train.num_examples // batch_size):\n", " for X_batch, y_batch in shuffle_batch(X_train, y_train, 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", " sess.run(training_op, feed_dict={X: X_batch, y: y_batch})\n",
" accuracy_val = accuracy.eval(feed_dict={X: mnist.test.images,\n", " accuracy_val = accuracy.eval(feed_dict={X: X_valid, y: y_valid})\n",
" y: mnist.test.labels})\n", " print(epoch, \"검증 세트 정확도:\", accuracy_val)\n",
" print(epoch, \"테스트 정확도:\", accuracy_val)\n",
"\n", "\n",
" save_path = saver.save(sess, \"./my_new_model_final.ckpt\")" " save_path = saver.save(sess, \"./my_new_model_final.ckpt\")"
] ]
@@ -2525,7 +2506,7 @@
"n_outputs = 10 # 새로 만듦!\n", "n_outputs = 10 # 새로 만듦!\n",
"\n", "\n",
"X = tf.placeholder(tf.float32, shape=(None, n_inputs), name=\"X\")\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", "\n",
"with tf.name_scope(\"dnn\"):\n", "with tf.name_scope(\"dnn\"):\n",
" hidden1 = tf.layers.dense(X, n_hidden1, activation=tf.nn.relu,\n", " hidden1 = tf.layers.dense(X, n_hidden1, activation=tf.nn.relu,\n",
@@ -2602,25 +2583,25 @@
"source": [ "source": [
"import numpy as np\n", "import numpy as np\n",
"\n", "\n",
"n_batches = mnist.train.num_examples // batch_size\n", "n_batches = len(X_train) // batch_size\n",
"\n", "\n",
"with tf.Session() as sess:\n", "with tf.Session() as sess:\n",
" init.run()\n", " init.run()\n",
" restore_saver.restore(sess, \"./my_model_final.ckpt\")\n", " restore_saver.restore(sess, \"./my_model_final.ckpt\")\n",
" \n", " \n",
" h2_cache = sess.run(hidden2, feed_dict={X: mnist.train.images})\n", " h2_cache = sess.run(hidden2, feed_dict={X: X_train})\n",
" h2_cache_test = sess.run(hidden2, feed_dict={X: mnist.test.images}) # 책에는 없음\n", " h2_cache_valid = sess.run(hidden2, feed_dict={X: X_valid}) # 책에는 없음\n",
"\n", "\n",
" for epoch in range(n_epochs):\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", " 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", " 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", " sess.run(training_op, feed_dict={hidden2:hidden2_batch, y:y_batch})\n",
"\n", "\n",
" accuracy_val = accuracy.eval(feed_dict={hidden2: h2_cache_test, # 책에는 없음\n", " accuracy_val = accuracy.eval(feed_dict={hidden2: h2_cache_valid, # 책에는 없음\n",
" y: mnist.test.labels}) # 책에는 없음\n", " y: y_valid}) # 책에는 없음\n",
" print(epoch, \"테스트 정확도:\", accuracy_val) # 책에는 없음\n", " print(epoch, \"검증 세트 정확도:\", accuracy_val) # 책에는 없음\n",
"\n", "\n",
" save_path = saver.save(sess, \"./my_new_model_final.ckpt\")" " save_path = saver.save(sess, \"./my_new_model_final.ckpt\")"
] ]
@@ -2736,7 +2717,7 @@
"n_outputs = 10\n", "n_outputs = 10\n",
"\n", "\n",
"X = tf.placeholder(tf.float32, shape=(None, n_inputs), name=\"X\")\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", "\n",
"with tf.name_scope(\"dnn\"):\n", "with tf.name_scope(\"dnn\"):\n",
" hidden1 = tf.layers.dense(X, n_hidden1, activation=tf.nn.relu, name=\"hidden1\")\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", "with tf.Session() as sess:\n",
" init.run()\n", " init.run()\n",
" for epoch in range(n_epochs):\n", " for epoch in range(n_epochs):\n",
" for iteration in range(mnist.train.num_examples // batch_size):\n", " for X_batch, y_batch in shuffle_batch(X_train, y_train, 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", " sess.run(training_op, feed_dict={X: X_batch, y: y_batch})\n",
" accuracy_val = accuracy.eval(feed_dict={X: mnist.test.images,\n", " accuracy_val = accuracy.eval(feed_dict={X: X_valid, y: y_valid})\n",
" y: mnist.test.labels})\n", " print(epoch, \"검증 세트 정확도:\", accuracy_val)\n",
" print(epoch, \"테스트 정확도:\", accuracy_val)\n",
"\n", "\n",
" save_path = saver.save(sess, \"./my_model_final.ckpt\")" " save_path = saver.save(sess, \"./my_model_final.ckpt\")"
] ]
@@ -2847,7 +2826,7 @@
"n_outputs = 10\n", "n_outputs = 10\n",
"\n", "\n",
"X = tf.placeholder(tf.float32, shape=(None, n_inputs), name=\"X\")\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", "\n",
"with tf.name_scope(\"dnn\"):\n", "with tf.name_scope(\"dnn\"):\n",
" hidden1 = tf.layers.dense(X, n_hidden1, activation=tf.nn.relu, name=\"hidden1\")\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", "with tf.Session() as sess:\n",
" init.run()\n", " init.run()\n",
" for epoch in range(n_epochs):\n", " for epoch in range(n_epochs):\n",
" for iteration in range(mnist.train.num_examples // batch_size):\n", " for X_batch, y_batch in shuffle_batch(X_train, y_train, 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", " sess.run(training_op, feed_dict={X: X_batch, y: y_batch})\n",
" accuracy_val = accuracy.eval(feed_dict={X: mnist.test.images,\n", " accuracy_val = accuracy.eval(feed_dict={X: X_valid, y: y_valid})\n",
" y: mnist.test.labels})\n", " print(epoch, \"검증 세트 정확도:\", accuracy_val)\n",
" print(epoch, \"테스트 정확도:\", accuracy_val)\n",
"\n", "\n",
" save_path = saver.save(sess, \"./my_model_final.ckpt\")" " save_path = saver.save(sess, \"./my_model_final.ckpt\")"
] ]
@@ -2979,7 +2956,7 @@
"n_outputs = 10\n", "n_outputs = 10\n",
"\n", "\n",
"X = tf.placeholder(tf.float32, shape=(None, n_inputs), name=\"X\")\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", "with tf.Session() as sess:\n",
" init.run()\n", " init.run()\n",
" for epoch in range(n_epochs):\n", " for epoch in range(n_epochs):\n",
" for iteration in range(mnist.train.num_examples // batch_size):\n", " for X_batch, y_batch in shuffle_batch(X_train, y_train, 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", " sess.run(training_op, feed_dict={X: X_batch, y: y_batch})\n",
" accuracy_val = accuracy.eval(feed_dict={X: mnist.test.images,\n", " accuracy_val = accuracy.eval(feed_dict={X: X_valid, y: y_valid})\n",
" y: mnist.test.labels})\n", " print(epoch, \"검증 세트 정확도:\", accuracy_val)\n",
" print(epoch, \"테스트 정확도:\", accuracy_val)\n",
"\n", "\n",
" save_path = saver.save(sess, \"./my_model_final.ckpt\")" " save_path = saver.save(sess, \"./my_model_final.ckpt\")"
] ]
@@ -3130,7 +3105,7 @@
"reset_graph()\n", "reset_graph()\n",
"\n", "\n",
"X = tf.placeholder(tf.float32, shape=(None, n_inputs), name=\"X\")\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", "with tf.Session() as sess:\n",
" init.run()\n", " init.run()\n",
" for epoch in range(n_epochs):\n", " for epoch in range(n_epochs):\n",
" for iteration in range(mnist.train.num_examples // batch_size):\n", " for X_batch, y_batch in shuffle_batch(X_train, y_train, batch_size):\n",
" X_batch, y_batch = mnist.train.next_batch(batch_size)\n",
" sess.run(training_op, feed_dict={training: True, X: X_batch, y: y_batch})\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", " accuracy_val = accuracy.eval(feed_dict={X: X_valid, y: y_valid})\n",
" print(epoch, \"테스트 정확도:\", acc_test)\n", " print(epoch, \"검증 세트 정확도:\", accuracy_val)\n",
"\n", "\n",
" save_path = saver.save(sess, \"./my_model_final.ckpt\")" " save_path = saver.save(sess, \"./my_model_final.ckpt\")"
] ]
@@ -3257,7 +3231,7 @@
"momentum = 0.9\n", "momentum = 0.9\n",
"\n", "\n",
"X = tf.placeholder(tf.float32, shape=(None, n_inputs), name=\"X\")\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", "\n",
"with tf.name_scope(\"dnn\"):\n", "with tf.name_scope(\"dnn\"):\n",
" hidden1 = tf.layers.dense(X, n_hidden1, activation=tf.nn.relu, name=\"hidden1\")\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", "with tf.Session() as sess: # 책에는 없음\n",
" init.run() # 책에는 없음\n", " init.run() # 책에는 없음\n",
" for epoch in range(n_epochs): # 책에는 없음\n", " for epoch in range(n_epochs): # 책에는 없음\n",
" for iteration in range(mnist.train.num_examples // batch_size): # 책에는 없음\n", " for X_batch, y_batch in shuffle_batch(X_train, y_train, 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", " sess.run(training_op, feed_dict={X: X_batch, y: y_batch})\n",
" clip_weights.eval()\n", " clip_weights.eval()\n",
" clip_weights2.eval() # 책에는 없음\n", " clip_weights2.eval() # 책에는 없음\n",
" acc_test = accuracy.eval(feed_dict={X: mnist.test.images, # 책에는 없음\n", " accuracy_val = accuracy.eval(feed_dict={X: X_valid, y: y_valid}) # 책에는 없음\n",
" y: mnist.test.labels}) # 책에는 없음\n", " print(epoch, \"검증 세트 정확도:\", accuracy_val) # 책에는 없음\n",
" print(epoch, \"테스트 정확도:\", acc_test) # 책에는 없음\n",
"\n", "\n",
" save_path = saver.save(sess, \"./my_model_final.ckpt\") # 책에는 없음" " save_path = saver.save(sess, \"./my_model_final.ckpt\") # 책에는 없음"
] ]
@@ -3443,7 +3415,7 @@
"momentum = 0.9\n", "momentum = 0.9\n",
"\n", "\n",
"X = tf.placeholder(tf.float32, shape=(None, n_inputs), name=\"X\")\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", "with tf.Session() as sess:\n",
" init.run()\n", " init.run()\n",
" for epoch in range(n_epochs):\n", " for epoch in range(n_epochs):\n",
" for iteration in range(mnist.train.num_examples // batch_size):\n", " for X_batch, y_batch in shuffle_batch(X_train, y_train, 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", " sess.run(training_op, feed_dict={X: X_batch, y: y_batch})\n",
" sess.run(clip_all_weights)\n", " sess.run(clip_all_weights)\n",
" acc_test = accuracy.eval(feed_dict={X: mnist.test.images, # 책에는 없음\n", " accuracy_val = accuracy.eval(feed_dict={X: X_valid, y: y_valid}) # 책에는 없음\n",
" y: mnist.test.labels}) # 책에는 없음\n", " print(epoch, \"검증 세트 정확도:\", accuracy_val) # 책에는 없음\n",
" print(epoch, \"테스트 정확도:\", acc_test) # 책에는 없음\n",
"\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", "name": "python",
"nbconvert_exporter": "python", "nbconvert_exporter": "python",
"pygments_lexer": "ipython3", "pygments_lexer": "ipython3",
"version": "3.5.5" "version": "3.6.5"
}, },
"nav_menu": { "nav_menu": {
"height": "360px", "height": "360px",

View File

@@ -163,7 +163,7 @@
"metadata": {}, "metadata": {},
"outputs": [], "outputs": [],
"source": [ "source": [
"he_init = tf.contrib.layers.variance_scaling_initializer()\n", "he_init = tf.variance_scaling_initializer()\n",
"\n", "\n",
"def dnn(inputs, n_hidden_layers=5, n_neurons=100, name=None,\n", "def dnn(inputs, n_hidden_layers=5, n_neurons=100, name=None,\n",
" activation=tf.nn.elu, initializer=he_init):\n", " activation=tf.nn.elu, initializer=he_init):\n",
@@ -189,7 +189,7 @@
"reset_graph()\n", "reset_graph()\n",
"\n", "\n",
"X = tf.placeholder(tf.float32, shape=(None, n_inputs), name=\"X\")\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", "\n",
"dnn_outputs = dnn(X)\n", "dnn_outputs = dnn(X)\n",
"\n", "\n",
@@ -246,6 +246,13 @@
"MNIST 데이터셋을 로드합니다:" "MNIST 데이터셋을 로드합니다:"
] ]
}, },
{
"cell_type": "markdown",
"metadata": {},
"source": [
"주의: `tf.examples.tutorials.mnist`은 삭제될 예정이므로 대신 `tf.keras.datasets.mnist`를 사용하겠습니다."
]
},
{ {
"cell_type": "code", "cell_type": "code",
"execution_count": 7, "execution_count": 7,
@@ -263,10 +270,13 @@
} }
], ],
"source": [ "source": [
"from tensorflow.examples.tutorials.mnist import input_data\n", "(X_train, y_train), (X_test, y_test) = tf.keras.datasets.mnist.load_data()\n",
"tf.logging.set_verbosity(tf.logging.ERROR) # deprecated 경고 메세지를 출력하지 않기 위해 \n", "X_train = X_train.astype(np.float32).reshape(-1, 28*28) / 255.0\n",
"mnist = input_data.read_data_sets(\"/tmp/data/\")\n", "X_test = X_test.astype(np.float32).reshape(-1, 28*28) / 255.0\n",
"tf.logging.set_verbosity(tf.logging.INFO)" "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": {}, "metadata": {},
"outputs": [], "outputs": [],
"source": [ "source": [
"X_train1 = mnist.train.images[mnist.train.labels < 5]\n", "X_train1 = X_train[y_train < 5]\n",
"y_train1 = mnist.train.labels[mnist.train.labels < 5]\n", "y_train1 = y_train[y_train < 5]\n",
"X_valid1 = mnist.validation.images[mnist.validation.labels < 5]\n", "X_valid1 = X_valid[y_valid < 5]\n",
"y_valid1 = mnist.validation.labels[mnist.validation.labels < 5]\n", "y_valid1 = y_valid[y_valid < 5]\n",
"X_test1 = mnist.test.images[mnist.test.labels < 5]\n", "X_test1 = X_test[y_test < 5]\n",
"y_test1 = mnist.test.labels[mnist.test.labels < 5]" "y_test1 = y_test[y_test < 5]"
] ]
}, },
{ {
@@ -20536,12 +20546,12 @@
"metadata": {}, "metadata": {},
"outputs": [], "outputs": [],
"source": [ "source": [
"X_train2_full = mnist.train.images[mnist.train.labels >= 5]\n", "X_train2_full = X_train[y_train >= 5]\n",
"y_train2_full = mnist.train.labels[mnist.train.labels >= 5] - 5\n", "y_train2_full = y_train[y_train >= 5] - 5\n",
"X_valid2_full = mnist.validation.images[mnist.validation.labels >= 5]\n", "X_valid2_full = X_valid[y_valid >= 5]\n",
"y_valid2_full = mnist.validation.labels[mnist.validation.labels >= 5] - 5\n", "y_valid2_full = y_valid[y_valid >= 5] - 5\n",
"X_test2 = mnist.test.images[mnist.test.labels >= 5]\n", "X_test2 = X_test[y_test >= 5]\n",
"y_test2 = mnist.test.labels[mnist.test.labels >= 5] - 5" "y_test2 = y_test[y_test >= 5] - 5"
] ]
}, },
{ {
@@ -21577,14 +21587,14 @@
"metadata": {}, "metadata": {},
"outputs": [], "outputs": [],
"source": [ "source": [
"X_train1 = mnist.train.images\n", "X_train1 = X_train\n",
"y_train1 = mnist.train.labels\n", "y_train1 = y_train\n",
"\n", "\n",
"X_train2 = mnist.validation.images\n", "X_train2 = X_valid\n",
"y_train2 = mnist.validation.labels\n", "y_train2 = y_valid\n",
"\n", "\n",
"X_test = mnist.test.images\n", "X_test = X_test\n",
"y_test = mnist.test.labels" "y_test = y_test"
] ]
}, },
{ {
@@ -21907,7 +21917,7 @@
"with tf.Session() as sess:\n", "with tf.Session() as sess:\n",
" init.run()\n", " init.run()\n",
" for epoch in range(n_epochs):\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", " 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", " loss_val, _ = sess.run([loss, training_op], feed_dict={X: X_batch, y: y_batch})\n",
" print(epoch, \"훈련 손실:\", loss_val)\n", " print(epoch, \"훈련 손실:\", loss_val)\n",
@@ -22142,7 +22152,7 @@
"name": "python", "name": "python",
"nbconvert_exporter": "python", "nbconvert_exporter": "python",
"pygments_lexer": "ipython3", "pygments_lexer": "ipython3",
"version": "3.5.5" "version": "3.6.5"
}, },
"nav_menu": { "nav_menu": {
"height": "360px", "height": "360px",