在训练期间,我将tf.contrib.data函数用于输入管道(没有占位符)。我的问题是,如何重用经过训练的模型,并在测试时输入新数据?这个问题类似于this one,除了我也不想在测试中使用占位符-我的测试数据集可能非常大,并且应该避免占位符的速度变慢。
有没有办法在测试时用新的管道替换输入管道?
发布于 2017-07-26 05:46:12
我不确定是否有解决这个问题的最佳方法,但我是这样解决的:
在我的模型中,我使用了一个简单的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)在训练数据集上训练您的系统,sess.run(test_metrics)在测试数据集上测试您的系统,并且您永远不需要使用feed_dict。
编辑:我读到了你关于使用“模型训练时不可用的数据”的评论,我不认为这个答案能满足你的要求。
https://stackoverflow.com/questions/45313555
复制相似问题