我正在尝试构建CNN + RNN模型,我收到以下错误。任何帮助将不胜感激。
fc2有形状(?,4096)
cell = tf.contrib.rnn.BasicLSTMCell(self.rnn_hidden_units)
stack = tf.contrib.rnn.MultiRNNCell([cell]*self.rnn_layers)
initial_state = cell.zero_state(self.batch_size, tf.float32)
initial_state = tf.identity(initial_state, name='initial_state')
outputs, _ = tf.nn.dynamic_rnn(stack, fc2,dtype=tf.float32)
在模型输出中输入“rcnn.py”,第182行,_ = tf.nn.dynamic_rnn(stack,[fc2],dtype = tf.float32) 文件“/usr/local/lib/python2.7/dist-packages/tensorflow/python/ops/rnn.py”,第574行,在dynamic_rnn dtype = dtype中) 文件“/usr/local/lib/python2.7/dist-packages/tensorflow/python/ops/rnn.py”,第637行,在_dynamic_rnn_loop中为flat_input中的input_) 文件“/usr/local/lib/python2.7/dist-packages/tensorflow/python/ops/rnn.py”,第637行,输入flat_input中的input_) 文件“/usr/local/lib/python2.7/dist-packages/tensorflow/python/framework/tensor_shape.py”,第649行,with_rank_at_least引发ValueError(“Shape%s的排名必须至少为%d”%( self,rank))ValueError:Shape(4096,?)的等级必须至少为3
从他的评论中复制@jdehesa的答案以获得更好的可见性:
错误似乎相当清楚,tf.nn.dynamic_rnn期望三维张量作为输入(即等级3),但fc2只有两个维度。 fc2
的形状应该像(<batch_size>, <max_time>, <num_features>)
(或(<max_time>, <batch_size>, <num_features>)
,如果你通过time_major=True
)
tf.nn.dynamic_rnn的默认输入的维度为3(Batchsize,sequence_length,num_features)。由于您的num_features为1,您可以使用扩展fc_seq
fc2 = tf.expand_dims(fc2, axis = 2)
然后使用上面的代码。