Tensorflow数据输入切换:训练/验证

Tim*_*man 5 python tensorflow

从方便但速度较慢的占位符切换后,我有通过队列运行器进入图表的数据。

在每个培训时期之后,我希望运行一个验证通行证。除训练通行证外,验证通行证使用不同的数据,没有扩充,也没有改组。

问题很简单:如何切换这些内容?

一些观察:

  • 我无法通过布尔值来切换shuffle选项。string_input_producertf.placeholder
  • 我发现的唯一的在线示例使用placeholder来将训练与验证数据分开。这些依次不使用高级队列运行器。
  • 我确实设法通过上述操作完成上述操作,tf.cond()我将测试通过的is_training tf.placeholder布尔值feed_dict。这种解决方案是最佳的吗?这种tf.conf()方法多少钱?

Rob*_*obR 3

对我来说效果很好的方法是使用tf.placeholder_with_default

images_train, labels_train = train_data_pipeline(fnlist_train, ref_grid)
images_val, labels_val = val_data_pipeline(fnlist_val, ref_grid)
images = tf.placeholder_with_default(images_train, shape=[None, FLAGS.nx_image, FLAGS.ny_image, FLAGS.nz_image])
labels = tf.placeholder_with_default(labels_train, shape=[None, label_length])
Run Code Online (Sandbox Code Playgroud)

训练期间,images直接labels来自训练队列。对于间歇性验证步骤,我通过调用中的 feed_dict 提供images并通过. 唯一的小问题是验证数据也是来自队列的张量,而 feed_dict 不接受张量,因此我首先调用以获取 numpy 值,然后在 feed_dict 中使用它们。似乎工作得很好,并且张量 ==>numpy==> 张量转换的延迟最小,无论如何,这只发生在验证期间。labelssess.run()sess.run([images_val, labels_val])

对于验证数据有单独处理要求的情况,可以在设置单独的验证队列和处理流程时处理。