Beginners"を試した時のメモ機械学習Tensorflowを勉強するにはTensorflowのTutorialを自分で入力して実行しながら理解するのが一番手っ取り早いです。BeginnersというTutorialがおすすめです。TensorFlowこのチュートリアルは、単純な1層のネットワークで手書き文字を認識するというものです。1層ですので、重みとバイアスも一つしかありませんが、それでもニューラルネットワークに必要な最小限の要素をすべて含んでいます。TensorflowのtutorialにはMNISTの手書きデータを使うものはこのbiginner用とCNNを使ったものの2種類があります。以下に、実際にコードを理解して実行したときの自分用のメモを残しておきます。数字でone-hot表現されています。[0,0,0,1,0,0,0,0,0,0]というふうに表現されます。10]というshapeで、値はfloatです。Noneは画像の数は任意の長さを取りうることを意味する。placeholderはこのように、学習データなどを入れる入れ物。重みやバイアスは、実行時に随時更新されますので、tfのvariable変数として以下のように定義しています。784列10行の行列と思えばいい。ニューラルネットワークの計算のcoreの部分です。10の行列なので、結果のyはN行10列の行列です。各行にxの各行にたいする画像データを0から9のどの数値と予測したかの確率がyの各行に入ります。この予想された出力yと正解とを使って表されたロス関数を最小化することで、適切なW,bを決めます。10])というように、N行10列の行列としてplaceholderを用意しておきます。entropyを使用します。reduction_indices=[1]))tf.reduce_meanは指定されたshapeの成分についての和をとる関数で、今の場合は、reduction_indices=[1]となっているので1番目の要素についての和をとります。0から9の予想された数値の方向に和をとり、N個の要素をもつ1次元配列にします。この1次元配列は、N個の学習データそれぞれに対するロス関数の値を格納しています。最後に、tf.reduce_meanで、N個の学習データ(バッチ処理1回分)のそれぞれのロス関数すべての平均をとってこれを最適化関数として使用しています。ここが少し混乱しやすいのですが、実際のtutorialのコードでは上記の部分が以下のようにsoftmax_cross_entropy_with_logitsという関数で書かれています。logits=y))解説を読むと、前者の書き方のほうが数値的に不安定するそうです。実施のコードで試してみると、前者の場合の精度は私の実行環境では、約0.92、後者では、0.91でほぼ同じ結果になりました。後者では0.90secでlogits関数の計算の分だけ速度が落ちているようです。p<0.5のときL<0となる関数。inf]にマップする。1.0]の出力を得て、それをlogitsに通すことで正解の確率が大きければ値はより大きくなる。マイナスが掛かっているのでloss関数としては値が小さくなるということです。確率が0や1に近い時に勾配が数値的に消失したり不安定にあったりするのを防ぐ効果があります。stackoverflow.com最適化はGradientDescentで学習率は0.5に設定しています。tf.argmax(y_,1))tf.argmaxは引数の配列の中で一番値の高いもののindexを返す。正解の確率]という配列になっているので、1番目の要素(数値の0から9のそれぞれの予測確率)から一番高いもの一つが選ばれます。異なっているときにFalseをセットします。[1,0,1,1]tf.reduce_meanでこの1,0,1,1,・・・の平均をとり結果を全体の精度とする。今回試してみた実際のコードは以下のようになります。今回は過学習についてみて見ます。パーセプトロンで線形分離を実装してみる今度は、パーセプトロンを使って線形分離をしてみます。読者になるmathJaxはてなブログをはじめよう!wshinyaさんは、はてなブログを使っています。ブログを報告するスターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。