使用MultiRNNCell时出现切片错误

时间:2016-04-01 17:17:02

标签: python tensorflow

我正在使用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"]()]]

有没有人见过类似的错误?有什么指针吗?

4 个答案:

答案 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])

现在将此输入到解码器作为初始向量。