我正在尝试在数据集上运行编码器 - 解码器模型。以下是示例代码:
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.
答案 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,这是完全不同的。所以我认为这个问题可能会在以后的版本中消失。