{"id":9059,"date":"2020-04-03T06:59:47","date_gmt":"2020-04-02T21:59:47","guid":{"rendered":"http:\/\/www.gisdeveloper.co.kr\/?p=9059"},"modified":"2020-05-28T09:35:55","modified_gmt":"2020-05-28T00:35:55","slug":"tensorflow2%eb%a5%bc-%ec%9d%b4%ec%9a%a9%ed%95%9c-%ea%b0%84%eb%8b%a8%ed%95%9c-%ed%9a%8c%ea%b7%80%eb%b6%84%ec%84%9d-%ec%83%98%ed%94%8c","status":"publish","type":"post","link":"http:\/\/www.gisdeveloper.co.kr\/?p=9059","title":{"rendered":"TensorFlow2\ub97c \uc774\uc6a9\ud55c \uac04\ub2e8\ud55c \ud68c\uadc0\ubd84\uc11d"},"content":{"rendered":"<p>TensorFlow v2\uac00 \uc815\uc2dd\ubc84\uc804\uc73c\ub85c \ubc30\ud3ec\ub41c\uc9c0 \uba87\ub2ec\uc774 \uc9c0\ub0ac\uc2b5\ub2c8\ub2e4. \ud544\uc790\ub294 \ub525\ub7ec\ub2dd \ub77c\uc774\ube0c\ub7ec\ub9ac\ub85c PyTorch\ub97c \uc8fc\ub825\uc73c\ub85c \ud558\uace0 \uc788\uc73c\ub098, TensorFlow\ub85c \ub9cc\ub4e4\uc5b4\uc9c4 \ub9ce\uc740 \ucf54\ub4dc \ubd84\uc11d \ubc0f \ud611\uc5c5\uc744 \uc704\ud574 TensorFlow\uc5d0 \ub300\ud55c API\ub3c4 \uad00\uc2ec\uc774 \ub9ce\uc2b5\ub2c8\ub2e4. \uc774 \uae00\uc5d0\uc11c\ub294 TensorFlow \ubc84\uc8042\uc5d0\uc11c sin \ud568\uc218\uc5d0 \ub300\ud55c \ud68c\uadc0\ubd84\uc11d\uc5d0 \ub300\ud55c \uc0d8\ud50c \ucf54\ub4dc\ub97c \uc124\uba85\ud569\ub2c8\ub2e4.<\/p>\n<p>\ud544\uc694\ud55c \ud328\ud0a4\uc9c0\uc5d0 \ub300\ud55c import \ubc0f \ud6c8\ub828 \ub370\uc774\ud130\uc640 \ud14c\uc2a4\ud2b8 \ub370\uc774\ud130\ub97c \uc544\ub798 \ucf54\ub4dc\ub97c \ud1b5\ud574 \uc900\ube44\ud569\ub2c8\ub2e4.<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"python\">\r\nimport numpy as np\r\nimport matplotlib.pyplot as plt\r\nfrom tensorflow.keras.models import Sequential\r\nfrom tensorflow.keras.layers import Dense\r\nfrom tensorflow.keras.optimizers import SGD, RMSprop, Adam\r\nfrom tensorflow.keras import metrics\r\n\r\nnp.random.seed(0)\r\n\r\ntrain_x = np.linspace(0,np.pi*2,10).reshape(10,1)\r\ntrain_y = np.sin(train_x)\r\ntest_x = np.linspace(0,np.pi*2,100).reshape(100,1)\r\ntest_y = np.sin(test_x)\r\n<\/pre>\n<p>sin \ud568\uc218\uc5d0 \ub300\ud55c \ud68c\uadc0\ubd84\uc11d\uc744 \uc704\ud55c \uc2e0\uacbd\ub9dd \ubaa8\ub378\uc740 \ub2e4\uc74c\uacfc \uac19\uc2b5\ub2c8\ub2e4.<\/p>\n<p><img decoding=\"async\" src=\"http:\/\/www.gisdeveloper.co.kr\/wp-content\/uploads\/2020\/04\/dnn_simple.png\" alt=\"\" width=\"600\" class=\"aligncenter size-full wp-image-9062\" \/><\/p>\n<p>sin \ud568\uc218\ub294 1\uac1c\uc758 \uc785\ub825\uac12\uc744 \ubc1b\uc544 1\uac1c\uc758 \ucd9c\ub825\uac12\uc744 \uac00\uc9c0\ubbc0\ub85c \uc785\ub825\uce35\uacfc \ucd9c\ub825\uce35\uc758 \ub274\ub7f0 \uac1c\uc218\ub294 1\uac1c\uc785\ub2c8\ub2e4. \uc911\uac04\uc758 \uc740\ub2c9\uce35\uc758 \ub274\ub7f0\uc740 \uc784\uc758\ub85c 2\uac1c\ub85c \uc7a1\uc558\uc2b5\ub2c8\ub2e4. \uc774 \uc2e0\uacbd\ub9dd \ubaa8\ub378\uc744 \uad6c\uc131\ud558\ub294 \ucf54\ub4dc\ub294 \ub2e4\uc74c\uacfc \uac19\uc2b5\ub2c8\ub2e4.<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"python\">\r\ninput_nodes = 1\r\nhidden_nodes = 2\r\noutput_nodes = 1\r\n\r\nmodel = Sequential()\r\n\r\nmodel.add(Dense(hidden_nodes, input_dim=input_nodes, activation='sigmoid'))\r\nmodel.add(Dense(output_nodes))\r\n\r\nprint(model.summary())\r\n<\/pre>\n<p>\ubaa8\ub378 \uc0c1\uc138 \uc815\ubcf4\uac00 \ucf58\uc194\uc5d0 \ud45c\uc2dc\ub418\ub294\ub370, \ub2e4\uc74c\uacfc \uac19\uc2b5\ub2c8\ub2e4.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/www.gisdeveloper.co.kr\/wp-content\/uploads\/2020\/04\/model_simple_summary.png\" alt=\"\" width=\"632\" height=\"234\" class=\"aligncenter size-full wp-image-9065\" \/><\/p>\n<p>\ud30c\ub77c\uba54\ud130\uc758 \uac1c\uc218\ub294 \uac00\uc911\uce58 w \ubfd0\ub9cc \uc544\ub2c8\ub77c \ud3b8\ucc28\uac12\uc778 b \uac12\ub3c4 \uace0\ub824\ud574\uc57c \ud569\ub2c8\ub2e4.<\/p>\n<p>\uc2e0\uacbd\ub9dd\uc744 \ud559\uc2b5\ud560 \uac83\uc778\ub370, \ud559\uc2b5\uc5d0 \uc0ac\uc6a9\ud560 \ucd5c\uc801\ud654 \ubc29\uc2dd\uc73c\ub85c 4\uac00\uc9c0\ub97c \uc0ac\uc6a9\ud569\ub2c8\ub2e4. \uc544\ub798 \ucf54\ub4dc\uc5d0 \uc0ac\uc6a9\ud560 \ucd5c\uc801\ud654 \ubc29\ubc95\uc5d0 \ub300\ud55c \uad6c\uccb4\uc801\uc778 \ucf54\ub4dc\ub294 \ub2e4\uc74c\uacfc \uac19\uc2b5\ub2c8\ub2e4.<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"python\">\r\noptimizers = {\r\n    'SGD': SGD(lr=0.1),\r\n    'Momentum': SGD(lr=0.1, momentum=0.9), \r\n    'RMSProp': RMSprop(lr=0.01),\r\n    'Adam': Adam(lr=0.01)\r\n}\r\n<\/pre>\n<p>\ub2e4\uc74c \ucf54\ub4dc\ub294 \ud559\uc2b5\uc785\ub2c8\ub2e4.<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"python\">\r\ntrain_results = []\r\ntrain_y_predicted = []\r\ntest_y_predicted = []\r\n\r\nfor optimizer_name, optimizer in optimizers.items():\r\n    print(optimizer_name, 'Training ...')\r\n\r\n    model.compile(optimizer=optimizer, loss='mean_squared_error', metrics=['mse'])\r\n\r\n    result = model.fit(train_x, train_y, epochs=1000, verbose=0)\r\n    train_results.append(result)\r\n\r\n    train_result = model.predict(train_x)    \r\n    train_y_predicted.append(train_result)\r\n\r\n    test_result = model.predict(test_x)\r\n    test_y_predicted.append(test_result)\r\n<\/pre>\n<p>\uc704\uc758 \ucf54\ub4dc \uc911 8\ubc88\uc758 model.compile\uc740 \ubaa8\ub378 \ud559\uc2b5\ud558\uae30 \uc704\ud574 \uba3c\uc800 \ud638\ucd9c\ud574\uc57c \ud558\ub294 \ucf54\ub4dc\uc785\ub2c8\ub2e4. \uc778\uc790\ub85c loss\uc640 metrics\uac00 \uc788\ub294\ub370, \uac01\uac01 \uac00\uc9c8 \uc218 \uc788\ub294 \uac12\uc740 &#8216;mean_squared_error'(\uc8fc\ub85c \ud68c\uadc0\uc6a9), &#8216;categorilcal_crossentropy'(\uc8fc\ub85c \ub2e4\uc911\ubd84\ub958), binary_crossentropy'(\uc8fc\ub85c \uc774\uc9c4\ubd84\ub958) \ub4f1\uacfc &#8216;mse'(\uc8fc\ub85c \ud68c\uadc0\uc6a9), &#8216;accuracy'(\uc8fc\ub85c \ubd84\ub958\uc6a9) \ub4f1\uc785\ub2c8\ub2e4. \uadf8\ub9ac\uace0 \uc2e4\uc81c \ud559\uc2b5\uc740 10\ubc88 \ucf54\ub4dc\ub97c \ud1b5\ud574 \uc774\ub904\uc9d1\ub2c8\ub2e4. \ub2e8 1\uc904\ub85c \ub9d0\uc785\ub2c8\ub2e4. \uc774 \ubd80\ubd84\uc740 \ucf00\ub77c\uc2a4\uc758 \uc7a5\uc810\uc774\uc8e0. model.fit \ud568\uc218\uc758 \uacb0\uacfc\uac12\uc740 \uc190\uc2e4\uac12\uacfc \uc815\ud655\ub3c4\uc5d0 \ub300\ud55c \uac12\uc744 \ud3ec\ud568\ud569\ub2c8\ub2e4. 13\ubc88 \ucf54\ub4dc\uc640 16\ubc88 \ucf54\ub4dc\ub294 \ud6c8\ub828\ub41c \ubaa8\ub378\uc744 \ud1b5\ud574 \uc2e4\uc81c \uacc4\uc0b0\uc744 \uc218\ud589\ud558\ub294 \ucf54\ub4dc\uc785\ub2c8\ub2e4. \uac01\uac01 \ud559\uc2b5 \ub370\uc774\ud130\uc640 \ud14c\uc2a4\ud2b8 \ub370\uc774\ud130\ub85c \uacc4\uc0b0\uc744 \uc218\ud589\ud574 \uadf8 \uacb0\uacfc\ub97c \ubc30\uc5f4\uc5d0 \ub2f4\uc2b5\ub2c8\ub2e4.<\/p>\n<p>\uc55e\uc758 \ucf54\ub4dc\uc5d0\uc11c\ub294 \uc911\uac04 \uacb0\uacfc\ub97c \ubc30\uc5f4\uc5d0 \ub2f4\uc558\ub294\ub370\uc694. \uc774\ub807\uac8c \ub2f4\uc740 \ubc30\uc5f4\uc740 \ucd5c\uc885 \uacb0\uacfc \uadf8\ub798\ud504\ub97c \uc0dd\uc131\ud558\uae30 \uc704\ud574 \ub2e4\uc74c\ucc98\ub7fc \uc0ac\uc6a9\ub429\ub2c8\ub2e4.<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"python\">\r\nfig, axes = plt.subplots(3,1)\r\naxes[0].plot(train_x, train_y, '-o', label = 'sin(x)')\r\nfor i, optimizer_name in enumerate(optimizers.keys()):\r\n    axes[0].plot(train_x, train_y_predicted[i], '--', label=optimizer_name)\r\naxes[0].legend()    \r\n\r\naxes[1].plot(test_x, test_y, '-o', label = 'sin(x)')\r\nfor i, optimizer_name in enumerate(optimizers.keys()):\r\n    axes[1].plot(test_x, test_y_predicted[i], '--', label=optimizer_name)\r\naxes[1].legend()\r\n\r\nfor i, optimizer_name in enumerate(optimizers.keys()):\r\n    axes[2].plot(train_results[i].history['loss'], '--', label=optimizer_name)\r\naxes[2].legend()\r\n\r\nplt.show()\r\n<\/pre>\n<p>\uacb0\uacfc\ub294 \ub2e4\uc74c\uacfc \uac19\uc2b5\ub2c8\ub2e4.<\/p>\n<p><img decoding=\"async\" src=\"http:\/\/www.gisdeveloper.co.kr\/wp-content\/uploads\/2020\/04\/model_simple_result.png\" alt=\"\" width=\"800\" class=\"aligncenter size-full wp-image-9066\" \/><\/p>\n<p>\uc774 \uacbd\uc6b0 Momentum\uc640 RMSprop\uc758 \uc7a5\uc810\uc744 \uc11e\uc740 Adam \ucd5c\uc801\ud654 \ubc29\uc2dd\uc774 \uac00\uc7a5 \uc88b\uc740 \uacb0\uacfc\ub97c \uc81c\uacf5\ud558\ub294 \uac83\uc744 \uc54c \uc218 \uc788\uc2b5\ub2c8\ub2e4.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>TensorFlow v2\uac00 \uc815\uc2dd\ubc84\uc804\uc73c\ub85c \ubc30\ud3ec\ub41c\uc9c0 \uba87\ub2ec\uc774 \uc9c0\ub0ac\uc2b5\ub2c8\ub2e4. \ud544\uc790\ub294 \ub525\ub7ec\ub2dd \ub77c\uc774\ube0c\ub7ec\ub9ac\ub85c PyTorch\ub97c \uc8fc\ub825\uc73c\ub85c \ud558\uace0 \uc788\uc73c\ub098, TensorFlow\ub85c \ub9cc\ub4e4\uc5b4\uc9c4 \ub9ce\uc740 \ucf54\ub4dc \ubd84\uc11d \ubc0f \ud611\uc5c5\uc744 \uc704\ud574 TensorFlow\uc5d0 \ub300\ud55c API\ub3c4 \uad00\uc2ec\uc774 \ub9ce\uc2b5\ub2c8\ub2e4. \uc774 \uae00\uc5d0\uc11c\ub294 TensorFlow \ubc84\uc8042\uc5d0\uc11c sin \ud568\uc218\uc5d0 \ub300\ud55c \ud68c\uadc0\ubd84\uc11d\uc5d0 \ub300\ud55c \uc0d8\ud50c \ucf54\ub4dc\ub97c \uc124\uba85\ud569\ub2c8\ub2e4. \ud544\uc694\ud55c \ud328\ud0a4\uc9c0\uc5d0 \ub300\ud55c import \ubc0f \ud6c8\ub828 \ub370\uc774\ud130\uc640 \ud14c\uc2a4\ud2b8 \ub370\uc774\ud130\ub97c \uc544\ub798 \ucf54\ub4dc\ub97c \ud1b5\ud574 \uc900\ube44\ud569\ub2c8\ub2e4. import numpy as np &hellip; <\/p>\n<p class=\"link-more\"><a href=\"http:\/\/www.gisdeveloper.co.kr\/?p=9059\" class=\"more-link\">\ub354 \ubcf4\uae30<span class=\"screen-reader-text\"> &#8220;TensorFlow2\ub97c \uc774\uc6a9\ud55c \uac04\ub2e8\ud55c \ud68c\uadc0\ubd84\uc11d&#8221;<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[133,132],"tags":[],"class_list":["post-9059","post","type-post","status-publish","format-standard","hentry","category-tensorflow","category-deep-machine-learning"],"_links":{"self":[{"href":"http:\/\/www.gisdeveloper.co.kr\/index.php?rest_route=\/wp\/v2\/posts\/9059","targetHints":{"allow":["GET"]}}],"collection":[{"href":"http:\/\/www.gisdeveloper.co.kr\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"http:\/\/www.gisdeveloper.co.kr\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"http:\/\/www.gisdeveloper.co.kr\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"http:\/\/www.gisdeveloper.co.kr\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=9059"}],"version-history":[{"count":8,"href":"http:\/\/www.gisdeveloper.co.kr\/index.php?rest_route=\/wp\/v2\/posts\/9059\/revisions"}],"predecessor-version":[{"id":9324,"href":"http:\/\/www.gisdeveloper.co.kr\/index.php?rest_route=\/wp\/v2\/posts\/9059\/revisions\/9324"}],"wp:attachment":[{"href":"http:\/\/www.gisdeveloper.co.kr\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=9059"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/www.gisdeveloper.co.kr\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=9059"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/www.gisdeveloper.co.kr\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=9059"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}