{"id":727,"date":"2019-02-04T20:01:33","date_gmt":"2019-02-04T19:01:33","guid":{"rendered":"http:\/\/www.ludovicfavre.ch\/blog\/?p=727"},"modified":"2019-02-04T20:05:57","modified_gmt":"2019-02-04T19:05:57","slug":"tensorflow-sur-google-colab","status":"publish","type":"post","link":"https:\/\/www.ludovicfavre.ch\/blog\/2019\/02\/tensorflow-sur-google-colab\/","title":{"rendered":"Tensorflow sur Google Colab"},"content":{"rendered":"\n<p>En voulant tester quelques bouts de code utilisant Tensorflow, j&rsquo;ai constat\u00e9 que mon PC datait un peu: il n&rsquo;a pas de support CPU supportant les instructions AVX.<\/p>\n\n\n\n<p>Une version \u00ab\u00a0raspberry-pi\u00a0\u00bb existe depuis 2018 mais elle est loin de permettre de travailler efficacement. L&rsquo;exemple classic sur le dataset MNIST prend en effet un temps assez cons\u00e9quent \u00e0 s&rsquo;ex\u00e9cuter:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">import tensorflow as tf\nmnist = tf.keras.datasets.mnist\n\n(x_train, y_train),(x_test, y_test) = mnist.load_data()\nx_train, x_test = x_train \/ 255.0, x_test \/ 255.0\n\nmodel = tf.keras.models.Sequential([\n  tf.keras.layers.Flatten(),\n  tf.keras.layers.Dense(512, activation=tf.nn.relu),\n  tf.keras.layers.Dropout(0.2),\n  tf.keras.layers.Dense(10, activation=tf.nn.softmax)\n])\nmodel.compile(optimizer='adam',\n              loss='sparse_categorical_crossentropy',\n              metrics=['accuracy'])\n\nmodel.fit(x_train, y_train, epochs=5)\nmodel.evaluate(x_test, y_test)\n<\/pre>\n\n\n\n<p>Le r\u00e9sultat avec le raspberry-pi:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">pi@raspberrypi:~\/tensorflow $ python3 mninst.py <br> Downloading data from ...<br> 11493376\/11490434 [===] - 2s 0us\/step<br> Epoch 1\/5<br> 60000\/60000 [===] - 107s 2ms\/step - loss: 0.2007 - acc: 0.9407<br> Epoch 2\/5<br> 60000\/60000 [===] - 104s 2ms\/step - loss: 0.0797 - acc: 0.9758<br> Epoch 3\/5<br> 60000\/60000 [===] - 104s 2ms\/step - loss: 0.0515 - acc: 0.9835<br><br>...<\/pre>\n\n\n\n<p>Soit pr\u00e8s de 2ms par step.<\/p>\n\n\n\n<p>Depuis une ann\u00e9e, Google propose Colab  : https:\/\/colab.research.google.com qui permet gratuitement un environnement Jupyter avec tensorflow pr\u00e9-install\u00e9. Il y a m\u00eame des GPU disposition.<\/p>\n\n\n\n<p>CPU:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">Epoch 1\/5 <br>60000\/60000 [===] - 17s 289us\/sample - loss: 0.2223 - acc: 0.9342 <br>Epoch 2\/5 <br>60000\/60000 [===] - 17s 281us\/sample - loss: 0.0969 - acc: 0.9706 <br>Epoch 3\/5 <br>60000\/60000 [===] - 17s 282us\/sample - loss: 0.0696 - acc: 0.9783 <br>Epoch 4\/5 <br>60000\/60000 [===] - 17s 286us\/sample - loss: 0.0532 - acc: 0.9836 <br>Epoch 5\/5 <br>60000\/60000 [===] - 18s 301us\/sample - loss: 0.0442 - acc: 0.9856 <br>10000\/10000 [===] - 1s 64us\/sample - loss: 0.0715 - acc: 0.9805 <br>[0.07151023466372862, 0.9805]<\/pre>\n\n\n\n<p>GPU:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">Epoch 1\/5 <br>60000\/60000 [===] - 8s 136us\/sample - loss: 0.2170 - acc: 0.9358 <br>Epoch 2\/5 <br>60000\/60000 [===] - 8s 134us\/sample - loss: 0.0954 - acc: 0.9718 <br>Epoch 3\/5 <br>60000\/60000 [===] - 8s 133us\/sample - loss: 0.0690 - acc: 0.9781 <br>Epoch 4\/5 <br>60000\/60000 [===] - 8s 133us\/sample - loss: 0.0530 - acc: 0.9830 <br>Epoch 5\/5 <br>60000\/60000 [===] - 8s 134us\/sample - loss: 0.0442 - acc: 0.9853 <br>10000\/10000 [===] - 1s 70us\/sample - loss: 0.0609 - acc: 0.9807 <br>[0.06085205714175245, 0.9807]<\/pre>\n\n\n\n<p>La version CPU sur Colab est plus de 5x plus rapide que sur un raspberry-pi et la version GPU 10x plus rapide (pour l&rsquo;exemple ci-dessus).<\/p>\n\n\n\n<p>Il peut donc \u00eatre int\u00e9ressant de cr\u00e9er ses mod\u00e8les sur Colab, \u00e0 condition d&rsquo;\u00eatre conscient que Google y a probablement acc\u00e8s&#8230;<\/p>\n","protected":false},"excerpt":{"rendered":"<p>En voulant tester quelques bouts de code utilisant Tensorflow, j&rsquo;ai constat\u00e9 que mon PC datait un peu: il n&rsquo;a pas de support CPU supportant les instructions AVX. Une version \u00ab\u00a0raspberry-pi\u00a0\u00bb existe depuis 2018 mais elle est loin de permettre de &hellip; <a href=\"https:\/\/www.ludovicfavre.ch\/blog\/2019\/02\/tensorflow-sur-google-colab\/\">Continue reading <span class=\"meta-nav\">&rarr;<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_monsterinsights_skip_tracking":false,"_monsterinsights_sitenote_active":false,"_monsterinsights_sitenote_note":"","_monsterinsights_sitenote_category":0,"footnotes":""},"categories":[1],"tags":[],"class_list":["post-727","post","type-post","status-publish","format-standard","hentry","category-uncategorized"],"_links":{"self":[{"href":"https:\/\/www.ludovicfavre.ch\/blog\/wp-json\/wp\/v2\/posts\/727","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.ludovicfavre.ch\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.ludovicfavre.ch\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.ludovicfavre.ch\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.ludovicfavre.ch\/blog\/wp-json\/wp\/v2\/comments?post=727"}],"version-history":[{"count":6,"href":"https:\/\/www.ludovicfavre.ch\/blog\/wp-json\/wp\/v2\/posts\/727\/revisions"}],"predecessor-version":[{"id":734,"href":"https:\/\/www.ludovicfavre.ch\/blog\/wp-json\/wp\/v2\/posts\/727\/revisions\/734"}],"wp:attachment":[{"href":"https:\/\/www.ludovicfavre.ch\/blog\/wp-json\/wp\/v2\/media?parent=727"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.ludovicfavre.ch\/blog\/wp-json\/wp\/v2\/categories?post=727"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.ludovicfavre.ch\/blog\/wp-json\/wp\/v2\/tags?post=727"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}