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

边栏推荐
- Wireshark经典实践和面试13点总结
- NTU General Database-Gbase-8a-Learning-04-Deploying Distributed Clusters
- Creo5.0入门教程赠素材
- Redis-基本介绍/linux下环境配置/配置文件
- 直播平台怎么搭建,原生js实现编辑器撤消/恢复功能
- WPF DataGrid using data templates
- ES6 从入门到精通 # 14:迭代器 Iterator 的用法
- Golden Warehouse Database KingbaseGIS User Manual (6.5. Geometry Object Editing Function)
- 【SSL集训DAY3】控制棋盘【二分图匹配】
- LeetCode常见题型——链表
猜你喜欢
随机推荐
使用C语言实现静态链表
【云原生】Kubernetes编排工具精讲
【猜凶手,猜名次,杨辉三角】经典小学奥数的代码逻辑是什么?
如何抑制告警风暴?
【obs】obsqsv11 硬编 及与metartc codec对比
经济衰退即将来临前CIO控制成本的七种方法
基于ABP的AppUser对象扩展
【集训DAY5】堆箱子【数学】
ES6 从入门到精通 # 15:生成器 Generator 的用法
LSTM-based distributed energy generation prediction (Matlab code implementation)
数据库的备份与恢复「建议收藏」
二进制、八进制、十进制、十六进制之间的转换
Eureka protects itself
巴比特 | 元宇宙每日必读:国内首个数字人产业专项支持政策发布,2025年北京数字人产业规模将破500亿元...
数字钱包红海角逐,小程序生态快速引入可助力占领智慧设备入口
[C language] In-depth understanding of pointers and arrays (issue 4)
2022中高级Android面试题汇总来助你通过面试
Redis-基本介绍/linux下环境配置/配置文件
LeetCode常见题型——链表
labelme标注的json标签转txt格式









