Tensorflow-Seq2Seq模型重量未正确加载

Tensorflow-Seq2Seq模型重量未正确加载,tensorflow,machine-learning,lstm,chatbot,seq2seq,Tensorflow,Machine Learning,Lstm,Chatbot,Seq2seq,我正在开发一个编码器-解码器聊天机器人,它由嵌入层、两层LSTM和解码器顶部的完全连接层组成 加载检查点文件后,丢失比上次保存模型时高出很多,聊天机器人的结果也比预期的差很多。然而,模型并没有回到他最初的状态。这意味着,如果我在模型有2.4损失时保存模型,它将加载4-5损失,而不是10(这是模型开始学习之前的损失) 此外,模型在加载权重后学习速度更快,这使我相信一些权重已成功加载,而另一些权重未成功加载 我正在使用此代码构建模型,并在\uuuu init\uuuu函数中加载检查点: self.\

我正在开发一个
编码器-解码器
聊天机器人,它由
嵌入层
、两层
LSTM
和解码器顶部的
完全连接层
组成

加载
检查点文件后,
丢失
比上次保存模型时高出很多,聊天机器人的结果也比预期的差很多。然而,模型并没有回到他最初的状态。这意味着,如果我在模型有2.4损失时保存模型,它将加载4-5损失,而不是10(这是模型开始学习之前的损失)

此外,模型在加载权重后学习速度更快,这使我相信一些权重已成功加载,而另一些权重未成功加载

我正在使用此代码构建模型,并在
\uuuu init\uuuu
函数中加载
检查点

self.\u收集\u数据()
self.\u构建\u模型()
tf.global\u variables\u initializer().run(session=self.sess)
self.saver=tf.train.saver(tf.global_variables())
尝试:
self.saver.restore(self.sess、self.checkpoint\u路径)
除:
打印('从头开始')
这是我在
\uu build\u model
函数中构建模型的方式:

#占位符
使用tf.variable_scope(self.scope+'-placeholders'):
self.inputs=tf.placeholder(tf.int32,[None,self.input_length],name='inputs')
self.outputs=tf.placeholder(tf.int32,[None,None],name='outputs')
self.targets=tf.placeholder(tf.int32,[None,None],name='targets')
#嵌入
使用tf.variable_scope(self.scope+“嵌入”):
self.input\u embedding=tf.Variable(tf.ones((self.vocab\u size,self.embed\u size)))
self.output\u embedding=tf.Variable(tf.ones((self.vocab\u size,self.embed\u size)))
input\u embed=tf.nn.embedding\u查找(self.input\u embedding,self.inputs)
output\u embed=tf.nn.embedding\u查找(self.output\u embedding,self.outputs)
#编码器
使用tf.variable_scope(self.scope+'-encoder'):
lstm_enc_1=tf.contrib.rnn.LSTMCell(self.hidden_size,reuse=tf.AUTO_reuse)
lstm_enc_2=tf.contrib.rnn.LSTMCell(self.hidden_size,reuse=tf.AUTO_reuse)
_,最后一个状态=tf.nn.dynamic(tf.contrib.rnn.MultiRNNCell(单元格=[lstm_enc_1,lstm_enc_2]),输入=输入嵌入,数据类型=tf.float32)
#译码器
使用tf.variable_scope(self.scope+'-decoder'):
lstm_dec_1=tf.contrib.rnn.LSTMCell(self.hidden_size,reuse=tf.AUTO_reuse)
lstm_dec_2=tf.contrib.rnn.LSTMCell(self.hidden_size,reuse=tf.AUTO_reuse)
dec_输出,uu=tf.nn.dynamic_rnn(tf.contrib.rnn.multirncell(cells=[lstm_dec_1,lstm_dec_2]),输入=output_embed,初始状态=last_状态,数据类型=tf.float32)
self.logits=tf.contrib.layers.fully_connected(dec_输出,num_输出=self.vocab_大小,activation_fn=None,reuse=tf.AUTO_reuse,scope='fully_connected')
#损失与优化
使用tf.variable_scope(self.scope+'-optimization'):
self.loss=tf.contrib.seq2seq.sequence\u loss(self.logits,self.targets,tf.ones([self.batch\u size,self.input\u length]))
self.optimizer=tf.train.RMSPropOptimizer(0.001)。最小化(self.loss)
我用这个函数来保存训练时的重量:

self.saver.save(self.sess、self.checkpoint\u路径)

由于问题似乎与加载和保存模型有关,请包含相关代码(不确定转储整个模型是否有用-请查看原因)。@desertnaut感谢您指出这一点。我做了一些改变,还有什么吗?好的,既然你问:)。。。将其放在第一个代码段之前,以便突出显示语法(这可以使代码更具可读性):