当前位置:网站首页>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

边栏推荐
- selenium和驱动安装
- 解锁时间生成与比较
- 十位时间戳转化成时间
- NotWritableError: The current user does not have write permissions when conda creates a new environment
- 【SSL集训DAY2】Sort【树状数组】
- KingbaseGIS Jin Cang database using manual (6.3. Geometric object creation function)
- EL表达式
- 《MySQL入门很轻松》第4章:数据表中存放的数据类型
- 数字钱包红海角逐,小程序生态快速引入可助力占领智慧设备入口
- mysql无法远程连接 Can‘t connect to MySQL server on ‘xxx.xxx.xxx.xxx‘ (10060 “Unknown error“)
猜你喜欢
Leecode-205. 同构字符串
阿里云短信服务开通
漫谈缺陷管理的自动化实践方案
【集训DAY5】快速排序【模拟】【数学】
mysql无法远程连接 Can‘t connect to MySQL server on ‘xxx.xxx.xxx.xxx‘ (10060 “Unknown error“)
【集训DAY3】挖金矿【二分答案】
CST Studio Suite 2021软件安装包和安装教程
ES6 从入门到精通 # 15:生成器 Generator 的用法
dlopen failed: library "libtaml.so" not found
YOLOV5 study notes (7) - training your own data set
随机推荐
In-depth understanding of multithreading (Part 1)
ES6 从入门到精通 # 15:生成器 Generator 的用法
【obs】obsqsv11 硬编 及与metartc codec对比
网络协议05 -网络层
聚焦热点 | ISC 2022软件供应链安全治理与运营论坛圆满落幕
[Cloud native] Kubernetes orchestration tools
KingbaseGIS Jin Cang database using manual (6.3. Geometric object creation function)
《MySQL入门很轻松》第4章:数据表中存放的数据类型
NTU General Database-Gbase-8a-Learning-04-Deploying Distributed Clusters
巴比特 | 元宇宙每日必读:国内首个数字人产业专项支持政策发布,2025年北京数字人产业规模将破500亿元...
【集训DAY3】中位数
Wireshark经典实践和面试13点总结
vmware Exsi 网卡配置
Creo5.0 introductory tutorial free material
YOLOV5学习笔记(七)——训练自己数据集
ECCV 2022 | 微软开源TinyViT :搞定小模型的预训练能力
【剑指offer】第一题 第二题
C语言学习之旅 【操作符(残缺版)】
【集训DAY4】询问【Hash】
NotWritableError: The current user does not have write permissions when conda creates a new environment