为什么测试模型的摘要必须将数据输入到火车模型中?

时间:2017-09-25 02:25:41

标签: tensorflow tensorboard

我构建了一个用于训练的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。

我想知道为什么当我想将数据输入我的测试模型以获得摘要时,我必须将数据提供给我的训练模型。

或者我的代码有什么问题吗?

0 个答案:

没有答案