Python前回の続きです。本日はconnpassで募集していた新宿のもくもく会で勉強しています。集中できて素晴らしい。(主催者の方、ありがとうございます)また参加しようと思います。(コーヒーとお菓子食べれるし。出力層ニューロンの数MNSITからデータを拝借してNNを構築してみるNNでバッチ処理を行なってみるソフトマックス関数ソフトマックス関数の分子は入力信号の指数関数、分母はすべての入力信号の指数関数の和から構成されています。mathtrain.jp早速pythonでソフトマックス関数を実装してみます。0.73659691]出力を見て分かるように、ソフトマックス関数の出力は0~1.0の間の実数になります。総和は1になっていますね。この総和が1という性質がとても重要で、この性質によってソフトマックス関数の出力を確率として解釈することができます。上の例ではy[0]の確率が0.018(1.8%)、y[1]の確率が0.245(24.5%)、y[2]の確率が0.737(73.7%)のように解釈できます。この確率の結果から、2番目の要素が最も大きいため、2番目のクラスだろう、と分類できます。ソフトマックス関数を利用しても、各要素の大小関係は変化しないため、ニューラルネットワークで分類を行う際には、ソフトマックス関数を省略することが多いみたい。出力数のニューロン数は解く問題によって適宜決定する必要があります。当たり前だが、クラス分類したい場合は分類したいクラス数に出力ニューロン数を決定する必要があります。MNSITからデータを拝借してNNを構築してみるMNSITとは、簡単なコンピュータ・ビジョンのデータセットで、手書き数字の画像からなります。詳細http://tensorflow.classcat.com/2016/03/09/tensorflow-cc-mnist-for-ml-beginners/まずは、画像を表示させてみます。(下記PGはあらかじめデータセットを取得した状態です。28)img_show(img)ここでは、最終的に画像ファイルが表示されます。続いてニューラルネットワークの構築を行なってみます。この画像セットは0〜9までの画像となっているので、出力層のニューロン数は10にします。28なので、784個のニューロンとなります。0.9352正答率が約93%と表示されました。(結構良い正答率な気がします)さて、上記のコードでは画像を1枚ずつ読み込み処理しています。(10000枚の画像ファイルがあった場合、forループを10000回行います)これでは効率が悪いような気がしますね。配列を利用して計算しているのに、その恩恵を受けきれていない気がします。そこで、データを一定の量でまとめて処理するように修正してみます。(これをバッチ処理と呼ぶらしいです)NNでバッチ処理を行なってみるさきほどのコードから、少しだけ修正してバッチ処理を行わせてみます。バッチ数の追加と、for文を修正しました。t[i:i+batch_size])これでループの回数が減り、処理速度の向上が見込めると思います。3章まで学んでみましたが、ニューラルネットワークの面白さがなんとなーーーーーく分かり始めたような気がします。あ、ソースコードはこちらです。〜重みの初期値について〜前回の続きです。〜学習のテクニック〜本日は6章を学んでいきます。〜誤差逆伝播法〜本日から5章に入りました。前回に引き続き、4章で学んだことを残しておきます。toC企業でMLエンジニアとして働いています。ブログでは主に機械学習界隈の話ができればと思っています。(1)月別アーカイブリンクプライバシーポリシ。