【Tensorflow】初心者の僕がつまづいたことまとめ【備忘録】


どうも。ヒビ(@hiibii256)です。

ディープラーニングしてますか?

僕はつい最近、ようやく、ディープラーニングの実装について勉強し始めました。

僕のディープラーニング事情

お前の話はいいんだよ!!という人は、流し読みで。

僕は、微分や行列、ディープラーニングとは?について、1年ほど前から勉強していました。

ただ、機械学習の実装は、scikit-learnばかり笑(便利やし…計算速いし…)

とはいえ、scikit-learnばかりも飽きてきましたし、あんまりいい成果を出せていないんですよ。

ということで、いい加減に、ディープラーニングの実装について学び始めたわけです。

人工知能について学ぶ以上、いつまでも避けては通れないのが、ディープラーニングですよね。

やっぱりTensorflow

ChainerやTheanoも学んでおくことに越したことはないんですが、やっぱり、Tensorflowが使いたい!

iPhoneユーザだけど、Google製というだけで心が踊る。

この記事はMacで書いてるけど、Google製の安心感とクオリティーには頭が下がりますし。

KerasはTensorflowを超、楽ちんに書けるそうなので、追々。

Tesnorflow知らないままKerasを使うのは、奥歯に物が詰まってる気がしてならないので、個人的にはナシかな。

需要を感じた時に、勉強するということで。

つまづいたところまとめ

僕のしょーない、前置きにお付き合いくださり、ありがとうございます。え?スクロールして、読んでない?

独自の画像で画像分類がしたい

まず、陥ったのが、コレ。MNISTの記事おおすぎんよー。

みんな、そんなにMNISTで遊びたいの?自分の持ってるデータで遊びたいんだけどー。

というときに見つけた唯一といっても過言でない日本語による、独自の画像の画像分類に関する記事。

kivantium.hateblo.jp

神か。そう思ってしまう親切設計。MNISTはもうええ。という人はぜひ。

いつか、このブログでも解説記事書きます…たぶん…。

OpenCVインストールしてないやん

画像のサイズがデカすぎてお話にならなかったので、OpenCVを使い、リサイズすることに。

すると、あれもこれもAnacondaの僕にピッタリの記事を発見。

nixeneko.hatenablog.com

Anaconda使ってて、OpenCVまだインストールしてないいいいという人はぜひ。

「permission denied csv python」とかいう謎のエラー

こいつ目当てで検索して…という人も多いかな?エラー文そのまま検索窓にぶん投げたりして。(僕はよくやります笑)

csvファイルをopenして出力結果を書き込もうとしたときに出会したエラー。

stack overflowなんかだとファイルのパスがおかしいんじゃ!みたいなこと書かれてますが…(筆者の英語能力をあてにしてはいけません…)

僕の場合は、違いました。

ファイル開いたままやんけ!!

書き込むはずのcsvファイルを裏で開いたままにしていました笑 なんという痛恨のミス…

読者のみなさま、ファイルへのパスと自分の行動をお確かめください。

学習モデルの保存、読み込みについて

ここまで、Tensorflowの話薄くね?って思われた方もいらっしゃるかもしれませんが…

大丈夫。最後は、きちんとTensorflowに関する問題にして最大の問題です。

学習モデルどうしてますか?僕は、テスト用のプログラムと訓練用のプログラムを分けていました。そのため、学習モデルを一旦、保存。その後、テスト用プログラムで読み込みをするというやり方をとってました。

学習モデルの保存

まずは保存から。

 #保存の準備
    saver = tf.train.Saver()
 #保存
    saver.save(sess, "model.ckpt")

簡単ですね…と言いたいところなんですが、このままだと問題があります。

 #保存の準備
    saver = tf.train.Saver()
 #保存
    saver.save(sess, "./model.ckpt")#保存先を指定するパスを付与。ここではカレントディレクトリに保存

どこに保存するのか明確にしましょう。「./」はカレントディレクトリ(プログラムと同じフォルダ)を意味します。

※指定しなくても良い場合もあるようです。ただ、僕は指定しないとうまくいかず…

学習モデルの読み込み、利用

せっかく保存した学習モデルも使わないと意味がない!ということでその使い方を。

 #学習モデルを読み込む準備
    saver = tf.train.import_meta_graph('/tmp/model.ckpt.meta')#注意
 #学習モデルの読み込み、利用できるようにする
    saver.restore(sess, "/tmp/model.ckpt")

こいつが(現在)一番の落とし穴。実は、ちょっと前まで

    saver.restore(sess, "/tmp/model.ckpt")

と書くだけでも問題なく動いていました。しかし、バージョンアップに伴い、保存するファイルがちょいと増えました。

保存したディレクトリ(フォルダ)を開いてみるとわかるかと思いますが、「.meta」なるファイルができてますよね?

このファイルの誕生によって1文書くものが増えてしまいました。それでも、1文。大人しく書き加えましょう。

もちろん、古いバージョンをお使いの方は必要ございませんので、1文で済みます。

おわりに

Tensorflowを使い始めてまだ1週間程度の僕は、つまづいてばかりです。

pythonひとつまともに使えるか不安なのに…笑

でもでも!初心者なりに得るものはありますし、同じ初心者の同じ問題を少しでも解決できたらと思い、書きました。もちろん、僕の備忘録という意味もありますが。

Tensorflowや機械学習に関する独自の記事も追々、書いていけたらなと考えてます。いつになるかわからないですけどね。

間違いや誤解を生む表現等がありましたら、コメント、DMにておしらせください。