diff --git a/OpenCVTensorflowDeeplearning/Chapter11/p11-10.ipynb b/OpenCVTensorflowDeeplearning/Chapter11/p11-10.ipynb index 36f1c3c..41daad4 100644 --- a/OpenCVTensorflowDeeplearning/Chapter11/p11-10.ipynb +++ b/OpenCVTensorflowDeeplearning/Chapter11/p11-10.ipynb @@ -8,7 +8,8 @@ "source": [ "import tensorflow as tf\n", "from tensorflow.examples.tutorials.mnist import input_data\n", - "import time" + "import time\n", + "import pylab" ] }, { @@ -32,7 +33,8 @@ "output_type": "stream", "text": [ "\n", - "\n" + "\n", + "Tensor(\"Sigmoid:0\", shape=(?, 28, 28, 6), dtype=float32)\n" ] } ], @@ -42,56 +44,95 @@ "print(filter1)\n", "print(bias1)\n", "conv1 = tf.nn.conv2d(x_image, filter1, strides=[1,1,1,1], padding=\"SAME\")\n", - "h_conv1 = tf.nn.sigmoid(conv1+bias1)" + "h_conv1 = tf.nn.sigmoid(conv1+bias1)\n", + "print(h_conv1)" ] }, { "cell_type": "code", "execution_count": 4, "metadata": {}, - "outputs": [], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Tensor(\"MaxPool:0\", shape=(?, 14, 14, 6), dtype=float32)\n", + "Tensor(\"Sigmoid_1:0\", shape=(?, 14, 14, 16), dtype=float32)\n" + ] + } + ], "source": [ "maxPool2 = tf.nn.max_pool(h_conv1, ksize=[1,2,2,1], strides=[1,2,2,1], padding=\"SAME\")\n", + "print(maxPool2)\n", "filter2 = tf.Variable(tf.truncated_normal([ 5, 5, 6, 16]))\n", "bias2 = tf.Variable(tf.truncated_normal([16]))\n", "conv2 = tf.nn.conv2d(maxPool2, filter2, strides=[1,1,1,1], padding=\"SAME\")\n", - "h_conv2 = tf.nn.sigmoid(conv2+bias2)" + "h_conv2 = tf.nn.sigmoid(conv2+bias2)\n", + "print(h_conv2)" ] }, { "cell_type": "code", "execution_count": 5, "metadata": {}, - "outputs": [], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Tensor(\"Sigmoid_2:0\", shape=(?, 7, 7, 120), dtype=float32)\n" + ] + } + ], "source": [ "maxPool3 = tf.nn.max_pool(h_conv2, ksize=[1,2,2,1], strides=[1,2,2,1], padding=\"SAME\")\n", "filter3 = tf.Variable(tf.truncated_normal([ 5, 5, 16, 120]))\n", "bias3 = tf.Variable(tf.truncated_normal([120]))\n", "conv3 = tf.nn.conv2d(maxPool3, filter3, strides=[1,1,1,1], padding=\"SAME\")\n", - "h_conv3 = tf.nn.sigmoid(conv3+bias3)" + "h_conv3 = tf.nn.sigmoid(conv3+bias3)\n", + "print(h_conv3)" ] }, { "cell_type": "code", "execution_count": 6, "metadata": {}, - "outputs": [], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Tensor(\"Sigmoid_3:0\", shape=(?, 80), dtype=float32)\n" + ] + } + ], "source": [ "W_fc1 = tf.Variable(tf.truncated_normal([7*7*120, 80]))\n", "b_fc1 = tf.Variable(tf.truncated_normal([80]))\n", "h_pool2_flat = tf.reshape(h_conv3, [-1, 7*7*120])\n", - "h_fc1 = tf.nn.sigmoid(tf.matmul(h_pool2_flat, W_fc1)+b_fc1)" + "h_fc1 = tf.nn.sigmoid(tf.matmul(h_pool2_flat, W_fc1)+b_fc1)\n", + "print(h_fc1)" ] }, { "cell_type": "code", "execution_count": 7, "metadata": {}, - "outputs": [], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Tensor(\"Softmax:0\", shape=(?, 10), dtype=float32)\n" + ] + } + ], "source": [ "W_fc2 = tf.Variable(tf.truncated_normal([80, 10]))\n", "b_fc2 = tf.Variable(tf.truncated_normal([10]))\n", - "y_conv = tf.nn.softmax(tf.matmul(h_fc1, W_fc2)+b_fc2)" + "y_conv = tf.nn.softmax(tf.matmul(h_fc1, W_fc2)+b_fc2)\n", + "print(y_conv)" ] }, { @@ -148,560 +189,92 @@ }, { "cell_type": "code", - "execution_count": 18, + "execution_count": 10, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ - "step 0, training accuracy 0.705\n", - "time: 0.01704692840576172\n", - "step 2, training accuracy 0.905\n", - "time: 0.13107967376708984\n", - "step 4, training accuracy 0.89\n", - "time: 0.10836124420166016\n", - "step 6, training accuracy 0.9\n", - "time: 0.10777783393859863\n", - "step 8, training accuracy 0.925\n", - "time: 0.09373641014099121\n", - "step 10, training accuracy 0.925\n", - "time: 0.11742401123046875\n", - "step 12, training accuracy 0.91\n", - "time: 0.11457157135009766\n", - "step 14, training accuracy 0.915\n", - "time: 0.11004400253295898\n", - "step 16, training accuracy 0.925\n", - "time: 0.10191559791564941\n", - "step 18, training accuracy 0.935\n", - "time: 0.1108860969543457\n", - "step 20, training accuracy 0.93\n", - "time: 0.10508370399475098\n", - "step 22, training accuracy 0.915\n", - "time: 0.11319732666015625\n", - "step 24, training accuracy 0.91\n", - "time: 0.10263538360595703\n", - "step 26, training accuracy 0.94\n", - "time: 0.10445237159729004\n", - "step 28, training accuracy 0.92\n", - "time: 0.11983990669250488\n", - "step 30, training accuracy 0.91\n", - "time: 0.12150430679321289\n", - "step 32, training accuracy 0.905\n", - "time: 0.10926222801208496\n", - "step 34, training accuracy 0.95\n", - "time: 0.08963298797607422\n", - "step 36, training accuracy 0.925\n", - "time: 0.10494542121887207\n", - "step 38, training accuracy 0.93\n", - "time: 0.11068010330200195\n", - "step 40, training accuracy 0.915\n", - "time: 0.10991883277893066\n", - "step 42, training accuracy 0.95\n", - "time: 0.10949873924255371\n", - "step 44, training accuracy 0.935\n", - "time: 0.12345170974731445\n", - "step 46, training accuracy 0.91\n", - "time: 0.10860395431518555\n", - "step 48, training accuracy 0.91\n", - "time: 0.11831259727478027\n", - "step 50, training accuracy 0.955\n", - "time: 0.11636066436767578\n", - "step 52, training accuracy 0.925\n", - "time: 0.11949563026428223\n", - "step 54, training accuracy 0.915\n", - "time: 0.10495924949645996\n", - "step 56, training accuracy 0.915\n", - "time: 0.12398362159729004\n", - "step 58, training accuracy 0.94\n", - "time: 0.11104846000671387\n", - "step 60, training accuracy 0.915\n", - "time: 0.10855817794799805\n", - "step 62, training accuracy 0.915\n", - "time: 0.1302328109741211\n", - "step 64, training accuracy 0.93\n", - "time: 0.11506342887878418\n", - "step 66, training accuracy 0.965\n", - "time: 0.11609911918640137\n", - "step 68, training accuracy 0.925\n", - "time: 0.0978555679321289\n", - "step 70, training accuracy 0.92\n", - "time: 0.10761857032775879\n", - "step 72, training accuracy 0.925\n", - "time: 0.1230933666229248\n", - "step 74, training accuracy 0.935\n", - "time: 0.09918093681335449\n", - "step 76, training accuracy 0.93\n", - "time: 0.10453987121582031\n", - "step 78, training accuracy 0.885\n", - "time: 0.10350346565246582\n", - "step 80, training accuracy 0.945\n", - "time: 0.10079765319824219\n", - "step 82, training accuracy 0.915\n", - "time: 0.09791779518127441\n", - "step 84, training accuracy 0.92\n", - "time: 0.09688663482666016\n", - "step 86, training accuracy 0.92\n", - "time: 0.12292313575744629\n", - "step 88, training accuracy 0.945\n", - "time: 0.10340332984924316\n", - "step 90, training accuracy 0.935\n", - "time: 0.09739494323730469\n", - "step 92, training accuracy 0.905\n", - "time: 0.11700177192687988\n", - "step 94, training accuracy 0.915\n", - "time: 0.11342763900756836\n", - "step 96, training accuracy 0.92\n", - "time: 0.12069916725158691\n", - "step 98, training accuracy 0.92\n", - "time: 0.1186974048614502\n", - "step 100, training accuracy 0.91\n", - "time: 0.1054840087890625\n", - "step 102, training accuracy 0.95\n", - "time: 0.11120080947875977\n", - "step 104, training accuracy 0.89\n", - "time: 0.10680508613586426\n", - "step 106, training accuracy 0.925\n", - "time: 0.1178288459777832\n", - "step 108, training accuracy 0.925\n", - "time: 0.11186814308166504\n", - "step 110, training accuracy 0.94\n", - "time: 0.10864400863647461\n", - "step 112, training accuracy 0.87\n", - "time: 0.10663127899169922\n", - "step 114, training accuracy 0.93\n", - "time: 0.1162261962890625\n", - "step 116, training accuracy 0.945\n", - "time: 0.11064934730529785\n", - "step 118, training accuracy 0.87\n", - "time: 0.12678122520446777\n", - "step 120, training accuracy 0.94\n", - "time: 0.1320188045501709\n", - "step 122, training accuracy 0.93\n", - "time: 0.11083483695983887\n", - "step 124, training accuracy 0.95\n", - "time: 0.09981656074523926\n", - "step 126, training accuracy 0.92\n", - "time: 0.10377812385559082\n", - "step 128, training accuracy 0.955\n", - "time: 0.10451841354370117\n", - "step 130, training accuracy 0.915\n", - "time: 0.11620616912841797\n", - "step 132, training accuracy 0.915\n", - "time: 0.11267995834350586\n", - "step 134, training accuracy 0.925\n", - "time: 0.09656858444213867\n", - "step 136, training accuracy 0.945\n", - "time: 0.1042788028717041\n", - "step 138, training accuracy 0.915\n", - "time: 0.11607575416564941\n", - "step 140, training accuracy 0.925\n", - "time: 0.12413406372070312\n", - "step 142, training accuracy 0.925\n", - "time: 0.11434721946716309\n", - "step 144, training accuracy 0.91\n", - "time: 0.12349700927734375\n", - "step 146, training accuracy 0.92\n", - "time: 0.15728545188903809\n", - "step 148, training accuracy 0.92\n", - "time: 0.12065768241882324\n", - "step 150, training accuracy 0.945\n", - "time: 0.1159355640411377\n", - "step 152, training accuracy 0.92\n", - "time: 0.11437678337097168\n", - "step 154, training accuracy 0.925\n", - "time: 0.11555099487304688\n", - "step 156, training accuracy 0.91\n", - "time: 0.10433292388916016\n", - "step 158, training accuracy 0.945\n", - "time: 0.11103057861328125\n", - "step 160, training accuracy 0.935\n", - "time: 0.11709833145141602\n", - "step 162, training accuracy 0.92\n", - "time: 0.10388445854187012\n", - "step 164, training accuracy 0.9\n", - "time: 0.11932063102722168\n", - "step 166, training accuracy 0.905\n", - "time: 0.10052084922790527\n", - "step 168, training accuracy 0.9\n", - "time: 0.08789277076721191\n", - "step 170, training accuracy 0.91\n", - "time: 0.1158285140991211\n", - "step 172, training accuracy 0.945\n", - "time: 0.12736272811889648\n", - "step 174, training accuracy 0.945\n", - "time: 0.10168671607971191\n", - "step 176, training accuracy 0.915\n", - "time: 0.10456132888793945\n", - "step 178, training accuracy 0.92\n", - "time: 0.12757658958435059\n", - "step 180, training accuracy 0.935\n", - "time: 0.09737277030944824\n", - "step 182, training accuracy 0.9\n", - "time: 0.11449623107910156\n", - "step 184, training accuracy 0.93\n", - "time: 0.10110712051391602\n", - "step 186, training accuracy 0.95\n", - "time: 0.10248589515686035\n", - "step 188, training accuracy 0.9\n", - "time: 0.09767580032348633\n", - "step 190, training accuracy 0.935\n", - "time: 0.11461400985717773\n", - "step 192, training accuracy 0.955\n", - "time: 0.12871193885803223\n", - "step 194, training accuracy 0.955\n", - "time: 0.11677694320678711\n", - "step 196, training accuracy 0.93\n", - "time: 0.11354398727416992\n", - "step 198, training accuracy 0.945\n", - "time: 0.10143709182739258\n", - "step 200, training accuracy 0.915\n", - "time: 0.10207486152648926\n", - "step 202, training accuracy 0.92\n", - "time: 0.10683655738830566\n", - "step 204, training accuracy 0.945\n", - "time: 0.10170388221740723\n", - "step 206, training accuracy 0.94\n", - "time: 0.11385202407836914\n", - "step 208, training accuracy 0.91\n", - "time: 0.10569190979003906\n", - "step 210, training accuracy 0.92\n", - "time: 0.09162068367004395\n", - "step 212, training accuracy 0.9\n", - "time: 0.13536906242370605\n", - "step 214, training accuracy 0.9\n", - "time: 0.11366605758666992\n", - "step 216, training accuracy 0.925\n", - "time: 0.09844255447387695\n", - "step 218, training accuracy 0.935\n", - "time: 0.09305858612060547\n", - "step 220, training accuracy 0.92\n", - "time: 0.12368369102478027\n", - "step 222, training accuracy 0.925\n", - "time: 0.11911702156066895\n", - "step 224, training accuracy 0.9\n", - "time: 0.10480237007141113\n", - "step 226, training accuracy 0.935\n", - "time: 0.11040043830871582\n", - "step 228, training accuracy 0.945\n", - "time: 0.11533260345458984\n", - "step 230, training accuracy 0.93\n", - "time: 0.13763976097106934\n", - "step 232, training accuracy 0.88\n", - "time: 0.10143899917602539\n", - "step 234, training accuracy 0.92\n", - "time: 0.11092114448547363\n", - "step 236, training accuracy 0.88\n", - "time: 0.11056280136108398\n", - "step 238, training accuracy 0.93\n", - "time: 0.10796952247619629\n", - "step 240, training accuracy 0.945\n", - "time: 0.12497997283935547\n", - "step 242, training accuracy 0.935\n", - "time: 0.10031890869140625\n", - "step 244, training accuracy 0.93\n", - "time: 0.1239619255065918\n", - "step 246, training accuracy 0.915\n", - "time: 0.10501384735107422\n", - "step 248, training accuracy 0.96\n", - "time: 0.10776734352111816\n", - "step 250, training accuracy 0.92\n", - "time: 0.09896397590637207\n", - "step 252, training accuracy 0.94\n", - "time: 0.11957550048828125\n", - "step 254, training accuracy 0.92\n", - "time: 0.10332107543945312\n", - "step 256, training accuracy 0.965\n", - "time: 0.10129666328430176\n", - "step 258, training accuracy 0.965\n", - "time: 0.118377685546875\n", - "step 260, training accuracy 0.945\n", - "time: 0.1189877986907959\n", - "step 262, training accuracy 0.91\n", - "time: 0.12173819541931152\n", - "step 264, training accuracy 0.94\n", - "time: 0.10532903671264648\n", - "step 266, training accuracy 0.925\n", - "time: 0.10413050651550293\n", - "step 268, training accuracy 0.91\n", - "time: 0.11426258087158203\n", - "step 270, training accuracy 0.915\n", - "time: 0.11562252044677734\n", - "step 272, training accuracy 0.925\n", - "time: 0.11175799369812012\n", - "step 274, training accuracy 0.915\n", - "time: 0.10446405410766602\n", - "step 276, training accuracy 0.91\n", - "time: 0.10360050201416016\n", - "step 278, training accuracy 0.94\n", - "time: 0.10213327407836914\n", - "step 280, training accuracy 0.93\n", - "time: 0.11668014526367188\n", - "step 282, training accuracy 0.955\n", - "time: 0.10018348693847656\n", - "step 284, training accuracy 0.95\n", - "time: 0.10350465774536133\n", - "step 286, training accuracy 0.95\n", - "time: 0.11078453063964844\n", - "step 288, training accuracy 0.95\n", - "time: 0.11349344253540039\n", - "step 290, training accuracy 0.91\n", - "time: 0.10992860794067383\n", - "step 292, training accuracy 0.905\n", - "time: 0.11372566223144531\n", - "step 294, training accuracy 0.93\n", - "time: 0.11033272743225098\n", - "step 296, training accuracy 0.945\n", - "time: 0.11759138107299805\n", - "step 298, training accuracy 0.93\n", - "time: 0.1295604705810547\n", - "step 300, training accuracy 0.93\n", - "time: 0.11831998825073242\n", - "step 302, training accuracy 0.945\n", - "time: 0.1200876235961914\n", - "step 304, training accuracy 0.905\n", - "time: 0.11753273010253906\n", - "step 306, training accuracy 0.905\n", - "time: 0.11483955383300781\n", - "step 308, training accuracy 0.94\n", - "time: 0.1028282642364502\n", - "step 310, training accuracy 0.91\n", - "time: 0.10479211807250977\n", - "step 312, training accuracy 0.96\n", - "time: 0.11358499526977539\n", - "step 314, training accuracy 0.905\n", - "time: 0.09818506240844727\n", - "step 316, training accuracy 0.89\n", - "time: 0.10856771469116211\n", - "step 318, training accuracy 0.905\n", - "time: 0.10776257514953613\n", - "step 320, training accuracy 0.915\n", - "time: 0.11568498611450195\n", - "step 322, training accuracy 0.95\n", - "time: 0.10616564750671387\n", - "step 324, training accuracy 0.925\n", - "time: 0.10266876220703125\n", - "step 326, training accuracy 0.925\n", - "time: 0.10267329216003418\n", - "step 328, training accuracy 0.94\n", - "time: 0.10891175270080566\n", - "step 330, training accuracy 0.93\n", - "time: 0.11040163040161133\n", - "step 332, training accuracy 0.965\n", - "time: 0.11876201629638672\n", - "step 334, training accuracy 0.935\n", - "time: 0.11878490447998047\n", - "step 336, training accuracy 0.92\n", - "time: 0.10574650764465332\n", - "step 338, training accuracy 0.94\n", - "time: 0.10715937614440918\n", - "step 340, training accuracy 0.94\n", - "time: 0.11113166809082031\n", - "step 342, training accuracy 0.955\n", - "time: 0.1255943775177002\n", - "step 344, training accuracy 0.935\n", - "time: 0.11738133430480957\n", - "step 346, training accuracy 0.93\n", - "time: 0.11298894882202148\n", - "step 348, training accuracy 0.935\n", - "time: 0.12009119987487793\n", - "step 350, training accuracy 0.945\n", - "time: 0.12256574630737305\n", - "step 352, training accuracy 0.935\n", - "time: 0.0954139232635498\n", - "step 354, training accuracy 0.935\n", - "time: 0.11026549339294434\n", - "step 356, training accuracy 0.93\n", - "time: 0.10247397422790527\n", - "step 358, training accuracy 0.92\n", - "time: 0.09898924827575684\n", - "step 360, training accuracy 0.95\n", - "time: 0.10221123695373535\n", - "step 362, training accuracy 0.96\n", - "time: 0.1295642852783203\n", - "step 364, training accuracy 0.935\n", - "time: 0.09751605987548828\n", - "step 366, training accuracy 0.955\n", - "time: 0.1022176742553711\n", - "step 368, training accuracy 0.925\n", - "time: 0.13102388381958008\n", - "step 370, training accuracy 0.94\n", - "time: 0.09484696388244629\n", - "step 372, training accuracy 0.905\n", - "time: 0.10866737365722656\n", - "step 374, training accuracy 0.93\n", - "time: 0.10682225227355957\n", - "step 376, training accuracy 0.925\n", - "time: 0.11435794830322266\n", - "step 378, training accuracy 0.935\n", - "time: 0.10883378982543945\n", - "step 380, training accuracy 0.915\n", - "time: 0.11502575874328613\n", - "step 382, training accuracy 0.925\n", - "time: 0.10561823844909668\n", - "step 384, training accuracy 0.935\n", - "time: 0.1084127426147461\n", - "step 386, training accuracy 0.915\n", - "time: 0.11942005157470703\n", - "step 388, training accuracy 0.935\n", - "time: 0.11371278762817383\n", - "step 390, training accuracy 0.915\n", - "time: 0.10322403907775879\n", - "step 392, training accuracy 0.89\n", - "time: 0.1084740161895752\n", - "step 394, training accuracy 0.93\n", - "time: 0.11333250999450684\n", - "step 396, training accuracy 0.93\n", - "time: 0.09920740127563477\n", - "step 398, training accuracy 0.92\n", - "time: 0.11229515075683594\n", - "step 400, training accuracy 0.895\n", - "time: 0.11648106575012207\n", - "step 402, training accuracy 0.92\n", - "time: 0.09299063682556152\n", - "step 404, training accuracy 0.925\n", - "time: 0.12497615814208984\n", - "step 406, training accuracy 0.93\n", - "time: 0.10181450843811035\n", - "step 408, training accuracy 0.955\n", - "time: 0.12440824508666992\n", - "step 410, training accuracy 0.96\n", - "time: 0.10227489471435547\n", - "step 412, training accuracy 0.905\n", - "time: 0.12443137168884277\n", - "step 414, training accuracy 0.9\n", - "time: 0.09655141830444336\n", - "step 416, training accuracy 0.895\n", - "time: 0.09661412239074707\n", - "step 418, training accuracy 0.91\n", - "time: 0.10608029365539551\n", - "step 420, training accuracy 0.92\n", - "time: 0.16889619827270508\n", - "step 422, training accuracy 0.94\n", - "time: 0.09836506843566895\n", - "step 424, training accuracy 0.94\n", - "time: 0.11077046394348145\n", - "step 426, training accuracy 0.915\n", - "time: 0.12543225288391113\n", - "step 428, training accuracy 0.95\n", - "time: 0.10642242431640625\n", - "step 430, training accuracy 0.93\n", - "time: 0.10939264297485352\n", - "step 432, training accuracy 0.94\n", - "time: 0.10851550102233887\n", - "step 434, training accuracy 0.92\n", - "time: 0.11436676979064941\n", - "step 436, training accuracy 0.93\n", - "time: 0.10785031318664551\n", - "step 438, training accuracy 0.925\n", - "time: 0.10460042953491211\n", - "step 440, training accuracy 0.935\n", - "time: 0.10719680786132812\n", - "step 442, training accuracy 0.925\n", - "time: 0.1130979061126709\n", - "step 444, training accuracy 0.95\n", - "time: 0.10457968711853027\n", - "step 446, training accuracy 0.945\n", - "time: 0.11559605598449707\n", - "step 448, training accuracy 0.93\n", - "time: 0.10027241706848145\n", - "step 450, training accuracy 0.92\n", - "time: 0.10322976112365723\n", - "step 452, training accuracy 0.95\n", - "time: 0.10880231857299805\n", - "step 454, training accuracy 0.935\n", - "time: 0.11996722221374512\n", - "step 456, training accuracy 0.945\n", - "time: 0.11881041526794434\n", - "step 458, training accuracy 0.93\n", - "time: 0.10190105438232422\n", - "step 460, training accuracy 0.95\n", - "time: 0.11520075798034668\n", - "step 462, training accuracy 0.905\n", - "time: 0.1102602481842041\n", - "step 464, training accuracy 0.935\n", - "time: 0.12230801582336426\n", - "step 466, training accuracy 0.935\n", - "time: 0.11761665344238281\n", - "step 468, training accuracy 0.945\n", - "time: 0.10954761505126953\n", - "step 470, training accuracy 0.935\n", - "time: 0.10953760147094727\n", - "step 472, training accuracy 0.95\n", - "time: 0.10475373268127441\n", - "step 474, training accuracy 0.935\n", - "time: 0.10163497924804688\n", - "step 476, training accuracy 0.925\n", - "time: 0.11773443222045898\n", - "step 478, training accuracy 0.955\n", - "time: 0.09942317008972168\n", - "step 480, training accuracy 0.905\n", - "time: 0.10242319107055664\n", - "step 482, training accuracy 0.955\n", - "time: 0.11259102821350098\n", - "step 484, training accuracy 0.945\n", - "time: 0.11674332618713379\n", - "step 486, training accuracy 0.905\n", - "time: 0.09789490699768066\n", - "step 488, training accuracy 0.945\n", - "time: 0.10637044906616211\n", - "step 490, training accuracy 0.92\n", - "time: 0.10806560516357422\n", - "step 492, training accuracy 0.93\n", - "time: 0.10513544082641602\n", - "step 494, training accuracy 0.93\n", - "time: 0.10350775718688965\n", - "step 496, training accuracy 0.965\n", - "time: 0.1252131462097168\n", - "step 498, training accuracy 0.95\n", - "time: 0.10700201988220215\n" + "time: 28.106985807418823\n" ] }, { "data": { "text/plain": [ - ">" + ">" ] }, - "execution_count": 18, + "execution_count": 10, "metadata": {}, "output_type": "execute_result" } ], "source": [ + "train_accuracy_list = []\n", + "train_accuracy_x = []\n", "start_time = time.time()\n", "for i in range(500):\n", " batch_xs, batch_ys = mnist_data_set.train.next_batch(200)\n", " if i%2 == 0:\n", " train_accuracy = accuracy.eval(feed_dict={x:batch_xs, y_:batch_ys})\n", - " end_time = time.time()\n", - " print(\"step %d, training accuracy %g\"%(i, train_accuracy))\n", - " print(\"time:\", (end_time-start_time))\n", - " start_time = end_time\n", + " # end_time = time.time()\n", + " train_accuracy_list.append(train_accuracy)\n", + " train_accuracy_x.append(i)\n", + " # print(\"step %d, training accuracy %g\"%(i, train_accuracy))\n", + " # print(\"time:\", (end_time-start_time))\n", + " # start_time = end_time\n", " # train_step.run(feed_dict={x:batch_xs, y_:batch_ys})\n", " sess.run(train_step, feed_dict={x:batch_xs, y_:batch_ys})\n", "\n", + "print(\"time:\", (time.time()-start_time))\n", "sess.close" ] }, { "cell_type": "code", - "execution_count": 36, + "execution_count": 11, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "pylab.plot(train_accuracy_x, train_accuracy_list)\n", + "pylab.show()" + ] + }, + { + "cell_type": "code", + "execution_count": 12, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ - "[1 2 8 0 6 0 1 0 3 3] [1 2 8 0 6 8 1 5 3 3]\n" + "time: 0.08179402351379395\n", + "[6 0 4 3 7 7 3 2 8 3] [6 0 9 3 7 7 2 2 7 8]\n" ] } ], "source": [ + "start_time = time.time()\n", "test = tf.argmax(y_conv,1)\n", "tcorrect = tf.argmax(y_,1)\n", "tbatch_xs, tbatch_ys = mnist_data_set.test.next_batch(10)\n", "test_out = test.eval(feed_dict={x:tbatch_xs})\n", + "print(\"time:\", (time.time()-start_time))\n", "print(test_out, tcorrect.eval(feed_dict={y_:tbatch_ys}))" ] }, diff --git a/OpenCVTensorflowDeeplearning/Chapter11/p11-11.ipynb b/OpenCVTensorflowDeeplearning/Chapter11/p11-11.ipynb new file mode 100644 index 0000000..cfaa383 --- /dev/null +++ b/OpenCVTensorflowDeeplearning/Chapter11/p11-11.ipynb @@ -0,0 +1,270 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [], + "source": [ + "import tensorflow as tf\n", + "from tensorflow.examples.tutorials.mnist import input_data\n", + "import time\n", + "import pylab" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [], + "source": [ + "x = tf.placeholder('float', [None, 784])\n", + "y_= tf.placeholder('float', [None, 10])\n", + "x_image = tf.reshape(x, [-1,28,28,1])" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "\n" + ] + } + ], + "source": [ + "filter1 = tf.Variable(tf.truncated_normal([ 5, 5, 1, 6]))\n", + "bias1 = tf.Variable(tf.truncated_normal([6]))\n", + "print(filter1)\n", + "print(bias1)\n", + "conv1 = tf.nn.conv2d(x_image, filter1, strides=[1,1,1,1], padding=\"SAME\")\n", + "h_conv1 = tf.nn.relu(conv1+bias1)" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [], + "source": [ + "maxPool2 = tf.nn.max_pool(h_conv1, ksize=[1,2,2,1], strides=[1,2,2,1], padding=\"SAME\")\n", + "filter2 = tf.Variable(tf.truncated_normal([ 5, 5, 6, 16]))\n", + "bias2 = tf.Variable(tf.truncated_normal([16]))\n", + "conv2 = tf.nn.conv2d(maxPool2, filter2, strides=[1,1,1,1], padding=\"SAME\")\n", + "h_conv2 = tf.nn.relu(conv2+bias2)" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": {}, + "outputs": [], + "source": [ + "maxPool3 = tf.nn.max_pool(h_conv2, ksize=[1,2,2,1], strides=[1,2,2,1], padding=\"SAME\")\n", + "filter3 = tf.Variable(tf.truncated_normal([ 5, 5, 16, 120]))\n", + "bias3 = tf.Variable(tf.truncated_normal([120]))\n", + "conv3 = tf.nn.conv2d(maxPool3, filter3, strides=[1,1,1,1], padding=\"SAME\")\n", + "h_conv3 = tf.nn.relu(conv3+bias3)" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": {}, + "outputs": [], + "source": [ + "W_fc1 = tf.Variable(tf.truncated_normal([7*7*120, 80]))\n", + "b_fc1 = tf.Variable(tf.truncated_normal([80]))\n", + "h_pool2_flat = tf.reshape(h_conv3, [-1, 7*7*120])\n", + "h_fc1 = tf.nn.relu(tf.matmul(h_pool2_flat, W_fc1)+b_fc1)" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": {}, + "outputs": [], + "source": [ + "W_fc2 = tf.Variable(tf.truncated_normal([80, 10]))\n", + "b_fc2 = tf.Variable(tf.truncated_normal([10]))\n", + "y_conv = tf.nn.softmax(tf.matmul(h_fc1, W_fc2)+b_fc2)" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": {}, + "outputs": [], + "source": [ + "cross_entropy = -tf.reduce_sum(y_ * tf.log(y_conv))\n", + "train_step = tf.train.GradientDescentOptimizer(0.001).minimize(cross_entropy)\n", + "sess = tf.InteractiveSession()\n", + "correct_prediction = tf.equal(tf.argmax(y_conv,1), tf.argmax(y_,1))\n", + "accuracy = tf.reduce_mean(tf.cast(correct_prediction,\"float\"))" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "WARNING:tensorflow:From :2: read_data_sets (from tensorflow.contrib.learn.python.learn.datasets.mnist) is deprecated and will be removed in a future version.\n", + "Instructions for updating:\n", + "Please use alternatives such as official/mnist/dataset.py from tensorflow/models.\n", + "WARNING:tensorflow:From /opt/conda/lib/python3.6/site-packages/tensorflow/contrib/learn/python/learn/datasets/mnist.py:260: maybe_download (from tensorflow.contrib.learn.python.learn.datasets.base) is deprecated and will be removed in a future version.\n", + "Instructions for updating:\n", + "Please write your own downloading logic.\n", + "WARNING:tensorflow:From /opt/conda/lib/python3.6/site-packages/tensorflow/contrib/learn/python/learn/datasets/mnist.py:262: extract_images (from tensorflow.contrib.learn.python.learn.datasets.mnist) is deprecated and will be removed in a future version.\n", + "Instructions for updating:\n", + "Please use tf.data to implement this functionality.\n", + "Extracting MNIST_data/train-images-idx3-ubyte.gz\n", + "WARNING:tensorflow:From /opt/conda/lib/python3.6/site-packages/tensorflow/contrib/learn/python/learn/datasets/mnist.py:267: extract_labels (from tensorflow.contrib.learn.python.learn.datasets.mnist) is deprecated and will be removed in a future version.\n", + "Instructions for updating:\n", + "Please use tf.data to implement this functionality.\n", + "Extracting MNIST_data/train-labels-idx1-ubyte.gz\n", + "WARNING:tensorflow:From /opt/conda/lib/python3.6/site-packages/tensorflow/contrib/learn/python/learn/datasets/mnist.py:110: dense_to_one_hot (from tensorflow.contrib.learn.python.learn.datasets.mnist) is deprecated and will be removed in a future version.\n", + "Instructions for updating:\n", + "Please use tf.one_hot on tensors.\n", + "Extracting MNIST_data/t10k-images-idx3-ubyte.gz\n", + "Extracting MNIST_data/t10k-labels-idx1-ubyte.gz\n", + "WARNING:tensorflow:From /opt/conda/lib/python3.6/site-packages/tensorflow/contrib/learn/python/learn/datasets/mnist.py:290: DataSet.__init__ (from tensorflow.contrib.learn.python.learn.datasets.mnist) is deprecated and will be removed in a future version.\n", + "Instructions for updating:\n", + "Please use alternatives such as official/mnist/dataset.py from tensorflow/models.\n" + ] + } + ], + "source": [ + "sess.run(tf.global_variables_initializer())\n", + "mnist_data_set = input_data.read_data_sets(\"MNIST_data\", one_hot=True)" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "time: 26.592414617538452\n" + ] + }, + { + "data": { + "text/plain": [ + ">" + ] + }, + "execution_count": 10, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "train_accuracy_list = []\n", + "train_accuracy_x = []\n", + "start_time = time.time()\n", + "for i in range(500):\n", + " batch_xs, batch_ys = mnist_data_set.train.next_batch(200)\n", + " if i%2 == 0:\n", + " train_accuracy = accuracy.eval(feed_dict={x:batch_xs, y_:batch_ys})\n", + " # end_time = time.time()\n", + " train_accuracy_list.append(train_accuracy)\n", + " train_accuracy_x.append(i)\n", + " # print(\"step %d, training accuracy %g\"%(i, train_accuracy))\n", + " # print(\"time:\", (end_time-start_time))\n", + " # start_time = end_time\n", + " # train_step.run(feed_dict={x:batch_xs, y_:batch_ys})\n", + " sess.run(train_step, feed_dict={x:batch_xs, y_:batch_ys})\n", + "\n", + "print(\"time:\", (time.time()-start_time))\n", + "sess.close" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "pylab.plot(train_accuracy_x, train_accuracy_list)\n", + "pylab.show()" + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "time: 0.045374393463134766\n", + "[0 0 0 0 0 0 0 0 0 0] [1 3 8 1 8 6 0 8 5 5]\n" + ] + } + ], + "source": [ + "start_time = time.time()\n", + "test = tf.argmax(y_conv,1)\n", + "tcorrect = tf.argmax(y_,1)\n", + "tbatch_xs, tbatch_ys = mnist_data_set.test.next_batch(10)\n", + "test_out = test.eval(feed_dict={x:tbatch_xs})\n", + "print(\"time:\", (time.time()-start_time))\n", + "print(test_out, tcorrect.eval(feed_dict={y_:tbatch_ys}))" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.6.7" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +}