Tensorflow basic_rnn_seq2seq TypeError:预期为int32,取而代之的是'float'类型的-0.1

时间:2016-08-01 09:16:58

标签: python tensorflow deep-learning lstm

我正在尝试在数据集上运行编码器 - 解码器模型。以下是示例代码:

self._input_data = tf.placeholder(tf.int32, [batch_size, num_steps])
self._targets = tf.placeholder(tf.int32, [batch_size, num_steps])
enc_inputs.append(self._input_data) #one batch at once
dec_inputs.append(self._targets)
model = seq2seq.basic_rnn_seq2seq(enc_inputs, dec_inputs, tf.nn.rnn_cell.BasicLSTMCell(size, state_is_tuple=True))

我收到类型不匹配的错误(如下所述)。有谁知道解决这个问题?

tensor_util.py, line 290, in _AssertCompatible
    (dtype.name, repr(mismatch), type(mismatch).__name__))
    TypeError: Expected int32, got -0.1 of type 'float' instead.

2 个答案:

答案 0 :(得分:1)

这是令人困惑的错误消息的问题。实际原因是,当您调用tf.get_variable()但未设置默认初始化程序时,错误消息将会令人困惑。您可以使用tf.zero_initializer()或类似的内容来抑制此错误。

答案 1 :(得分:0)

问题的根本情况在Tensorflow rnn_cell.py类中:

with vs.variable_scope(scope or "Linear"):
    matrix = vs.get_variable("Matrix", [total_arg_size, output_size], dtype=dtype)

你有两个不同类型的变量(tf.int32和tf.float32)

为解决这个问题,我使用tf.float32作为编码器和解码器输入,同时将目标保持为tf.int32(Seq2Seq模型所需)。

这样的事情可能有用:

self._input_data = tf.placeholder(tf.float32, [batch_size, num_steps])
self._targets = tf.placeholder(tf.int32, [batch_size, num_steps])
enc_inputs.append(self._input_data) #one batch at once
dec_inputs.append(self._targets)

请注意,该问题已在TF v0.12.1上重现。我检查了当前的主人rnn_cell.py,这是完全不同的。所以我认为这个问题可能会在以后的版本中消失。

相关问题