当前位置:网站首页>Tensor flow 踩坑记
Tensor flow 踩坑记
2022-08-09 23:32:00 【张春成】
Tensor flow 踩坑记
Tensor flow 删除了 contrib 模块,这是万恶之源。
万恶之源
Tensorflow 是著名的深度学习计算软件,先不说它与 CUDA 和 GPU 驱动之间超强的、说不清道不明的依赖关系,单说它在诞生不久就进行的重大改版
它改了什么呢?
改了很多 API,也就说同一件事情、或者同一个计算逻辑,使用的语句是不一样的; 删除了 contrib 模块,将该模块的功能转移到了其他模块中,这个就很欠打。
API的改动
总的来说,API的改动是使软件更加适于使用而自然发生的。
# TF1.x
outputs = session.run(f(placeholder), feed_dict={placeholder: input})
# TF2
outputs = f(input)
虽然我更喜欢1版本的语句,因为它的含义更加明确。这句话的意思是,f代表某个网络的前向计算,网络本身是结构和参数的集合,它本身不能计算,是程序创建的session通过它完成了计算工作。但是为了语句更加简洁,改到2版本也无可厚非。
然而,这种改动吧,不是说不让你改。而是说这种改动没有什么必要,更加没必要的是这些改动会“摒弃”掉之前的写法。
也就是说,如果你用 TF1 撰写了程序,迁移到 TF2 时就需要对这些东西进行无意义的改写。这种改动有点像 Python 2 到 Python 3 中 print 语句的改动
# Python 2
print 'abc'
# Python 3
print('abc')
有意义吗?不能说没有;有必要吗?不好说。
不过,好在有 2to3 这样的专门处理升级程序的小工具,虽然可能导致一堆新的 BUG ,但聊胜于无。
后来TF 官方还专门推出了如下这样欲盖弥彰的方法,来“兼容”之前版本的程序。
# Compat TF v1
import tensorflow.compat.v1 as tf # pylint: disable=import-error
tf.disable_v2_behavior()
Contrib的删除
如果说API的改版还有办法自动化兼容的话。contrib的删除就让人啼笑皆非。
先说说contrib是个啥,它其实相当于是 TF 官方提供的插件接口。成千上万的程序开发者能够通过这个接口,给TF添加各种各样的个性化功能。或者这样说,这个接口就是随软件附带的TF社区。
久而久之,这个接口开始大放异彩,上面的功能极大的推动了TF的发展,甚至开始覆盖TF本身的,使用起来不那么方便的特性。
然而,在TF改版的过程中,它被砍掉了。这就很恶心人。因为在新版本的TF中,所有
tensorflow.contrib
的功能都没有了,这个模块也没有了。之前contrib社区有多繁荣,改版之后的TF就有多难用。而想要用新版的TF运行之前版本的程序时,软件版本迁移需要做的工作就有多繁琐。
虽然,TF官方承诺将contrib中的功能都迁移到软件的其他模块中,但是这样做只是减轻了这些模块的开发成本,并没有丝毫减轻迁移时面临的困难。
雪上加霜的是,官方的迁移说明是动态的线上内容,出于某个众所周知的原因,这个文档不怎么容易刷出来。所以本文将对 TF 使用过程中,涉及版本转换的内容进行长期的、简要的记录。既有助于自己,也希望能帮到大家。
有一说一
arg_scope

TF2.0中从tensorflow.contrib.framework.python.ops导入arg_scope的等价物? - 问答 - 腾讯云开发者社区-腾讯云 (tencent.com)
load_variable

边栏推荐
- 【剑指offer】第一题 第二题
- 2022中高级Android面试题汇总来助你通过面试
- NotWritableError: The current user does not have write permissions when conda creates a new environment
- CST Studio Suite 2021 software installation package and installation tutorial
- Golden Warehouse Database KingbaseGIS User Manual (6.4. Geometry Object Access Function)
- ES6 Beginner to Mastery #13: Extension Methods for Arrays 2
- JVM内存和垃圾回收-10.直接内存
- IT传奇人物菲尔德的转型经验教训及给CIO的建议
- hql语言
- 聚焦热点 | ISC 2022软件供应链安全治理与运营论坛圆满落幕
猜你喜欢

ES6 从入门到精通 # 12:数组的扩展方法一

信息系统项目管理师核心考点(六十四)信息安全基础知识重要概念

从TRPO到PPO(理论分析与数学证明)

Eureka自我保护

【「收藏」Oracle 数据库安装】

阿雷的血压有些低

AUTOCAD——形位公差如何标注、CAD打断于点的操作

Service Discovery @EnableDiscoveryClient
![[SUCTF 2019]CheckIn (.htaccess和.user.ini)](/img/43/9e5a501410d2b957969b713d4fe209.png)
[SUCTF 2019]CheckIn (.htaccess和.user.ini)
![MATLB|And her ups and downs and finally reached the peak of life [Romantic Journey]](/img/10/55cc34a929768d89d9ffde8a5b3419.png)
MATLB|And her ups and downs and finally reached the peak of life [Romantic Journey]
随机推荐
首席信息官如何将可持续性和技术结合起来
redis distributed lock code example
Dry goods!Towards robust test-time adaptation
ES6 从入门到精通 # 12:数组的扩展方法一
共创 Ray 中文社区,Ray Forward Meetup 2022 直播邀你参加!
Eureka protects itself
KingbaseGIS Jin Cang database using manual (6.3. Geometric object creation function)
NTP SERVICE TASK 在GWserver配置、启用NTP服务,为当前环境提供时钟同步服务,Client主机可以从该服务器同步时间。
RebatMq消息中间件(一) 各个中间件介绍
【剑指offer】第一题 第二题
Creo5.0入门教程赠素材
【集训DAY3】挖金矿【二分答案】
Description of AirFlow
【「收藏」Oracle 数据库安装】
第十五章 mysql存储过程与存储函数课后练习
服务发现@EnableDiscoveryClient
【集训DAY5】选数字【数学】
十位时间戳转化成时间
framework源码读后感
LSTM-based distributed energy generation prediction (Matlab code implementation)