【发布时间】:2019-04-17 21:02:53
【问题描述】:
注意:这个问题有一个随附的记录在案的 Colab 笔记本。
TensorFlow 的文档有时可能有很多不足之处。一些用于较低级别 api 的旧文档似乎已被删除,大多数较新的文档都指向使用更高级别的 api,例如 TensorFlow 的 keras 或 estimators 的子集。如果更高级别的 api 不经常密切依赖它们的较低级别,这将不会有那么大的问题。举个例子,estimators(尤其是使用 TensorFlow Records 时的input_fn)。
以下 Stack Overflow 帖子:
- Tensorflow v1.10: store images as byte strings or per channel?
- Tensorflow 1.10 TFRecordDataset - recovering TFRecords
- Tensorflow v1.10+ why is an input serving receiver function needed when checkpoints are made without it?
- TensorFlow 1.10+ custom estimator early stopping with train_and_evaluate
- TensorFlow custom estimator stuck when calling evaluate after training
在 TensorFlow / StackOverflow 社区的慷慨帮助下,我们更接近于做 TensorFlow "Creating Custom Estimators" guide 没有做的事情,展示了如何制作一个可以在实践中实际使用的估算器(而不是玩具示例),例如一个:
- 有一个验证集,用于在性能恶化时提前停止,
- 从 TF Records 读取,因为许多数据集大于 TensorFlow 推荐的 1Gb 内存,并且
- 在训练时保存其最佳版本
虽然我对此仍有许多疑问(从将数据编码到 TF 记录的最佳方式,到 serving_input_fn 的确切期望),但有一个问题比其他问题更突出:
如何使用我们刚刚制作的自定义估算器进行预测?
在predict 的文档中,它指出:
input_fn:构造特征的函数。预测会一直持续到input_fn引发输入结束异常(tf.errors.OutOfRangeError或StopIteration)。有关详细信息,请参阅预制估算器。该函数应构造并返回以下之一:
- tf.data.Dataset 对象:Dataset 对象的输出必须具有与以下相同的约束。
- features: 一个 tf.Tensor 或一个字符串特征名到 Tensor 的字典。特征由 model_fn 使用。它们应该满足输入对 model_fn 的期望。
- 一个元组,在这种情况下,第一项被提取为特征。
(也许)最有可能的是,如果使用estimator.predict,他们正在使用内存中的数据,例如密集张量(因为保留的测试集可能会通过evaluate)。
因此,我在随附的 Colab 中创建了一个密集示例,将其包装在 tf.data.Dataset 中,然后调用 predict 以获取 ValueError。
如果有人能向我解释我该怎么做,我将不胜感激:
- 加载我保存的估算器
- 给定一个密集的内存示例,使用估计器预测输出
【问题讨论】:
标签: python tensorflow machine-learning