2017-08-06 98 views
-1

我是tensorflow的新手,我收到一個錯誤當我運行此:Tensorflow錯誤:形狀'(?,181,192)''張量u'Placeholder_3:0'無法送入形狀的值(100,177,203)'

init = tf.global_variables_initializer() 
init 

n_epochs = 1000 
batch_size = 100 
n_batches = len(train_sequences) // batch_size 
print(n_batches) 
with tf.Session() as sess: 
    init.run() 
    for epoch in range(n_epochs): 
     train_sequences, train_y, train_lengths = shuffle(train_sequences, train_y, train_lengths) 
     for iteration in range(n_batches): 
      start = iteration*batch_size 
      end = start+batch_size 
      X_batch = train_sequences[start:end] 
      y_batch = train_y[start:end] 
      seq_length_batch = train_lengths[start:end] 
      if iteration % 20 == 0: 
       train_summary_str = train_summary_op.eval(
        feed_dict = {X: X_batch, y: y_batch, seq_length: seq_length_batch} 
       ) 
       step = epoch * n_batches + iteration 
       train_writer.add_summary(train_summary_str, step) 
       train_writer.flush() 

      if iteration % 200 == 0: 
       summary_str = eval_summary_op.eval(
        feed_dict = {X: test_sequences, y: test_y, seq_length: test_lengths} 
       ) 
       step = epoch * n_batches + iteration 
       eval_writer.add_summary(summary_str, step) 
       eval_writer.flush() 

      sess.run(
       training_op, 
       feed_dict = {X: X_batch, y: y_batch, seq_length: seq_length_batch} 
      ) 

     acc_train = accuracy.eval(
      feed_dict = {X: X_batch, y: y_batch, seq_length: seq_length_batch} 
     ) 
     acc_test = accuracy.eval(
      feed_dict = {X: test_sequences, y: test_y, seq_length: test_lengths} 
     ) 

     print(epoch, "Train accuracy:", acc_train, "Test accuracy:", acc_test) 
    save_path = saver.save(sess, "/home/ubuntu/tensorflow/model.ckpt") 

    train_writer.close() 
    eval_writer.close() 

我收到的錯誤是:

ValueError: Cannot feed value of shape (100, 177, 203) for Tensor u'Placeholder_3:0', which has shape '(?, 181, 192)'

看起來這是在獲取生成錯誤:

train_summary_str = train_summary_op.eval(
       feed_dict = {X: X_batch, y: y_batch, seq_length: seq_length_batch} 
       ) 

更新: 我通過在定義tf佔位符的同時更改尺寸來修正了錯誤。

tf.reset_default_graph() 
n_steps = 177 
n_inputs = 203 
n_neurons = 100 
n_outputs = 2 
X = tf.placeholder(tf.float32, [None, n_steps, n_inputs]) 
y = tf.placeholder(tf.int32) 
seq_length = tf.placeholder(tf.int32, [None]) 

basic_cell = tf.contrib.rnn.BasicRNNCell(num_units=n_neurons) 
outputs, states = tf.nn.dynamic_rnn(basic_cell, X, dtype=tf.float32, sequence_length=seq_length) 
+1

可以顯示完整的代碼;特別是你在哪裏定義你的佔位符?和數據加載 –

回答

1

您沒有發佈您定義的圖表,所以我們不知道training_op應該做什麼。

這就是說,我想你已經定義了一個形狀爲[None,181,192]的佔位符X,用於提供形狀值[100,177,203]。我不知道你的輸入是什麼樣子,但從形狀來看它可能是灰度圖像。如果您的網絡不完全卷積,所有輸入圖像必須具有完全相同的形狀,然後您必須在佔位符中指定。

嘗試將圖像重新縮放到佔位符預期的形狀,然後將它們饋送到圖形。

+0

我通過根據錯誤更改尺寸來自己修復錯誤。也就是說,n_steps從181更改爲177,n_inputs從192更改爲203.順便說一下,我想知道,您如何預先確定n_steps和n_inputs。在這裏,我明白了,因爲錯誤是這樣說的! – technOslerphile

相關問題