我尝试使用以下代码在Tensorflow中建立从LSTM层到完全连接层的连接:
# lstm_outputs has shape 1x10x100
rnn_out = tf.reshape(lstm_outputs, [-1, 100])
# rnn_out has shape 10x100
现在我想在RNN的输出中添加一个1x10向量,并将这个新张量输入完全连接的层。
extra_params = tf.placeholder(shape=[1,10], dtype=tf.float32)
fc_input = tf.concat(1,[rnn_out,extra_params])
fc1 = slim.fully_connected(fc_input,o_size,
activation_fn=tf.nn.relu,
weights_initializer=tf.truncated_normal_initializer(),
biases_initializer=None)
但是代码在tf.concat
行上给出了以下错误:
TypeError:预期int32,得到包含类型的张量的列表 ' _Message'代替。
我有两个与此代码相关的问题:
答案 0 :(得分:3)
假设你正在使用TensorFlow 1.0,TypeError
是由tf.concat()
的参数顺序错误引起的(有时在TensorFlow 0.12周围切换):它需要一个{{1}的列表首先是对象,然后是要连接这些张量的轴。
但是,如果您只是反转参数(tf.Tensor
),则会出现与形状相关的错误。 tf.concat([rnn_out, extra_params], 1)
要求其所有输入具有相同的维度,除了在您连接的轴上。但是,tf.concat()
是10 x 100矩阵,而rnn_out
是1 x 10矩阵,因此这些张量不兼容连接。
正确的解决方案取决于extra_params
应该代表什么。例如,如果10是训练中的批量大小,则可以将extra_params
转换为10 x 1矩阵。以下程序应该有效:
extra_params