tf.nn.dynamic_rnn中的排名错误

问题描述 投票:6回答:2

我正在尝试构建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

tensorflow
2个回答
6
投票

从他的评论中复制@jdehesa的答案以获得更好的可见性:

错误似乎相当清楚,tf.nn.dynamic_rnn期望三维张量作为输入(即等级3),但fc2只有两个维度。 fc2的形状应该像(<batch_size>, <max_time>, <num_features>)(或(<max_time>, <batch_size>, <num_features>),如果你通过time_major=True


0
投票

tf.nn.dynamic_rnn的默认输入的维度为3(Batchsize,sequence_length,num_features)。由于您的num_features为1,您可以使用扩展fc_seq

fc2 = tf.expand_dims(fc2, axis = 2)

然后使用上面的代码。

© www.soinside.com 2019 - 2024. All rights reserved.