【问题标题】:Tensorflow reusing of Multi-Layered LSTM Network多层 LSTM 网络的 Tensorflow 复用
【发布时间】:2019-09-16 06:27:45
【问题描述】:

我正在尝试对不同的输入使用相同的 LSTM 架构,因此在展开双向 LSTM 的同时传递相同的单元格,同时展开不同的输入。我不确定它是否创建了两个完全不同的 LSTM 网络。看起来我的图表中有两个不同的节点。我的代码和图表如下所示:

def get_multirnn_cell(self):
    cells = []
    for _ in range(config.n_layers):
        cell = tf.nn.rnn_cell.LSTMCell(config.n_hidden, initializer=tf.glorot_uniform_initializer())
        dropout_cell = tf.nn.rnn_cell.DropoutWrapper(cell=cell,
                                                     input_keep_prob=config.keep_prob,
                                                     output_keep_prob=config.keep_prob)
        cells.append(dropout_cell)
    return cells

def add_lstm_op(self):

    with tf.variable_scope('lstm'):
        cells_fw = self.get_multirnn_cell()
        cells_bw = self.get_multirnn_cell()
        cell_fw = tf.nn.rnn_cell.MultiRNNCell(cells_fw)
        cell_bw = tf.nn.rnn_cell.MultiRNNCell(cells_bw)
        (_, _), (state_one_fw, state_one_bw) = tf.nn.bidirectional_dynamic_rnn(cell_fw, cell_bw,
                                                                               inputs=self.question_one,
                                                                               sequence_length=self.seql_one,
                                                                               dtype=tf.float32)

        self.state_one = tf.concat([state_one_fw[-1].h, state_one_bw[-1].h], name='state_one', axis=-1)

        # self.state_one = tf.concat([state_one_fw, state_one_bw], axis=-1)
        # [batch_size, 2*hidden_size]

        (_, _), (state_two_fw, state_two_bw) = tf.nn.bidirectional_dynamic_rnn(cell_fw, cell_bw,
                                                                               inputs=self.question_two,
                                                                               sequence_length=self.seql_two,
                                                                               dtype=tf.float32)
        self.state_two = tf.concat([state_two_fw[-1].h, state_two_bw[-1].h], name='state_two', axis=-1)

【问题讨论】:

    标签: tensorflow deep-learning lstm tensorboard


    【解决方案1】:

    如果您想重用multirnn_cell,可以为variable_scope 传递reuse=tf.AUTO_REUSE

    with tf.variable_scope('lstm', reuse=tf.AUTO_REUSE)
    

    请参阅doc

    【讨论】:

    • 嗨,我也尝试过使用它。根据图表,是创建了两个独立的网络,还是因为输入不同而分别显示?
    • 它们可以用两组变量或共享变量创建。我们无法从您当前的图表中看出。您应该可以点击 tensorboard 上的两个“bidirectional_rnn”块,看看它们是否真的链接到同一组变量。
    猜你喜欢
    • 1970-01-01
    • 2018-11-05
    • 2016-10-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多