python-TensorFlow自定义估计器预测抛出值错误
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了python-TensorFlow自定义估计器预测抛出值错误,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含3393字,纯文字阅读大概需要5分钟。
内容图文
![python-TensorFlow自定义估计器预测抛出值错误](/upload/InfoBanner/zyjiaocheng/695/9674e7a234a54e29958e0f2b0f03addf.jpg)
注意:该问题有一个随附的,有文档记录的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记录中读取,因为许多数据集的内存大于TensorFlow建议的1Gb,并且
>在训练时保存其最佳版本
尽管我对此仍有很多疑问(从将数据编码为TF记录的最佳方法,到serving_input_fn到底期望什么),但还有一个问题比其他问题更为突出:
如何使用我们刚刚制作的自定义估算器进行预测?
在predict的文档下,它指出:
input_fn
: A function that constructs the features. Prediction continues untilinput_fn
raises an end-of-input exception (tf.errors.OutOfRangeError
orStopIteration
). See Premade Estimators for more information. The function should construct and return one of the following:
- A tf.data.Dataset object: Outputs of Dataset object must have same constraints as below.
- features: A tf.Tensor or a dictionary of string feature name to Tensor. features are consumed by model_fn. They should satisfy the expectation of model_fn from inputs.
- A tuple, in which case the first item is extracted as features.
(也许)最有可能的是,如果一个人正在使用estimator.predict,则他们正在使用内存中的数据,例如密集的张量(因为保持测试集可能会通过评估).
因此,在随附的Colab中,我创建了一个单一的密集示例,将其包装在tf.data.Dataset中,并调用预报以获取ValueError.
如果有人可以向我解释我该如何做,我将不胜感激:
>加载我保存的估算器
>给定一个密集的内存示例,使用估算器预测输出
解决方法:
to_predict = random_onehot((1, SEQUENCE_LENGTH, SEQUENCE_CHANNELS))\
.astype(tf_type_string(I_DTYPE))
pred_features = {'input_tensors': to_predict}
pred_ds = tf.data.Dataset.from_tensor_slices(pred_features)
predicted = est.predict(lambda: pred_ds, yield_single_examples=True)
next(predicted)
ValueError: Tensor(“IteratorV2:0”, shape=(), dtype=resource) must be from the same graph as Tensor(“TensorSliceDataset:0”, shape=(), dtype=variant).
使用tf.data.Dataset模块时,它实际上定义了一个独立于模型图的输入图.这里发生的是,您首先通过调用tf.data.Dataset.from_tensor_slices()创建了一个小图,然后estimator API通过自动调用dataset.make_one_shot_iterator()创建了第二张图.这两个图无法通信,因此会引发错误.
为了避免这种情况,您永远不要在estimator.train / evaluate / predict之外创建数据集.这就是为什么所有相??关数据都包装在输入函数中的原因.
def predict_input_fn(data, batch_size=1):
dataset = tf.data.Dataset.from_tensor_slices(data)
return dataset.batch(batch_size).prefetch(None)
predicted = est.predict(lambda: predict_input_fn(pred_features), yield_single_examples=True)
next(predicted)
现在,不会在预测调用之外创建图.
我还添加了dataset.batch(),因为其余的代码期望批处理数据,并且抛出了形状错误.预取只是加快了速度.
内容总结
以上是互联网集市为您收集整理的python-TensorFlow自定义估计器预测抛出值错误全部内容,希望文章能够帮你解决python-TensorFlow自定义估计器预测抛出值错误所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。