如何在MultiRNNCell中重用权重?

时间:2017-05-12 10:33:34

标签: python tensorflow lstm

我想在重用旧权重的同时创建一个新的MultiRNNCell。

在创建MultiRNNCell时从TensorFlow 1.1开始,您必须显式创建新单元格。要重用权重,您必须提供reuse=True标记。在我的代码中,我目前有:

import tensorflow as tf
from tensorflow.contrib import rnn

def create_lstm_multicell():
    lstm_cell = lambda: rnn.LSTMCell(nstates, reuse=tf.get_variable_scope().reuse)
    lstm_multi_cell = rnn.MultiRNNCell([lstm_cell() for _ in range(n_layers)])
    return lstm_multi_cell

当我创建第一个多单元时,该函数应该按预期工作,并且多层元素内的每个单元都有独立的权重和偏差。

with tf.variable_scope('lstm') as scope:
    lstm1 = create_lstm_multicell()

现在我想创建另一个:

with tf.variable_scope('lstm') as scope:
    scope.reuse_variables()
    lstm2 = create_lstm_multicell()

我希望来自lstm2的第一个单元格使用来自lstm1的第一个单元格的权重和偏差,第二个单元格来重用第二个单元格的重量和偏差等等。但我怀疑从那以后我用rnn.LSTMCell,权重& 第一个单元格的偏差将一直被重复使用。

  1. 如何确保重量正确使用?
  2. 如果他们不是,如何强迫这种期望的行为?
  3. P.S。出于体系结构原因,我不想重用reuse=True,我想创建一个具有相同权重的新多宿lstm1

0 个答案:

没有答案