首页 文章

Tensorflow RNN输入大小

提问于
浏览
2

我试图使用tensorflow来创建一个循环神经网络 . 我的代码是这样的:

import tensorflow as tf

rnn_cell = tf.nn.rnn_cell.GRUCell(3)

inputs = [tf.constant([[0, 1]], dtype=tf.float32), tf.constant([[2, 3]], dtype=tf.float32)]

outputs, end = tf.nn.rnn(rnn_cell, inputs, dtype=tf.float32)

现在,一切都运行得很好 . 但是,我对实际发生的事情感到困惑 . 输出维度始终是批量大小x rnn单元隐藏状态的大小 - 它们如何完全独立于输入大小?

如果我的理解是正确的,则输入在每一步连接到rnn的隐藏状态,然后乘以权重矩阵(以及其他操作) . 这意味着权重矩阵的维度需要取决于输入大小,这是不可能的,因为rnn_cell是在输入被声明之前创建的!

1 回答

  • 0

    在看到answer关于张量流的问题之后's GRU implementation, I'实现了什么's going on. Counter to my intuition, the GRUCell constructor doesn' t根本不会产生任何重量或偏差变量 . 相反,它创建自己的变量范围,然后在实际调用时按需实例化变量 . Tensorflow的变量范围机制确保变量仅创建一次,并在后续调用GRU时共享 .

    我不确定为什么他们决定采用这种相当混乱的实现,据我所知,这是无证的 . 对我来说,使用python的对象级变量作用域来封装GRUCell本身内的tensorflow变量似乎更合适,而不是依赖于额外的隐式作用域机制 .

相关问题