Tensorflow RNN细胞权重共享

纪尧姆·谢瓦利埃(Guillaume Chevalier)

我想知道下面的代码是否共享两个堆叠单元的权重:

cell = rnn_cell.GRUCell(hidden_dim)
stacked_cell = tf.nn.rnn_cell.MultiRNNCell([cell] * 2)

如果没有共享,如何在任何RNN中强制共享?

注意:我可能更想在嵌套的输入-输出连接的RNN配置中共享权重,其中第一层对于第二层的每个输入都克隆了很多次(例如,其中第一层代表字母,第二层代表收集的单词的句子)从迭代第一层的输出)

以撒玛利

通过执行以下脚本,您可以看到未共享权重:

import tensorflow as tf

with tf.variable_scope("scope1") as vs:
  cell = tf.nn.rnn_cell.GRUCell(10)
  stacked_cell = tf.nn.rnn_cell.MultiRNNCell([cell] * 2)
  stacked_cell(tf.Variable(np.zeros((100, 100), dtype=np.float32), name="moo"), tf.Variable(np.zeros((100, 100), dtype=np.float32), "bla"))
  # Retrieve just the LSTM variables.
  vars = [v.name for v in tf.all_variables()
                    if v.name.startswith(vs.name)]
  print vars

您将看到,除了虚拟变量之外,它还返回两组GRU权重:具有“ Cell1”的权重和具有“ Cell0”的权重。

为了使它们共享,您可以实现自己的单元类,该单元类GRUCell通过始终使用相同的变量范围来继承并始终重用权重:

import tensorflow as tf

class SharedGRUCell(tf.nn.rnn_cell.GRUCell):
    def __init__(self, num_units, input_size=None, activation=tf.nn.tanh):
        tf.nn.rnn_cell.GRUCell.__init__(self, num_units, input_size, activation)
        self.my_scope = None

    def __call__(self, a, b):
        if self.my_scope == None:
            self.my_scope = tf.get_variable_scope()
        else:
            self.my_scope.reuse_variables()
        return tf.nn.rnn_cell.GRUCell.__call__(self, a, b, self.my_scope)

with tf.variable_scope("scope2") as vs:
  cell = SharedGRUCell(10)
  stacked_cell = tf.nn.rnn_cell.MultiRNNCell([cell] * 2)
  stacked_cell(tf.Variable(np.zeros((20, 10), dtype=np.float32), name="moo"), tf.Variable(np.zeros((20, 10), dtype=np.float32), "bla"))
  # Retrieve just the LSTM variables.
  vars = [v.name for v in tf.all_variables()
                    if v.name.startswith(vs.name)]
  print vars

这样,两个GRUCell之间的变量就可以共享。请注意,您需要注意形状,因为同一单元格需要同时使用其原始输入和输出。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何在 Tensorflow 上共享 RNN 的变量

来自分类Dev

Tensorflow 中孪生模型中子类的共享权重

来自分类Dev

如何在Keras / TensorFlow中可视化RNN / LSTM权重?

来自分类Dev

从Tensorflow模型获取权重

来自分类Dev

Tensorflow RNN输入大小

来自分类Dev

Tensorflow:RNN与char输入

来自分类Dev

Tensorflow RNN序列训练

来自分类Dev

Tensorflow 动态 RNN - 形状

来自分类Dev

在TensorFlow中插值权重

来自分类Dev

Tensorflow 偏差和权重变量

来自分类Dev

Tensorflow不共享变量

来自分类Dev

Tensorflow网格LSTM RNN TypeError

来自分类Dev

TensorFlow 动态 RNN 未训练

来自分类Dev

Tensorflow RNN 输出张量形状

来自分类Dev

使用 Tensorflow 2 创建 RNN

来自分类Dev

彩色图像卷积核的Tensorflow权重?

来自分类Dev

评估步骤中的权重衰减 - Tensorflow

来自分类Dev

Tensorflow,在RNN中保存状态的最佳方法?

来自分类Dev

TensorFlow中的RNN模型内存不足

来自分类Dev

在Tensorflow RNN示例中从ID获取单词

来自分类Dev

通过rnn ValueError进行Tensorflow反向传播

来自分类Dev

Tensorflow RNN文本生成示例教程

来自分类Dev

在Tensorflow中创建高度可定制的RNN

来自分类Dev

在Tensorflow RNN示例中从ID获取单词

来自分类Dev

在Tensorflow RNN中使用CSV训练数据

来自分类Dev

旧的TensorFlow RNN文件哪里去了?

来自分类Dev

Tensorflow RNN培训无法执行吗?

来自分类Dev

如何在 TensorFlow RNN 中提供数据?

来自分类Dev

Tensorflow:从恢复的 RNN 中检索隐藏状态