2016-07-02 7 views
4

ミニバッチのデータを使用してTensorFlowでネットワークをトレーニングするにはどうすればよいですか?ディープMNISTチュートリアル は、彼らが使用します。Tensorflowミニバストレーニング

for i in range(1000): 
    batch = mnist.train.next_batch(50) 
    train_step.run(feed_dict={x: batch[0], y_: batch[1]}) 

私の質問です - あるxと単一の例に適した寸法とy_変数、およびbatch[0]batch[1]あり、このような入力と出力のリスト?この場合、TensorFlowはこれらのリストに各トレーニングサンプルのグラデーションを自動的に追加しますか? xy_がミニバッチ全体を取得するようにモデルを作成する必要がありますか?

私の問題は、私はそれを各プレースホルダのリストを供給しようとすると、それは入力にプレースホルダのリスト全体をしよう、と私はので、サイズの不一致を得ることです:Cannot feed value of shape (n, m) for Tensor u'ts:0', which has shape '(m,)'nはminibatchのサイズであり、mがあります個々の入力サイズ

ありがとうございました。 MNISTチュートリアルxy_

において

答えて

9

定義形状のプレースホルダである:

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

shape=[None, 784]このプレースホルダは2寸法を有することを意味します。最初の次元は、要素(そう、1の未定義の数を含むことができ、単一の例

に適し

はXであり、寸法のY_変数:

だから、あなたの最初の質問に答えるために、2、... 50 ...)であり、第2の次元は、(単一のMNIST画像の特徴である)非常に784 = 28 * 28の要素を含むことができる。

形状[1、784]または[50,784]のpythonリストをグラフに入力すると、テンソルフローは全く同じですが、問題なく処理できます。

バッチ[0]、バッチ[1]はそのような入出力のリストですか?チュートリアルの は、バッチコールbatch = datasets.train.next_batch(50)を定義します。したがって :

  • バッチ[0]形状のリストである[50、784]
  • バッチ[1]形状のリストである[50、10]

TensorFlowはこれらのリストの各トレーニングサンプルのグラデーションを自動的に追加しますか?またはxとy_がミニバッチ全体を取得できるようにモデルを作成する必要がありますか?

Tensorflowがこれを処理します。

報告しているエラーCannot feed value of shape (n, m) for Tensor u'ts:0', which has shape '(m,)' は形状の不一致エラーです。

プレースホルダの形状が同じになるように入力を再形成しているわけではありません。

+0

"Tensorflowがこれを処理します。" - しかし、私のコスト関数は未知数のサンプル(これは実行時に設定されます)を合計する必要があります。それは私が単一のサンプルのためのコスト関数を書くことではなく、何とかそれを拡張します。 – yoki

+1

はい、そうです。 tf.reduce *関数は、不明なサンプル数を合計/平均するのに役立ちます – nessuno