16:34
みなさんこんにちは。
人工知能ラボの助手です。
今回も、CNN実装の続きをやっていきたいと思います。
今までの記事:
TensorFlowで畳み込みニューラルネットワーク(CNN)実装①
[重み・バイアス生成と畳み込み・プーリング処理関数の定義]
TensorFlowで畳み込みニューラルネットワーク(CNN)実装②
[ネットワークの記述]
前回までの記事では、CNNの計算処理(ネットワーク)
を記述するところまでを実装してきました。
今回は、誤差関数とその学習方法の定義を行います。
いつもどおり、まずはコードを載せて、後から簡単に説明を
加えていきたいと思います。
コード
# 誤差関数 loss = tf.reduce_mean(tf.nn.softmax_cross_entropy_with_logits(labels=y_, logits=y)) # 学習 train_step = tf.train.AdamOptimizer(0.0001).minimize(loss) # 正解率の計算 correct_prediction = tf.equal(tf.argmax(y, 1), tf.argmax(y_, 1)) accuracy = tf.reduce_mean(tf.cast(correct_prediction, tf.float32))
まず、誤差関数です。
今回はクラス分類を行うので、クロスエントロピー
を使用します。
この誤差は、記事冒頭画像の数式を見ていただくと
分かるかと思いますが、出力のベクトルにおける、
正解ラベルの値が1のときに最小値(0)を取り、値が0に
近付いて行くほど大きくなっていきます。
また、正解以外のラベルの誤差に関しては考慮していません。
このことからも、クラス分類に適した誤差であることが
直感的に分かりますね。
(必ずしもそうとは限りませんが、誤差関数には
回帰では2乗誤差、クラス分類ではクロスエントロピー
を使用することが多いです)
続いて学習です。
オプティマイザーは通常の勾配効果の改良であるAdam法、
学習率は0.0001としました。
また、今回は最後に正解率の計算を行っています。
1行目で、y(ネットワークの出力)とy_(教師ラベル)
が一致しているかを確認し、
2行目でその一致率を計算しています。
ただし、yはそれぞれのクラスの確率となっているので
正確には、yのうち確率が最大のクラスと、教師ラベルの
インデックスが等しいかを確認しています。
ここまでくれば、あとは今までもこのブログで扱ってきた
のものと同様に、
セッションを作成して指定回数の学習を行うだけに
なります。
その部分のプログラムは、次次回の実際に学習を
させてみる回で書こうかと思っていますが、
確認したい方は以下の記事をご覧ください。
TensorFlowによる回帰分析③
TensorFlowで回帰分析を実装した時の学習部分についての
説明が載っています。
それでは、今回はここまでにしておきましょう。
次回は、入力する画像データの基本的な前処理
(リサイズなど)について書きたいと思います。
お疲れ様でした!