簡體   English   中英

session.run上的Tensorflow ValueError與批處理培訓

[英]Tensorflow ValueError on session.run with batch training

我正在訓練一個類似於tensorflow教程的RNN,用於順序數據。 數據為[batch_size,step,dimension],標簽為[batch_size,num_classes]。

由於不同樣本的序列長度不同,我想創建批量訓練 - 每次我抓取32個樣本數據,將它們填充到最長的序列大小,然后將它們輸入rnn圖形進行訓練。

數據定義為:

data = DataGenerator(data_path, label_path)
train_data, train_label, train_seqlen, test_data, test_label = data.train_test_data(0.2)    
x = tf.placeholder(tf.float32, [batch_size, None, num_dim])
y = tf.placeholder(tf.float32, [batch_size, num_classes])
seqlen = tf.placeholder(tf.int32, [batch_size])
model = VariableSeqModel(x, y, seqlen)

Train_data是[batch_size,step,dim],train_label是[batch_size,num_classes]。 Seqlen是[batch_size,1],用於記錄每批中樣品的實際序列長度。 對於變量序列長度,我將x定義為[batch_size,None,num_dim]是否正確?

定義RNN和數據結構后,按照此代碼示例啟動會話:

with tf.Session() as sess:
    sess.run(tf.initialize_all_variables())
    step = 1
    while step*batch_size < 1000:
        batch_xx, batch_y, batch_seqlen = data.next(batch_size, train_data, train_label, train_seqlen)
        batch_x = data.batch_padding(batch_xx,batch_seqlen)
        sess.run(model.optimize, feed_dict={x: batch_xx, y: batch_y, seqlen: batch_seqlen})

        step += 1

我遇到了以下ValueError(下面的stacktrace):

dynamic_rnn.py in <module>()
--> 129  sess.run(model.optimize, feed_dict={x: batch_xx, y: batch_y, seqlen: batch_seqlen})

tensorflow/python/client/session.pyc in run(self, fetches, feed_dict, options, run_metadata)
    708    try:
    709    result = self._run(None, fetches, feed_dict, options_ptr,
--> 710   run_metadata_ptr)
    711    if run_metadata:
    712    proto_data = tf_session.TF_GetBuffer(run_metadata_ptr)

tensorflow/python/client/session.pyc in _run(self, handle, fetches, feed_dict, options, run_metadata)
    879   ' to a larger type (e.g. int64).')
    880 
--> 881   np_val = np.asarray(subfeed_val, dtype=subfeed_dtype)
    882 
    883   if not subfeed_t.get_shape().is_compatible_with(np_val.shape):

numpy/core/numeric.pyc in asarray(a, dtype, order)
    480 
    481 """
--> 482 return array(a, dtype, copy=False, order=order)
    483 
    484 def asanyarray(a, dtype=None, order=None):

ValueError: setting an array element with a sequence.

我很難過。 任何幫助贊賞!

我不是專家,但在我看來問題就在這里

Seqlen是[batch_size,1]

正如tensorflow教程所暗示的那樣,序列長度應該是

sequence_length :(可選)大小為[batch_size]的int32 / int64向量。

您可以嘗試相應地填充seqlen數組。 希望這會有所幫助。

問題解決了。 只需聲明seqlen = tf.placeholder(tf.int32, [None]) ,它就可以正常工作。 “[無]”這里表示批量大小的動態張量類型,而batch_size只是tf.int32。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM