tensorflow estimator使用总结

tensorflow estimator使用总结最近在使用 estimator 做项目 发现官网对这个 estimator 整体的讲解和使用过程中的细节讲的比较少 结合我是用过程中的问题 对 estimator 的使用步骤进行了总结 如下 代码见 github 求 star 1 estimator 主要需要 model fn input fn 以及 serving fn2 model fn 主要是是用来定义 model input

最近在使用estimator做项目,发现 官网 对 这个 estimator整体的讲解 和使用 过程中的细节讲的比较少,结合 我是用过程中的问题,对 estimator的使用步骤进行了总结,如下:代码 见github,求star~~

1. estimator主要需要model_fn,input_fn 以及 serving_fn

2. model_fn主要是是用来定义model  ,input_fn主要是用来 定义输入(一般情况下只负责用来定义 train和evaluate),serving_fn用来定义 serving过程中的输入

针对代码中estimator_template.ipynb详细说一下,您可以 参照着代码来看说明:

1. 建立模型

def create_model(params):     # 定义网络结构 和 损失 以及 返回值     pass def  model_fn_builder(params):     # 该方法实际 创建 estimator的model_fn     # 可以 有其他操作     def model_fn(features, labels, mode, params,config) #estimator需要的model_fn 参数固定     '''     features: from input_fn的返回  切记返回的顺序     labels: from input_fn 的返回  切记返回的顺序     mode: tf.estimator.ModeKeys实例的一种     params: 在初始化estimator时 传入的参数列表,dict形式,或者直接使用self.params也可以     config:初始化estimator时 的 Runconfig          '''         create_model(params)         if mode==tf.estimator.ModeKeys.PREDICT: # 执行预测             #...         elif mode==tf.estimator.ModeKeys.EVAL: #评估             #...         elif mode=tf.estimator.ModeKeys.TRAIN: # 训练             #...                  #......其它操作                  # 最后返回         return tf.estimator.EstimatorSpec(......)     return model_fn

在此,我将 model_fn这块,进行了分拆:create_model,model_fn_builder(返回model_fn)

create_model 只负责网络架构的创建,而不包括 后续 损失计算和返回的定义,这个操作 我统一放在了 model_fn中进行定义(为了 让 各个方法 只负责对应的事情),还有一点 需要注意,在create_model中,最后一层的输出,最好不适用 激活函数,而是在model_fn中对model的输出 进行 相应的操作,这样就可以保证 model可以共用

2. 输入方法:

def input_fn_builder(params): ''' 创建 输入函数闭包 ''' # 可以执行其它操作 def input_fn(......): # 具体操作...... return features,labels # 返回的 顺序要和 model_fn一致 或者 dataset元素 格式为(features,label)元组 也可以 return input_fn

这个函数 返回 输入函数闭包 

3. serving_fn

def serving_input_receiver_fn(): ''' 定义模型导出后,serving的输入值 ''' #.......各种数据转换 # 在此处 多说一些 关于 batch_features以及 receiver_tensor # 1. 首先 这两个 参数,相互之间 并没有 直接 的 关系(切记,没有直接关系,说明还是 有间接关系的) # 2. batch_features这个参数的格式必须 满足 model_fn中features参数格式 # 2.1 关于值的格式,首先他必须是 tensor或者sparseTensor 或者 字典格式(value必须是tensor/sparsetensor),然后features被传给model # 2.2 如果 features不是字典,则 该方法会自动将其封装为dict(视为一个样本),并使用‘feature’作为key # 2.3 总结:model必须接受一个形如{'feature':tensor}的字典作为入参 # 3.receiver_tensor 这个参数 是用来接收 请求 的 参数,改参数 一般可以 用一个 placeholder代替,后续经过各种变化, # 将receiver_tensor的值 转换为model_fn中features格式 # 3.1 必须是 tensor或者sparseTensor 或者 字典格式(value必须是tensor/sparsetensor) return tf.estimator.export.ServingInputReceiver(batch_features,receiver_tensor)

强调一下,这一块 仔细的看,因为 涉及到 生产部署。这块也很容易出错 

3. 模型训练,评估,预测,导出

这块直接看代码 并参照 tf官网 就会明白

4. 部署

具体部署方法还是 看代码吧,没什么 可说的,部署的话 还是 建议 使用 tensorflow serving docker方法,太方便了,后续 对k8s支持的也很好

