1
輸入的形狀是[batch_size, maxstep, 50, 50]
。我想在每一步使用某個cnn,使其成爲[batch_size, maxstep, 5 * 5 * 32]
。乍一看,我認爲我應該使用while_loop
。Tensorflow中的可變長度輸入
但是很難建立這個圖,「maxstep」和「batch_size」都是可變的,所以如何迭代這個張量呢?
這是我的錯誤代碼:
x = tf.placeholder(tf.float32, [2, None, None, 50, 50])
source = list()
target = list()
W_conv, B_conv = weight_and_bias('conv', [5, 5, 1, 32])
for e in x[0]:
e_tmp = tf.reshape(e, [-1, 50, 50 ,1])
h_conv = tf.nn.relu(conv2d(e_tmp, W_conv) + B_conv)
h_pool = max_pool_2x2(h_conv)
h_flat = tf.reshape(h_pool2, [-1, 5 * 5 * 32])
source.append(e_tmp)
for e in x[1]:
e_tmp = tf.reshape(e, [-1, 50, 50 ,1])
h_conv = tf.nn.relu(conv2d(e_tmp, W_conv) + B_conv)
h_pool = max_pool_2x2(h_conv)
h_flat = tf.reshape(h_pool2, [-1, 5 * 5 * 32])
target.append(e_tmp)
source = np.array(source)
target = np.array(target)
大多數這些操作接受一個批處理維度,並有效地在該批處理上執行操作(比迭代快得多)。是否有理由不能將前兩個維度合併爲一個批量維度(帶有重塑),然後通常調用操作系統? –
@AllenLavoie你的意思是結合「batch_size」和「maxstep」?實際上,這是一個順序問題,在cnn操作之後,我仍然需要將形狀爲[[batch_size,maxstep,5 * 5 * 32]]的批處理饋送到dynamic_rnn。所以如果將前兩個維度結合起來,順序信息將會丟失。 – Sraw
卷積完成後,你不能重新將它重新整理成[batch_size,maxstep,...],然後做任何你需要的順序處理? –