【问题标题】:tensorflow save shared variable inside librarytensorflow在库中保存共享变量
【发布时间】:2016-05-03 17:08:48
【问题描述】:

我形成了一个具有多个隐藏状态的小型 LSTM 单元。从 Tensorflow howtos 中,我能够保存和恢复使用 tf.Variable 声明的变量的状态。但是,当我研究 rnn_cell.py 时,我发现存在一个函数:

def linear(args, output_size, bias, bias_start=0.0, scope=None):

里面有一个共享变量访问

matrix = vs.get_variable("Matrix", [total_arg_size, output_size])

据我了解,这个矩阵存储了权重 W_i、W_o、W_f 和 W_o,因为在线性函数之后:

new_c = c * sigmoid(f + self._forget_bias) + sigmoid(i) * tanh(j)
new_h = tanh(new_c) * sigmoid(o)

所以,我也愿意保存和恢复这个变量。我的问题是这在哪里可能?

【问题讨论】:

  • 为什么要这样做?当前的保存/恢复对您不起作用?
  • 1 - 我从另一篇文章中读到的是 save 和 restore 不会保存这些变量(只保存您在自己的代码中定义的变量,也许我没有仔细检查是错误的) . 2- 速度:我有数百个训练数据文件,当我对这些文件进行训练时,我会在文件的开头和结尾恢复并保存状态。因此,在批量处理单个文件的过程中,我需要每批(假设每 256 个元素)的 Matrix 值进行一些自定义计算。我认为每 256 个元素保存和恢复可能会很昂贵(读/写 io)。

标签: python tensorflow lstm


【解决方案1】:

对于记录,可以通过深入变量范围来获得矩阵。 get_variable 也需要昏暗信息:[2 * hidden_size, 4 * hidden_size]

        with tf.variable_scope("RNN", reuse=True):
          with tf.variable_scope("BasicLSTMCell", reuse=True):
            with tf.variable_scope("Linear", reuse=True):
                v1 = tf.get_variable("Matrix", [2 * hidden_size, 4 * hidden_size])
                print(v1.eval())

【讨论】:

    【解决方案2】:

    您可以通过评估来访问您的张量。例如,要获取 matrix 的值,您应该通过如下方式评估它: ar = sess.run(matrix) for row in ar: for col in row: # your method to save your data 你可以构建一个类,在这里你的变量用作占位符,你只需用你之前保存的加载模型来提供它们!

    【讨论】:

    • 是的,我在会话中访问了它们
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-08-07
    • 2017-01-23
    • 1970-01-01
    相关资源
    最近更新 更多