Kuroyagi飼育日誌

学んだことの備忘録

深層学習の学習【その2】[追記]

開発環境を【その1】で確認したわけですが、動作確認に用いたサンプルが何をしているのか朧気にしかわかりません。

ということで、まずは基本を【記事1】で学習します。

【記事1】
TensorFlowのキーコンセプト: Opノード、セッション、変数 - Qiita


データフローグラフのプログラミングは初めてです。MatlabSimulinkもそのうちやりたい…。

ふむふむ【記事1】では基本がとてもわかり易く書いてありますね。

ただ、まだデータフローグラフを見たことがないので実感がありません。

そういえばtensorboardとかいうデータフローを確認するツールがあったような気がします。ただ、ツールから調べても脇道にどんどん進んでいってしまうので、まずはイメージしやすい例でtensorflowに慣れていきたいと思います。



まずはテンプレートのMNISTを使って遊びます。

ちなみにMNISTはMixed National Institute of Standards and Technology databaseの略で手書き文字とその答えがセットになっているデータセットだそうです。tensorflow君のお勉強用参考書といったところでしょうか。記事2を参考に進めていきます。

【記事2】
TensorFlow Tutorial MNIST For ML Beginners やった - Qiita

ただし、こちらでもprint文が上手く動かなかったため、基本的にprint文のパーツは()の中に入れるようにしたソースコードを実行しました。

本体を実行する前にソースの冒頭にある“import input_data.py"部分用のpyファイルを本体pyファイルと同じフォルダに作っておきます。input_data.pyの中身は【記事3】にあります。

【記事3】
tensorflow/input_data.py at r0.8 · tensorflow/tensorflow · GitHub


そして実行すると…。

--- 訓練開始 ---
--- 訓練終了 ---
精度
0.9119
終了時刻: 1488196487.6909554
かかった時間: 38.432509899139404

おお〜上手く行きました。【記事2】よりもかなり遅いのは初回でデータセットのダウンロードがあったためでしょうか。試しにもう一度実行してみると…

--- 訓練開始 ---
--- 訓練終了 ---
精度
0.9201
終了時刻: 1488197196.6928213
かかった時間: 1.746349811553955

すぐに終わりました。よかったポンコツPCじゃなくて(笑)

調べていて以下のようにもう少し詳しく取り扱っている記事を見つけましたが、まだ私には早そうなので備忘録として記しておきます。

【記事4】
DeepLearningだ!と意気込んだものの手書き数字認識の後に続かなくなった時に読むデータそのものの話 - Qiita


つづいては先と同じことをやるのですが、tensorboardを用いてデータフローを可視化します。

【記事5】
TensorBoardでビギナー向けMNISTチュートリアルを可視化する - Qiita

まずは本体のソースコードを実行!

  File "/home/******/Documents/MNIST_tensorboard/mnist1.py", line 50
    
                                                                                     ^
SyntaxError: unexpected EOF while parsing

ぐぇエラーです(笑)

調べてみるとprint文の最後のparenthesisが抜けていたようです。)を付け加えて改めて実行!!

0.9207

はい、上手く行きました。【記事5】の通りにソースコードを書き換えて、ローカルホストhttp://localhost:6006にアクセスします。

と、ここで以下のエラーが出ました。

