【问题标题】:Value error from tf.nn.dynamic_rnn: Dimensions must be equal来自 tf.nn.dynamic_rnn 的值错误:维度必须相等
【发布时间】:2018-07-25 08:08:01
【问题描述】:

我想使用 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'(操作: 'MatMul') 输入形状:[?,Y], [X,Y]。

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

【问题讨论】:

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


【解决方案1】:

从...更改您的代码

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 层将能够适应早期层的输出。

【讨论】:

  • 谢谢这是解决方案,但你只需要添加 range(self._num_layer) 因为 self._num_layer 在我的情况下是一个整数
  • @yohansebmoc 哎呀,确实忘记了range。感谢您发现它
猜你喜欢
  • 1970-01-01
  • 2018-06-12
  • 1970-01-01
  • 2021-05-27
  • 2018-06-30
  • 1970-01-01
  • 2020-03-30
  • 2022-09-27
  • 2020-05-24
相关资源
最近更新 更多