我正在使用tensorflow.models.rnn.rnn_cell
的MultiRNNCell。这就是声明我的MultiRNNCell
代码:
e_cell = rnn_cell.GRUCell(self.rnn_size)
e_cell = rnn_cell.MultiRNNCell([e_cell] * 2)
后来我在seq2seq.embedding_rnn_decoder里面使用它,如下所示
ouputs, mem_states = seq2seq.embedding_rnn_decoder(decoder_inputs, enc_state, e_cell, vocab_size, output_projection=(W, b), feed_previous=False)#
在执行此操作时,我收到以下错误
错误:
tensorflow.python.framework.errors.InvalidArgumentError: Expected size[1] in [0, 0], but got 1024
[[Node: en/embedding_rnn_decoder_1/rnn_decoder/MultiRNNCell/Cell1/Slice = Slice[Index=DT_INT32, T=DT_FLOAT, _device="/job:localhost/replica:0/task:0/gpu:0"](Sigmoid_2, en/embedding_rnn_decoder_1/rnn_decoder/MultiRNNCell/Cell1/Slice/begin, en/embedding_rnn_decoder_1/rnn_decoder/MultiRNNCell/Cell1/Slice/size)]]
[[Node: en/embedding_rnn_decoder/rnn_decoder/loop_function_17/StopGradient/_1230 = _Recv[client_terminated=false, recv_device="/job:localhost/replica:0/task:0/cpu:0", send_device="/job:localhost/replica:0/task:0/gpu:0", send_device_incarnation=1, tensor_name="edge_11541_en/embedding_rnn_decoder/rnn_decoder/loop_function_17/StopGradient", tensor_type=DT_INT64, _device="/job:localhost/replica:0/task:0/cpu:0"]()]]
有没有人见过类似的错误?有什么指针吗?
答案 0 :(得分:0)
看起来像是embedding_rnn_decoder中的无效参数。 也许尝试更改enc_state:
ouputs, mem_states = seq2seq.embedding_rnn_decoder(decoder_inputs, enc_state[-1], e_cell, vocab_size, output_projection=(W, b), feed_previous=False)
答案 1 :(得分:0)
我遇到了与你类似的问题。{tensorflow.python.framework.errors.InvalidArgumentError: Expected size[1] in [0, 0], but got 40}
我也用rnn_cell.GRUCell(self.rnn_size)
我想分享一下我的经验,也许它很有帮助。
这是我修复它的方法。
我想使用gru cell和basic rnn cell,所以我调整了其他编程为lstm cell的程序。
lstm和GRU / BasicRnn之间的差异是state_size。
这是lstm单元格def state_size(self):return 2 * self._num_units
这是GRU / BasicRnn单元格def state_size(self):return self._num_units
因此矩阵的形状不同,张量不适合op.I建议您检查代码包含tf.slice
答案 2 :(得分:0)
我遇到了与embedding_rnn_seq2seq(Tensorflow v0.9.0)类似的问题。我将输入切换为使用embedding_rnn_decoder运行,并能够使用这些输入运行会话。
enc_inp = [tf.placeholder(tf.int32, shape=(batch_size,),
name="inp%i" % t) for t in range(seq_length)]
labels = [tf.placeholder(tf.int32, shape=(batch_size,),
name="labels%i" % t) for t in range(seq_length)]
weights = [tf.ones_like(labels_t, dtype=tf.float32) for labels_t in labels]
dec_inp = ([tf.zeros_like(enc_inp[0], dtype=np.int32, name="GO")] + enc_inp[:-1])
prev_mem = tf.zeros((batch_size, memory_dim))
cell = rnn_cell.GRUCell(memory_dim)
cell = rnn_cell.MultiRNNCell([cell]*2)
dec_outputs, mem_states = seq2seq.embedding_rnn_decoder(dec_inp, prev_mem,
cell, n_x, n_y,feed_previous=True)
希望这有帮助!
答案 3 :(得分:0)
发生此问题的原因是您的GRU单元格加倍,但初始向量不会加倍。 如果您的initial_vector大小为[batch_size,50]。
然后initial_vector = tf.concat(1,[initial_vector,initial_vector])
现在将此输入到解码器作为初始向量。