来自tf.nn.dynamic_rnn的值错误:尺寸必须相等

时间:2018-02-14 16:59:04

标签: python tensorflow machine-learning lstm recurrent-neural-network

我想使用tensorflow的tf.nn.dynamic_rnn函数来创建RNN,但它允许我只为我的一个图层设置隐藏大小。

这是我的代码:

    self._Input=tf.placeholder(tf.float64,shape=(None,self._time_size,self._batch_dim),name='input')
    self._Expected_o=tf.placeholder(tf.float64,shape=(None,self._time_size,self._cell_output_size),name='Expected_o')
    #creation of the network

    initializer = tf.random_uniform_initializer(-1, 1)      
    cell = tf.nn.rnn_cell.GRUCell(self._hidden_size,kernel_initializer=initializer)  
    rnn_cells = tf.nn.rnn_cell.MultiRNNCell([cell] * self._num_layer) 

    # network
    self._output, out_state = tf.nn.dynamic_rnn(cell=rnn_cells,inputs= self._Input, dtype=tf.float64)

只要我将hidden_size值与输入占位符的最后一个维度相同,即_batch_dim,一切正常。

但是当它不同时,我总是得到这个错误信息:

  

ValueError:尺寸必须相等,但是8和X代表   'rnn / while / rnn / multi_rnn_cell / cell_0 / cell_0 / gru_cell / MatMul_2'(op:   'MatMul')输入形状:[?,Y],[X,Y]。

其中X是我为hidden_size + 1Y赋予hidden_size*2值的值。我尝试了很多hidden_size的值,每次出现这两个数字XY。消息错误表示在调用tf.rnn.dynamic_rnn期间发生错误。

1 个答案:

答案 0 :(得分:3)

从...更改您的代码

cell = tf.nn.rnn_cell.GRUCell(self._hidden_size,kernel_initializer=initializer)  
rnn_cells = tf.nn.rnn_cell.MultiRNNCell([cell] * self._num_layer) 

到...

layers = [tf.nn.rnn_cell.GRUCell(self._hidden_size,kernel_initializer=initializer) 
          for _ in self._num_layer]
rnn_cells = tf.nn.rnn_cell.MultiRNNCell(layers)

......更深的GRU图层将能够适应早期图层的输出。