Extracting MNIST_data/train-images-idx3-ubyte.gz
Extracting MNIST_data/train-labels-idx1-ubyte.gz
Extracting MNIST_data/t10k-images-idx3-ubyte.gz
Extracting MNIST_data/t10k-labels-idx1-ubyte.gz
WARNING:tensorflow:From /home/*****/Documents/MNIST_tensorboard/mnist1.py:30: initialize_all_variables (from tensorflow.python.ops.variables) is deprecated and will be removed after 2017-03-02.
Instructions for updating:
Use `tf.global_variables_initializer` instead.
W tensorflow/core/platform/cpu_feature_guard.cc:45] The TensorFlow library wasn't compiled to use SSE3 instructions, but these are available on your machine and could speed up CPU computations.
W tensorflow/core/platform/cpu_feature_guard.cc:45] The TensorFlow library wasn't compiled to use SSE4.1 instructions, but these are available on your machine and could speed up CPU computations.
W tensorflow/core/platform/cpu_feature_guard.cc:45] The TensorFlow library wasn't compiled to use SSE4.2 instructions, but these are available on your machine and could speed up CPU computations.
W tensorflow/core/platform/cpu_feature_guard.cc:45] The TensorFlow library wasn't compiled to use AVX instructions, but these are available on your machine and could speed up CPU computations.
W tensorflow/core/platform/cpu_feature_guard.cc:45] The TensorFlow library wasn't compiled to use AVX2 instructions, but these are available on your machine and could speed up CPU computations.
W tensorflow/core/platform/cpu_feature_guard.cc:45] The TensorFlow library wasn't compiled to use FMA instructions, but these are available on your machine and could speed up CPU computations.
Traceback (most recent call last):
  File "/home/*****/Documents/MNIST_tensorboard/mnist1.py", line 37, in <module>
    summary_writer = tf.train.SummaryWriter('mnist1_data', graph_def=sess.graph_def)
AttributeError: module 'tensorflow.python.training.training' has no attribute 'SummaryWriter'

ふむふむ、冒頭ではinitialize_all_variablesが2017-03-02から廃止されますよと言われていますが、今は動くのでそのままにしておきます。そしてtensorboardを使うにあたって問題なのは末尾のtensorflow.python.training.trainingにSummaryWriterという属性はありませんよということです。

調べてみると【記事5】が見つかりました。tf.train.SummaryWriterは2016-11-30に廃止されているようです。

【記事5】
python - 'module' object has no attribute 'SummaryWriter' - Stack Overflow

【記事5】を参考に以下のように書き換えます。

tf.train.SummaryWriter => tf.summary.FileWriter

問題はひとつ解決し、計算結果は出るのですが、もうひとつ警告が出ました。

WARNING:tensorflow:Passing a `GraphDef` to the SummaryWriter is deprecated. Pass a `Graph` object instead, such as `sess.graph`.
0.9203

GraphDefは非推奨とのこと。【記事6】にもあるように、以下のように修正します。

【記事6】
TensorFlowを使って算数② - Sail B

graph_def=sess.graph_def => graph=sess.graph

また、いつも出ていた以下の警告も

WARNING:tensorflow:From /home/*****/Documents/MNIST_tensorboard/mnist1.py:30: initialize_all_variables (from tensorflow.python.ops.variables) is deprecated and will be removed after 2017-03-02.

以下のように修正しておきました。

initialize_all_variables => tf.global_variables_initializer

実行したところ、エラーや警告は出ないのですが、新しいディレクトリもtensorboard用のファイルも生成されません。

ひとまず今日は遅いのでここまでとしておきます。と思いましたが、悔しいのでちょこちょこいじってみると…

ちなみにtesorboardファイルは以下のように保存するようにしています。

summary_writer = tf.summary.FileWriter('log', graph=sess.graph)

つまりlogディレクトリにtensorboardファイルが入っているはず!logディレクトリをtensorboardで開くと

tensorboard --logdir=log
Starting TensorBoard b'41' on port 6006
(You can navigate to http://127.0.1.1:6006)

おや?開けている?試しにローカルホストにアクセスしてみると…

f:id:cocosuzu:20170228002714p:plain

出来てました!ただ、本体のファイルのところにlogディレクトリが出来ていると思っていたのですが、どうやら違うところにつくられているようです。絶対パスで指定しないとダメなのか?そもそもlogディレクトリは何処に?このあたりはちょちょっと調べればわかると思うので、後日にします。


[追記2017.02.28]
logフォルダの在り処を突き止めました.やはり絶対パスで指定しておいた方がいいようです。


あとで読む用

【記事】
Ubuntu 16.04 にGoogle Chromeをインストール | ロボット研究者の戯言