2017-07-21 5 views
0

テンソルフロー1.2テンソルフローで 'mnist.train.next_batch'と 'tf.train.batch'を交換するにはどうすればいいですか?

tfのmnistデータセットを使用してテンソルフローの学習を開始しました。

そしてデータセットを変更しました。 私は 'batch_xs、batch_ys = mnist.train.next_batch(batch_size)'を 'batch_xs、batch_ys = tf.train.batch([X、Y]、batch_size = batch_size)'に交換するというこの問題に直面しました。

テンソルフローでミニバッチを適用する方法を知りたい。

エラーメッセージ

TypeError例外:フィードの値がtf.Tensor対象にすることはできません。許容されるフィード値には、Pythonのスカラ、文字列、リスト、numpy ndarrays、またはTensorHandlesが含まれます。

train_data.shape, train_labels.shape # numpy 
# ((10000, 20, 20, 3), (10000, 2)) 


X = tf.placeholder(tf.float32, [10000, 20, 20, 3]) 
Y = tf.placeholder(tf.float32, [10000, 10]) 

W1 = tf.Variable(tf.random_normal([4, 4, 3, 32], stddev=0.01)) 

L1 = tf.nn.conv2d(X, W1, strides=[1, 1, 1, 1], padding = 'SAME') 
L1 = tf.nn.relu(L1) 
L1 = tf.nn.max_pool(L1, ksize=[1, 2, 2, 1], strides=[1, 2, 2, 1], padding='SAME') 
L1 = tf.reshape(L1, [-1, 10 * 10 * 32]) 

W2 = tf.get_variable('W2', shape=[10 * 10 * 32, 10], initializer=tf.contrib.layers.xavier_initializer()) 
b = tf.Variable(tf.random_normal([10])) 

hypothesis = tf.matmul(L1, W2) + b 

learning_rate = 0.001 
cost = tf.reduce_mean(tf.nn.softmax_cross_entropy_with_logits(logits=hypothesis, labels = Y)) 
optimizer = tf.train.AdamOptimizer(learning_rate=learning_rate).minimize(cost) 

# hyper parameters 
learning_rate = 0.001 
training_epochs = 5 
batch_size = 100 

for epoch in range(training_epochs): 
    avg_cost = 0 
    total_batch = int(10000/batch_size) 
    for i in range(total_batch): 
     # batch_xs, batch_ys = tf.train.batch([X, Y], batch_size) 
     batch_xs, batch_ys = tf.train.batch([X, Y], batch_size = batch_size) 
     feed_dict = {X: batch_xs, Y: batch_ys} 
     c, _, = sess.run([cost, optimizer], feed_dict = feed_dict) 
     avg_cost += c/total_batch 
    print('Epoch: ', '%04d' % (epoch + 1), 'cost: ', '{:.9f}'.format(avg_cost)) 



TypeError: The value of a feed cannot be a tf.Tensor object. Acceptable feed values include Python scalars, strings, lists, numpy ndarrays, or TensorHandles. 
+0

エラーは、テンソルを 'feed_dict'に供給しているためです。あなたの - feed_dict = {X:train_data_batch、Y:train_label_batch}を変更してください。 train_data_batchとtrain_label_batchの両方がnumpyの配列です –

+0

@vijaymバッチ処理(numpy配列)を教えてください。 私はテンソルフローの初心者です。 – Kim

+0

確認:https://stackoverflow.com/questions/45110098/tensorflow-next-batch-function-of-np-array/45110647?noredirect=1#comment77193477_45110647 –

答えて

0

batch_xs, batch_ys = tf.train.batch([X, Y], batch_size = batch_size)このステートメントは、グラフのステージを構築中です。あなたがsess.run(...)に電話しない限り、何も起こりません。

minibatchを適用するには、tensorflowのドキュメントとチュートリアルを参照してください。

+0

これについて、tfドキュメントのURLをアップロードできますか? – Kim

+0

私はそれについて発見できません。 – Kim

+0

https://www.tensorflow.org/get_started/mnist/pros希望これはあなたが望むものです –

0

私のコードで行っているbatch_xs, batch_ys = tf.train.batch([X, Y], batch_size = batch_size)のようなグラフからテンソルフローAPIを追加することはできません。

これは、batch_xsとbatch_ysをテンソルにします。あなたができることは、batch_xs, batch_ys = tf.train.batch([X, Y], batch_size = batch_size)をグラフに書いて、batch_xsとbatch_ysを評価し、それをプロセスに送ります。

関連する問題