TensorFlowハンズオン(6) 画像に書かれた数字を判定する(学習してみる)

実際に学習させてみます(`・ω・´)

復習

ここまでやりました(੭ु ´・ω・)੭ु⁾⁾

目標は、常に0以上の値をとる関数cross_entropyをできるだけ小さくする(0に近くなる)ように、重みWとバイアスbを見つけることです(`・ω・´)

勾配降下法

なんかまた難しそうな感じですが・・・

でこぼこの斜面を転がるボールを想像してみてください。

まわりよりも落ち込んだ場所があれば、ボールはそこで止まります(੭ु ´・ω・)੭ु⁾⁾

この勾配降下法は以下のように使います(`・ω・´)

引数の0.5というのは学習係数と呼ばれます。とてもだいじです(੭ु ´・ω・)੭ु⁾⁾

ちょうどいい学習係数を見つける

学習係数は、ボールの転がるスピードです。

小さいとじわじわと学習していく感じになって、学習スピードが遅くなります。

逆に大きければ大きいほど学習スピードは上がりますが、底が近いときには何度も行きすぎたりして、なかなかスポッと入りません。

ちょうどいい値を見つけるには、最終的にはトライアンドエラーするしかないという感じです(´・ω・`)

学習させてみる

ついにこのときがやってきました(੭ु ´・ω・)੭ु⁾⁾

Variableを使っているので、InteractiveSessionを使ってtf.global_variables_initializer().run()を呼び出してからrunします(`・ω・´)

重みWとバイアスbを見ると学習されていることが分かります(Wは見えてるところはぜんぶ0なので、ちょっとわからないですが)。

これだけだと、学習していることはわかったのですが、どこまで正確に学習できているかはわかりません・・・

なので別に調べる必要があります(`・ω・´)

学習結果の確認

学習結果を確認するには、MNISTのテストデータをつかいます。

学習データそのものは使ってはいけません・・・視力検査の表を先に覚えておくみたいなものなので、正確な結果が出ないです(´・ω・`)

最も確率の高いもののインデックスを、学習データごとに比較していますね(੭ु ´・ω・)੭ु⁾⁾

tf.argmaxはベクトルをその最大値の配列インデックスで置き換えるもので、tf.argmax(y, 1)の場合は行列yの各行ベクトル(=shapeの1番目である列の方向のベクトル)を置き換えていきます。

yは55000行10列の行列なので、tf.argmax(y, 1)は55000行の列ベクトルとなります(y_も同じですね)。

correct_predictionは10列のboolean型ベクトルになるので、それをfloatになおして平均することで、全学習データの正解率を求めます。

これがaccuracyとなるので、MNISTのテストデータを入れて計算してみます・・・

67.05%・・・(´・ω・`)

なんか低くね・・・(´・ω・`)

次は

これだと微妙すぎるので、もうちょっと結果をましにしていきます(੭ु ´・ω・)੭ु⁾⁾

プロフィールかけぼ(ckbx_cakebox)

うたったりおどったりしよります(๑`・ᴗ・´๑)
音楽系サービスFrekulのエンジニアでもあります(。・ω・) 最近はラバノーテーション(ダンスの楽譜)にはまってます٩( ‘ω’ )و
踊ってみた動画はこちら → http://nico.ms/sm31776982

フォローする