我不确定是否有解决此问题的最佳方法,但我就是这样解决的:
在我的模型中,我使用的是简单的 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_train 和 x_test。这些是从 tf.contrib.data 数据集迭代器获取批量数据的句柄:
x_train, x_train_labels = train_iter.get_next()
x_test, x_test_labels = test_iter.get_next()
所以我基本上在同一个图中有两个数据流,它们执行完全相同的操作。我还有模型的两个输出,mlp_train 和 mlp_test,这取决于模型是使用 x_train 还是 x_test 输入进行评估的。
现在:如果您使用mlp_train 输出创建优化器,并使用mlp_test 输出创建测试指标,您只需运行:sess.run(optimiser) 在训练数据集上训练您的系统,然后运行@987654333 @ 在您的测试数据集上测试您的系统,您永远不需要使用 feed_dict。
编辑:我阅读了您关于使用“训练模型时不可用的数据”的评论,我认为这个答案不能满足这一点。