最后,estimator.ipynb文件 是我按照 这个 步骤 写的一个demo

 

知乎: https://zhuanlan.zhihu.com/albertwang

微信公众号:AI-Research-Studio

https://img-blog.csdnimg.cn/20190110102516916.png ​​

下面是赞赏码

tensorflow estimator使用总结

 

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/233112.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • insert oracle用法,insert into select的实际用法,insertselect

    insert oracle用法,insert into select的实际用法,insertselectinsertintoselect的实际用法,insertselectINSERTINTOSELECT语句语句形式为:InsertintoTable2(field1,field2,…)selectvalue1,value2,…fromTable1或者:InsertintoTable2select*fromTable1注意:(1)要求目标表Table2必须存…

    2022年7月16日
    16
  • 以上都点赞表情包图片_超级点赞图片

    以上都点赞表情包图片_超级点赞图片原题链接微博上有个“点赞”功能,你可以为你喜欢的博文点个赞表示支持。每篇博文都有一些刻画其特性的标签,而你点赞的博文的类型,也间接刻画了你的特性。然而有这么一种人,他们会通过给自己看到的一切内容点赞来狂刷存在感,这种人就被称为“点赞狂魔”。他们点赞的标签非常分散,无法体现出明显的特性。本题就要求你写个程序,通过统计每个人点赞的不同标签的数量,找出前3名点赞狂魔。输入格式:输入在第一行给出一个正整数N(≤100),是待统计的用户数。随后N行,每行列出一位用户的点赞标签。格式为“Name K F​1​

    2022年8月8日
    4
  • 学习Java大数据需要掌握哪些Java技能?

    学习Java大数据需要掌握哪些Java技能?学习Java大数据需要掌握哪些Java技能?现在大数据发展很速度很多小伙伴想要学习Java大数据技术开发,但是学习大数据为什么需要掌握Java技能呢?一、学大数据为什么要掌握Java?首先,我们学习大数据,为什么要先掌握Java技术?Java是目前使用非常广泛的编程语言,它具有的众多特性,特别适合作为大数据应用的开发语言。Java不仅吸收了C++语言的各种优点,还摒弃了C++里难以理解的多继承、指针等概念,因此Java语言具有功能强大和简单易用两个特征。Java语言作为静态面向对象编程语言的

    2022年5月27日
    32
  • 克莱因瓶莫比乌斯带_克莱因瓶剪莫比乌斯带

    克莱因瓶莫比乌斯带_克莱因瓶剪莫比乌斯带  [克莱茵瓶&莫比乌斯带]在1882年,著名数学家菲立克斯·克莱因(FelixKlein)发现了后来以他的名字命名的著名“瓶子”。这是一个象球面那样封闭的(也就是说没有边)曲面,但是它却只有一个面。在图片上我们看到,克莱因瓶的确就象是一个瓶子。但是它没有瓶底,它的瓶颈被拉长,然后似乎是穿过了瓶壁,最后瓶颈和瓶底圈连在了一起。如果瓶颈不穿过瓶壁而…

    2025年11月6日
    4
  • 初识VSTO

    初识VSTO初识 VSTO 是在今年寒假 那时团队接到一个项目 是做一个 Office 的插件 刚接到这个项目 由于经验不足 我们根本无从下手 只能在网上闲逛 希望能遇到些有价值的东西 渐渐的 我们接触到了宏 实际上 在我们这个项目里 宏可能能够实现我们的目标 但却不太便于推广 于是 我们继续闲逛中 直到一周后的某天 我们才开始接触的 VSTO 这个名词 根据网上的资料 我们很快的熟知了 VSTO 项目

    2025年11月23日
    5
  • 自定义bt服务器,[教程]Aria2自动更新BT Tracker服务器列表的方法[通俗易懂]

    自定义bt服务器,[教程]Aria2自动更新BT Tracker服务器列表的方法[通俗易懂]说明公开的BTtracker服务器,因为种种原因总会经常失效,要想获取更多的peer需要经常维护这份列表。感谢github上的小伙伴提供了这么一份tracker自动更新列表:trackerslist。我们要想Aria2也支持自动更新这份列表,那么你可以按照下面方法来实现。方法此文仅适用于Centos系统,其它系统稍作变更即可。我没有使用过其它系统,这里也就不提供兼容性的脚本了。示例:Aria2安…

    2022年9月30日
    3

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号