{"id":948,"date":"2020-09-28T01:25:39","date_gmt":"2020-09-27T16:25:39","guid":{"rendered":"http:\/\/leenux.kr\/?p=948"},"modified":"2020-09-30T16:08:44","modified_gmt":"2020-09-30T07:08:44","slug":"tensorflow-optimization-training-expert","status":"publish","type":"post","link":"https:\/\/leenux.kr\/?p=948","title":{"rendered":"Tensorflow keras MNIST image of Model Optimization &#038; Training (Expert)"},"content":{"rendered":"\n<p style=\"text-align:center\" class=\"has-text-color has-large-font-size has-very-dark-gray-color\"><strong>Tensorflow \uacf5\uc2dd \uc608\uc81c \uc0ac\uc774\ud2b8<\/strong> <strong>\uc774\ubbf8\uc9c0 \ubd84\uc11d                                                       \ucd08\ubcf4\uc790 \uc608\uc81c <\/strong>  <\/p>\n\n\n\n<p style=\"text-align:center\"><a href=\"https:\/\/www.tensorflow.org\/tutorials\/quickstart\/advanced\"><strong>https:\/\/www.tensorflow.org\/tutorials\/quickstart\/advanced<\/strong><\/a><\/p>\n\n\n\n<p class=\"has-text-color has-medium-font-size has-very-dark-gray-color\"><strong>\ub77c\uc774\ube0c\ub7ec\ub9ac Import<\/strong><\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>import tensorflow as tf\nfrom tensorflow.keras import layers\nfrom tensorflow.keras import datasets\nimport matplotlib.pyplot as plt\n%matplotlib inline <\/code><\/pre>\n\n\n\n<p class=\"has-text-color has-large-font-size has-very-dark-gray-color\"><strong>\ud559\uc2b5 \uacfc\uc815 \ub3cc\uc544\ubcf4\uae30<\/strong><\/p>\n\n\n\n<figure class=\"wp-block-image\"><img loading=\"lazy\" width=\"903\" height=\"284\" src=\"https:\/\/leenux.kro.kr\/wp-content\/uploads\/2020\/09\/image-38.png\" alt=\"\" class=\"wp-image-963\" srcset=\"https:\/\/leenux.kr\/wp-content\/uploads\/2020\/09\/image-38.png 903w, https:\/\/leenux.kr\/wp-content\/uploads\/2020\/09\/image-38-300x94.png 300w, https:\/\/leenux.kr\/wp-content\/uploads\/2020\/09\/image-38-768x242.png 768w, https:\/\/leenux.kr\/wp-content\/uploads\/2020\/09\/image-38-830x261.png 830w, https:\/\/leenux.kr\/wp-content\/uploads\/2020\/09\/image-38-230x72.png 230w, https:\/\/leenux.kr\/wp-content\/uploads\/2020\/09\/image-38-350x110.png 350w, https:\/\/leenux.kr\/wp-content\/uploads\/2020\/09\/image-38-480x151.png 480w\" sizes=\"(max-width: 903px) 100vw, 903px\" \/><\/figure>\n\n\n\n<p class=\"has-text-color has-huge-font-size has-very-dark-gray-color\"><strong>Build Model<\/strong><\/p>\n\n\n\n<figure class=\"wp-block-image\"><img loading=\"lazy\" width=\"1024\" height=\"283\" src=\"https:\/\/leenux.kro.kr\/wp-content\/uploads\/2020\/09\/image-39-1024x283.png\" alt=\"\" class=\"wp-image-964\" srcset=\"https:\/\/leenux.kr\/wp-content\/uploads\/2020\/09\/image-39-1024x283.png 1024w, https:\/\/leenux.kr\/wp-content\/uploads\/2020\/09\/image-39-300x83.png 300w, https:\/\/leenux.kr\/wp-content\/uploads\/2020\/09\/image-39-768x213.png 768w, https:\/\/leenux.kr\/wp-content\/uploads\/2020\/09\/image-39-830x230.png 830w, https:\/\/leenux.kr\/wp-content\/uploads\/2020\/09\/image-39-230x64.png 230w, https:\/\/leenux.kr\/wp-content\/uploads\/2020\/09\/image-39-350x97.png 350w, https:\/\/leenux.kr\/wp-content\/uploads\/2020\/09\/image-39-480x133.png 480w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<pre class=\"wp-block-code\"><code>input_shape = (28, 28, 1)\nnum_classes = 10\n\ninputs = layers.Input(input_shape, dtype=tf.float32)\nnet = layers.Conv2D(32, (3, 3), padding='SAME')(inputs)\nnet = layers.Activation('relu')(net)\nnet = layers.Conv2D(32, (3, 3), padding='SAME')(net)\nnet = layers.Activation('relu')(net)\nnet = layers.MaxPooling2D(pool_size=(2, 2))(net)\nnet = layers.Dropout(0.5)(net)\n\nnet = layers.Conv2D(64, (3, 3), padding='SAME')(net)\nnet = layers.Activation('relu')(net)\nnet = layers.Conv2D(64, (3, 3), padding='SAME')(net)\nnet = layers.Activation('relu')(net)\nnet = layers.MaxPooling2D(pool_size=(2, 2))(net)\nnet = layers.Dropout(0.5)(net)\n\nnet = layers.Flatten()(net)\nnet = layers.Dense(512)(net)\nnet = layers.Activation('relu')(net)\nnet = layers.Dropout(0.5)(net)\nnet = layers.Dense(num_classes)(net)\nnet = layers.Activation('softmax')(net)\n\nmodel = tf.keras.Model(inputs=inputs, outputs=net, name='Basic_CNN')<\/code><\/pre>\n\n\n\n<hr class=\"wp-block-separator is-style-wide\"\/>\n\n\n\n<pre class=\"wp-block-code\"><code>mnist = tf.keras.datasets.mnist\n\n# Load Data from MNIST\n(train_x, train_y), (test_x, test_y) = mnist.load_data()\n\n# \ucc28\uc6d0 \ucd94\uac00\ntrain_x = train_x[...,tf.newaxis]\ntest_x = test_x[...,tf.newaxis]\n\n# Data Normalization\ntrain_x, test_x = train_x \/ 255 , test_x \/255\n\ntf.print(train_x.dtype)\ntf.print(train_x.shape)<\/code><\/pre>\n\n\n\n<figure class=\"wp-block-image is-resized\"><img loading=\"lazy\" src=\"https:\/\/leenux.kro.kr\/wp-content\/uploads\/2020\/09\/image-41.png\" alt=\"\" class=\"wp-image-967\" width=\"421\" height=\"119\"\/><figcaption><strong>print \uac12<\/strong><\/figcaption><\/figure>\n\n\n\n<p class=\"has-text-color has-medium-font-size has-very-dark-gray-color\"><strong>\uc774\ubbf8\uc9c0 \ud655\uc778<\/strong><\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>plt.imshow(train_x[0, :, : , 0])\nplt.show()\ntrain_x.shape<\/code><\/pre>\n\n\n\n<figure class=\"wp-block-image is-resized\"><img loading=\"lazy\" src=\"https:\/\/leenux.kro.kr\/wp-content\/uploads\/2020\/09\/image-40.png\" alt=\"\" class=\"wp-image-966\" width=\"282\" height=\"303\" srcset=\"https:\/\/leenux.kr\/wp-content\/uploads\/2020\/09\/image-40.png 243w, https:\/\/leenux.kr\/wp-content\/uploads\/2020\/09\/image-40-230x247.png 230w\" sizes=\"(max-width: 282px) 100vw, 282px\" \/><\/figure>\n\n\n\n<p class=\"has-text-color has-large-font-size has-very-dark-gray-color\"><strong>tf.data.Dataset.from_tensor_slices<\/strong><\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>train_ds = tf.data.Dataset.from_tensor_slices((train_x, train_y))\ntrain_ds = train_ds.shuffle(1000)\ntrain_ds = train_ds.batch(32)\n\ntest_ds = tf.data.Dataset.from_tensor_slices((test_x, test_y))\ntest_ds = test_ds.batch(32)<\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code\"><code>for image, label in train_ds.take(2):\n    tf.print(image.shape)\n    tf.print(label[0])\n    plt.imshow(image[0, :, :, 0])\n    plt.colorbar()\n    plt.show()<\/code><\/pre>\n\n\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter is-resized\"><img loading=\"lazy\" src=\"https:\/\/leenux.kro.kr\/wp-content\/uploads\/2020\/09\/image-45.png\" alt=\"\" class=\"wp-image-986\" width=\"289\" height=\"672\" srcset=\"https:\/\/leenux.kr\/wp-content\/uploads\/2020\/09\/image-45.png 283w, https:\/\/leenux.kr\/wp-content\/uploads\/2020\/09\/image-45-129x300.png 129w, https:\/\/leenux.kr\/wp-content\/uploads\/2020\/09\/image-45-230x535.png 230w\" sizes=\"(max-width: 289px) 100vw, 289px\" \/><\/figure><\/div>\n\n\n\n<pre class=\"wp-block-code\"><code>image ,label = next(iter(train_ds))\nimage.shape, image.dtype, label.shape, label.dtype\n\nfor image, label in train_ds.take(2):\n    plt.title(str(label[0]))\n    plt.imshow(image[0,:, :, 0], 'gray')\n    plt.colorbar()\n    plt.show()<\/code><\/pre>\n\n\n\n<p class=\"has-text-color has-medium-font-size has-very-dark-gray-color\"><strong>Keras \ucd08\ubcf4\uc790\uc6a9 \ubd80\ubd84\uc5d0\uc11c \uc0ac\uc6a9\ud588\ub358 fit\ubd80\ubd84\uc5d0 train_x, train_y\ub97c \ub123\uc5b4\uc8fc\uc9c0 \uc54a\uace0 \ubc14\ub85c train_ds\uc744 \ub123\uc5b4\uc904 \uc218 \uc788\ub2e4 \uadf8 \uc774\uc720\ub294 train_ds\ub294 generator Type\uc774\uae30 \ub584\ubb38\uc774\ub2e4. <\/strong><\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>model.compile(optimizer='adam', loss='sparse_categorical_crossentropy')\nmodel.fit(train_ds, epochs= 1)<\/code><\/pre>\n\n\n\n<h1 id=\"Optimization\">Optimization<\/h1>\n\n\n\n<pre class=\"wp-block-code\"><code>loss_object = tf.keras.losses.SparseCategoricalCrossentropy()\n\nopt = tf.keras.optimizers.Adam()\n\ntrain_loss = tf.keras.metrics.Mean(name='train_loss') # \ud3c9\uade0\uc73c\ub85c \uacc4\uc0b0\ntrain_accuracy = tf.keras.metrics.SparseCategoricalAccuracy(name='train_accuracy')\n\ntest_loss = tf.keras.metrics.Mean(name='test_loss')\ntest_accuracy = tf.keras.metrics.SparseCategoricalAccuracy(name='test_accuracy')<\/code><\/pre>\n\n\n\n<h1 id=\"Training\">Training<\/h1>\n\n\n\n<p class=\"has-text-color has-very-dark-gray-color\"><strong> @tf.function : \uae30\uc874 session \uc5f4\uc5c8\ub358 \uac83\ucc98\ub7fc \ubc14\ub85c \uc791\ub3d9 \uc548 \ud558\uace0, \uadf8\ub798\ud504\ub9cc \ub9cc\ub4e4\uace0 \ud559\uc2b5\uc774 \uc2dc\uc791\ub418\uba74 \ub3cc\uc544\uac00\ub3c4\ub85d \ud568 <\/strong><\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>@tf.function\ndef train_step(images, labels):\n    with tf.GradientTape() as tape:\n        predictions = model(images)\n        loss = loss_object(labels, predictions)\n    gradients = tape.gradient(loss, model.trainable_variables)\n    opt.apply_gradients(zip(gradients, model.trainable_variables))\n    \n    train_loss(loss) #\ud3c9\uade0 \uac12\uc744 \ub0bc \uc218 \uc788\ub3c4\ub85d\n    train_accuracy(labels, predictions)\n\n@tf.function\ndef test_step(images, labels):\n    predictions = model(images)\n    t_loss = loss_object(labels, predictions)\n    \n    test_loss(t_loss)\n    test_accuracy(labels, predictions)<\/code><\/pre>\n\n\n\n<p class=\"has-text-color has-large-font-size has-very-dark-gray-color\"><strong>\ud559\uc2b5 \uc2dc\uc791<\/strong><\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>for epoch in range(1):\n    for image, label in train_ds:\n        train_step(image, label)\n        \n    for test_image, test_label in test_ds:\n        test_step(test_image, test_label)\n        \n    template = 'Epoch {}, Loss : {}, Accuracy : {}, Test Loss {}, Test Accuracy : {}'\n    tf.print(template.format(epoch + 1,\n                            train_loss.result(),\n                            train_accuracy.result() * 100,\n                            test_loss.result(),\n                            test_accuracy.result() * 100))<\/code><\/pre>\n\n\n\n<figure class=\"wp-block-image\"><img loading=\"lazy\" width=\"880\" height=\"42\" src=\"https:\/\/leenux.kro.kr\/wp-content\/uploads\/2020\/09\/image-48.png\" alt=\"\" class=\"wp-image-993\" srcset=\"https:\/\/leenux.kr\/wp-content\/uploads\/2020\/09\/image-48.png 880w, https:\/\/leenux.kr\/wp-content\/uploads\/2020\/09\/image-48-300x14.png 300w, https:\/\/leenux.kr\/wp-content\/uploads\/2020\/09\/image-48-768x37.png 768w, https:\/\/leenux.kr\/wp-content\/uploads\/2020\/09\/image-48-830x40.png 830w, https:\/\/leenux.kr\/wp-content\/uploads\/2020\/09\/image-48-230x11.png 230w, https:\/\/leenux.kr\/wp-content\/uploads\/2020\/09\/image-48-350x17.png 350w, https:\/\/leenux.kr\/wp-content\/uploads\/2020\/09\/image-48-480x23.png 480w\" sizes=\"(max-width: 880px) 100vw, 880px\" \/><\/figure>\n","protected":false},"excerpt":{"rendered":"<p>Tensorflow \uacf5\uc2dd \uc608\uc81c \uc0ac\uc774\ud2b8 \uc774\ubbf8\uc9c0 \ubd84\uc11d \ucd08\ubcf4\uc790 \uc608\uc81c https:\/\/www.tensorflow.org\/tutorials\/quickstart\/advanced \ub77c\uc774\ube0c\ub7ec\ub9ac Import \ud559\uc2b5 [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":883,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":[],"categories":[24],"tags":[],"_links":{"self":[{"href":"https:\/\/leenux.kr\/index.php?rest_route=\/wp\/v2\/posts\/948"}],"collection":[{"href":"https:\/\/leenux.kr\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/leenux.kr\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/leenux.kr\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/leenux.kr\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=948"}],"version-history":[{"count":10,"href":"https:\/\/leenux.kr\/index.php?rest_route=\/wp\/v2\/posts\/948\/revisions"}],"predecessor-version":[{"id":997,"href":"https:\/\/leenux.kr\/index.php?rest_route=\/wp\/v2\/posts\/948\/revisions\/997"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/leenux.kr\/index.php?rest_route=\/wp\/v2\/media\/883"}],"wp:attachment":[{"href":"https:\/\/leenux.kr\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=948"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/leenux.kr\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=948"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/leenux.kr\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=948"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}