我想在重用旧权重的同时创建一个新的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
,权重& 第一个单元格的偏差将一直被重复使用。
P.S。出于体系结构原因,我不想重用reuse=True
,我想创建一个具有相同权重的新多宿lstm1
。