我使用tf.data.Dataset API训练了一个模型,所以我的训练代码如下所示
with graph.as_default():
dataset = tf.data.TFRecordDataset(tfrecord_path)
dataset = dataset.map(scale_features, num_parallel_calls=n_workers)
dataset = dataset.shuffle(10000)
dataset = dataset.padded_batch(batch_size, padded_shapes={...})
handle = tf.placeholder(tf.string, shape=[])
iterator = tf.data.Iterator.from_string_handle(handle,
train_dataset.output_types,
train_dataset.output_shapes)
batch = iterator.get_next()
...
# Model code
...
iterator = dataset.make_initializable_iterator()
with tf.Session(graph=graph) as sess:
train_handle = sess.run(iterator.string_handle())
sess.run(tf.global_variables_initializer())
for epoch in range(n_epochs):
sess.run(train_iterator.initializer)
while True:
try:
sess.run(optimizer, feed_dict={handle: train_handle})
except tf.errors.OutOfRangeError:
break现在,在模型被训练之后,我想推断出数据集中没有的例子,我不知道该如何去做。
为了明确起见,我知道如何使用另一个数据集,例如,我只是在测试时向我的测试集传递一个句柄。
问题是,考虑到扩展方案和网络需要一个句柄这一事实,如果我想对一个未写入TFRecord的新示例进行预测,我将如何进行呢?
如果我修改batch,我将负责事先进行缩放,如果可能的话,这是我想要避免的事情。
那么,我应该如何从模型中推断出单个示例--验证tf.data.Dataset的方法?(这不是为了生产目的,而是为了评估如果我更改特定特性会发生什么)
发布于 2018-07-06 00:50:04
实际上,当您使用dataset api时,图中有一个名为"IteratorGetNext:0“的张量名称,因此您可以使用以下方式直接设置输入:
#get a tensor from a graph
input tensor : input = graph.get_tensor_by_name("IteratorGetNext:0")
# difine the target tensor you want evaluate for your prediction
prediction tensor: predictions=...
# finally call session to run
then sess.run(predictions, feed_dict={input: np.asanyarray(images), ...})https://stackoverflow.com/questions/50940667
复制相似问题