【问题标题】:How to set initial state of rnn as parameter in tensorflow?如何将rnn的初始状态设置为tensorflow中的参数?
【发布时间】:2016-10-21 03:27:25
【问题描述】:

当使用dynamic_rnn 时,需要一个名为initial_state 的参数。一个简单的解决方案是

initial_state = lstm_cell.zero_state(batch_size, tf.float32)

但是我想把初始状态设置为可以优化的参数,怎么办?

我可以定义两个 trainable_variables,分别称为 h0c0,它们是两个向量。但是dynamic_rnn 需要两个矩阵,其中第一个维度是batch_size。如何将向量h0 扩展为每行为h0 的矩阵?

【问题讨论】:

    标签: tensorflow recurrent-neural-network


    【解决方案1】:

    如果你做了这样的事情呢?

    initial_state_vector = tf.get_variable('initial_state_vector', [1, state_size])
    initial_state = tf.tile(initial_state_vector, batch_size)
    

    然后您可以将initial_state 变量提供给 LSTM,它将是正确的大小。

    【讨论】:

    • 从文档中我不清楚tf.tile 将所有值链接在一起(以确保您只学习state_size many values 而不是batch_size * state_size many values)。你知道是不是这样吗?
    • 是的。当您平铺矢量时,它将所有这些权重联系在一起。我没有在我的答案中测试代码,所以我可能会有些偏差,但这个基本策略应该有效。
    • 其实应该是 initial_state = tf.tile(initial_state_vector, [batch_size, 1]) tf.tile的第二个参数应该是一个list或者一个tensor,其中每个item 平铺 initial_state_vector 的每个维度。
    • 当我尝试任何一个答案时,我都会收到错误'Tensor' object is not iterable,知道为什么吗?
    猜你喜欢
    • 1970-01-01
    • 2016-12-30
    • 1970-01-01
    • 2020-11-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-11-02
    • 1970-01-01
    相关资源
    最近更新 更多