我构建了一个用于训练的lstm模型,并总结了我的损失。我还使用tf.variable_scope构建了一个测试模型(' model',reuse = True)。
with tf.variable_scope('model', reuse=None):
training_model = MyModel(...., feedforward_only = False)
with tf.variable_scope('model', reuse = True):
test_model = MyModel(...., feedforward_only = True)
现在我想在测试模型上查看我的丢失,所以在我的step()函数中,我将self.merged添加到我的输出列表中:
if not forward_only:
output_feed = [self.update,
self.gradient_norm,
self.loss,
self.outputs,
self.merged]
else:
output_feed = [self.loss,
self.outputs,
self.merged]
当我将数据输入训练模型时,我成功获得合并摘要并查看张量板上的损失。
但是当我尝试使用step()函数将数据输入测试模型时,它引发了一个错误:
You must feed a value for placeholder tensor 'model/inputs/sequence_length' with dtype int32 and shape [?]
我发现,实际上,get_variables()创建的变量与训练模型共享,因为它们具有相同的名称' model / variable_name'。但包括所有占位符在内的其余变量使用不同的名称。在训练模型中,它们是“模型/变量名称”。而在测试模型' model_1 / variable_name'。
所以我认为,当我将数据输入测试模型时,我实际上已经输入了模型_1 /占位符'。我认为没有问题。
事实上,如果我没有将self.merged添加到我的输出列表中,那么获得测试结果确实没有问题。
但是,当我将self.merged添加到输出列表中时,我收到了上述错误消息。它说我必须将数据提供给 model / place_holder。而不是 model_1 / placeholder ,这是测试模型的place_holder。
我想知道为什么当我想将数据输入我的测试模型以获得摘要时,我必须将数据提供给我的训练模型。
或者我的代码有什么问题吗?