TensorFlowの日本語まとめ

TensorFlowの公式サイトに書かれている英文を英語ど素人が翻訳(日本語訳/和訳)します。 間違いがありましたら、優しく教えていただけますと幸いです。 内容を理解したら、使ってみたい。

5.訓練

私たちのモデルを訓練するために、私たちはモデルのために良いこと、それが何を意味するのかを定義する必要があります。まあ、実際には、機械学習では、典型的にモデルのためにコストや損失と呼ばれる悪いこと、それが何を意味するかを定義しますそして、それらが悪さを最小限にします。しかし、2つは同じことです。


1つの非常に一般的な、とても素敵なコスト関数は、「クロスエントロピー」です。驚くべきことにクロスエントロピーは、情報理論的に情報圧縮コードについての考えから生じますが、それは機械学習ギャンブルから地域の多くで重要な考え方である結果となりますこれは、定義されています 

f:id:TensorFlow:20151226043823p:plain

スポンサーリンク

 

 

yは私たちの予測確率分布である場合、yの真の分布になります。(私たちが入力するワンホットベクトル)いくつかの大まかな意味ではクロスエントロピーは、私たちの予測が真実を説明するためのものである非効率的な測定しています。クロスエントロピーについて詳しく説明することは、このチュートリアルの範囲を超えていますが、それは十分価値のある理解です。

 

私たちが最初に正解の入力に新しいプレースホルダを追加する必要があり、クロスエントロピーを実装するには:

y_ = tf.placeholder(tf.float32, [None, 10])

その後、私たちはクロスエントロピーを実装することができ、-∑y′log(y):

cross_entropy = -tf.reduce_sum(y_*tf.log(y))

 まずtf.log、yの各要素の対数を計算します。次に我々はtf.logyの対応する要素とy_の各要素を掛けます。最後にtf.reduce_sumテンソルのすべての要素が追加されます。(これは単に1つの予測と真実のクロスエントロピーが、私たちが見た100のすべての画像のためのクロスエントロピーの合計ではないことに注意してください。私たちは100個のデータポイントを計算するだけでなく、私たちのモデルは、単一のデータポイントよりもより良い計算の説明があります。)

 

今、私たちは私たちのモデルは何をしたいのかを知っていることTensorFlowが訓練することは非常に簡単です。TensorFlowがあなたの計算のグラフ全体を知っているので、それは自動的に効率的に変数を使用すると、それが最小化尋ねるコストにどのように影響するかを決定するために、バックプロパゲーションアルゴリズムを使用することができます。その後、変数を変更し、コストを削減するために最適化アルゴリズムの選択を適用することができます。

train_step = tf.train.GradientDescentOptimizer(0.01).minimize(cross_entropy)

 ここでは、0.01学習率勾配降下アルゴリズム使用してcross_entropy最小限を抑えるためにTensorFlow問います。勾配降下は、簡単な手順で、TensorFlowは単純に各変数にコストを削減する方向に少し動かします。しかしTensorFlowはまた、多くの他の最適化アルゴリズムを提供します:1を使用すると、1行を微調整するのと同じくらい簡単です。

 

TensorFlowが実際に、こっそりとバックプロパゲーション勾配降下を実装し、グラフ新しい操作を追加しています。そして、それは単一の操作するバックあなたを与え、実行すると、勾配降下訓練の手順を実行若干コストを削減するためにあなたの変数を微調整します。

 

今、私たち私たちのモデルを訓練するために設定しています後に一つ、私たちがそれを起動する前に、私たちが作成した変数を初期化するために操作を追加する必要があります。:

init = tf.initialize_all_variables()

 
現在のセッションでモデルを起動して、変数を初期化操作を実行することができます。

sess = tf.Session()

sess.run(init)

訓練をしてみましょう - 私たちは訓練ステップを1000実行します

for i in range(1000):
batch_xs, batch_ys = mnist.train.next_batch(100)
sess.run(train_step, feed_dict={x: batch_xs, y_: batch_ys})

ループの各ステップは、私たちは私たちの訓練のセットから100個のランダムなデータポイントの「バッチ」を取得します。私たちは、プレースホルダを交換するバッチデータでtrain_step供給を実行します。

 

ランダムデータの小さなバッチを使用すると、確率的訓練と呼ばれます - この場合、確率的勾配降下理想的には、私たちがやるべきことのよりよい感覚を与えることになるので、訓練のすべてのステップのために私たちのすべてのデータを使用したいのですが、それは高価です。だから、その代わりに、我々は別のサブセットを毎回使用しています。これを行うと、安価であり、同じ利益の多くを持っています。

 

(原文サイト)

MNIST For ML Beginners