Tensorflow 在测试时替换输入管道(不带占位符的tf.contrib.data)

Tensorflow 在测试时替换输入管道(不带占位符的tf.contrib.data),tensorflow,Tensorflow,在培训期间,我将tf.contrib.data函数用于输入管道(没有占位符)。我的问题是如何重用经过训练的模型并在测试时输入新数据?这个问题与类似,只是我也不想在测试中使用占位符——我的测试数据集可能非常大,也应该避免占位符变慢 有没有办法在测试时用新的输入管道替换输入管道?我不确定是否有最佳方法解决此问题,但我就是这样解决的: 在我的模型中,我使用了一个简单的MLP,因此我的model()函数中有如下行: train_layer = tf.add(tf.matmul(x_train, weig

在培训期间,我将tf.contrib.data函数用于输入管道(没有占位符)。我的问题是如何重用经过训练的模型并在测试时输入新数据?这个问题与类似,只是我也不想在测试中使用占位符——我的测试数据集可能非常大,也应该避免占位符变慢


有没有办法在测试时用新的输入管道替换输入管道?

我不确定是否有最佳方法解决此问题,但我就是这样解决的:

在我的模型中,我使用了一个简单的MLP,因此我的
model()
函数中有如下行:

train_layer = tf.add(tf.matmul(x_train, weights['w1']), biases['b1'])
train_layer = tf.nn.relu(train_layer)
test_layer = tf.add(tf.matmul(x_test, weights['w1']), biases['b1'])
test_layer = tf.nn.relu(test_layer)
如您所见,我有两个输入,
x\u train
,和
x\u test
。以下是从tf.contrib.data数据集迭代器获取批量数据的句柄:

x_train, x_train_labels = train_iter.get_next()
x_test, x_test_labels = test_iter.get_next()
所以我在同一个图中有两个数据流,对它们执行完全相同的操作。我还有两个模型输出,
mlp\u-train
mlp\u-test
,这取决于模型是使用
x\u-train
还是
x\u-test
输入进行评估

现在:如果您使用
mlp\u训练
输出创建您的优化程序,并使用
mlp\u测试
输出创建您的测试指标,您只需运行:
sess.run(optimizer)
在训练数据集上训练您的系统,以及
sess.run(test\u metrics)
在测试数据集上测试您的系统,而且你永远不需要使用提要


编辑:我阅读了您关于使用“模型训练时不可用的数据”的评论,我认为这个答案不能满足这一点。

您可以在输入管道之间切换,检查:我在迭代器之间切换以进行训练/验证,但在测试时,我希望能够插入一些任意数据,例如,在模型训练时不可用的数据。是的,这也不允许以后插入任意的新输入管道。应该有某种方法将模型输入重新连接到其他输入,但我仍然找不到任何东西。此外,这似乎是一种不必要的复杂方式,用于在培训和验证之间切换。您可以使用占位符在两个迭代器之间切换,而无需编写两次模型。如果占位符是布尔值,则开销应该最小(即不是一批图像)。