tensorflow 2.0的版本兼容api(兼容1.x)

0. 引言

平时经常在github上使用一些别人的代码,基本上就是直接扒拉过来就开始跑了。不过,经常遇见那种版本不兼容的问题,提示就是没有某个模块,或者没有某个API。本质上是因为tensorflow在发展过程中,很多api已经被取消了。其实在日常的编码过程中,也会遇到这种提示,某个模块或者某个函数将在未来中被取消,请更换某个api的提示。

1. 问题描述

本次实验是基于开源的char-rnn来进行,一开始选择了star比较高的版本[1],但是这个版本太老了,连contrib.rnn都不能满足,其要求tensorflow 1.0。所以,更换了另外一个版本[2],这个版本要求tensorflow >=1.2,但即使是这样,依然不能完全兼容。报错如下:

Traceback (most recent call last):
  File "train.py", line 7, in <module>
    FLAGS = tf.flags.FLAGS
AttributeError: module 'tensorflow' has no attribute 'flags'

通过在官网[3]的解释中,可以通过tf.compat.v1.flags.Flag来使用,但是虽然这里不报错了,其他的地方还是会报错,例如tf.reset_default_graph()等。

2. 解决方案

在搜索这个问题之后,发现有很多人有这种问题。在[4]中,提供了解决方案;

import tensorflow.compat.v1 as tf
tf.disable_v2_behavior() 

但是这种方案依然有人说并不好使,不过在我的测试版本,tensorflow==2.3.1,python 3.6.9上是可以执行的。其他的一些报错也都消失了,能够成功运行。

3.问题思考

其实本质上,这是一个开源库在发展过程中,一些老旧的api逐渐替代,甚至被取消。但是在平时的研究中,经常参考别人的代码,这些代码很多都已经不再维护,直接运行会有很多错误。针对这种情况,如果是完全重新写,怕是工作量太大了。上面提供的解决方案算是一种,但是没有测试更多的代码,在[2]上是能够成功运行的
**另外一种方式是使用低版本的tensorflow,也就是将tensorflow进行降级,**但是这样的话,每次都进行重装,最后环境就越来越乱了。不过,可以使用docker的形式,例如在dockerhub上搜索tensorflow1.3[5],可以看到之前版本。
在这里插入图片描述
注意拉取镜像的时候,一定要选择GPU的版本,不然使用CPU可能会很慢。
关于如果docker安装深度学习环境,可以参考本博客的另外一篇文章《Centos8安装英伟达显卡驱动并通过docker部署深度学习环境》。

参考

[1]sherjilozair/char-rnn-tensorflow
[2]hzy46/Char-RNN-TensorFlow
[3]tf.compat.v1.flags.Flag
[4]AttributeError: module ‘tensorflow’ has no attribute ‘placeholder’ #14
[5]tensorflow/tensorflow

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
### 回答1: 很抱歉,TensorFlow 2.0 中已经删除了 `tensorflow.contrib` 模块,因此不能直接导入 `tensorflow.contrib.learn`。不过,您可以使用 `TensorFlow 2.0` 中内置的 `tf.keras` 模块,或者使用 `TensorFlow Hub` 中的预训练模型。 ### 回答2: 要导入tensorflow.contrib.learn,您需要使用tensorflow 2.0兼容模块tf.compat.v1。在TensorFlow 2.0中,tf.contrib模块已被移除。然而,通过tf.compat.v1模块,您仍然可以使用一些tensorflow.contrib模块中的功能。 您可以按照以下步骤来导入tensorflow.contrib.learn: 1. 导入所需的模块: ```python import tensorflow.compat.v1 as tf from tensorflow.compat.v1 import contrib ``` 2. 启用兼容性模式: ```python tf.disable_v2_behavior() ``` 3. 现在您可以使用tf.contrib.learn及其功能: ```python contrib.learn.Estimator(...) ``` 注意:虽然这种方法使您能够导入tensorflow.contrib.learn,但由于tf.compat.v1模块是为了向后兼容而设计的,因此它可能在将来的版本中被删除。因此,最好尽量使用tensorflow 2.0的原生API。如果您使用tensorflow.contrib.learn的功能非常重要,您可以考虑使用旧版本tensorflow(如tensorflow 1.15)来支持它。 ### 回答3: 在TensorFlow 2.0中,已经不再支持`tensorflow.contrib.learn`这个模块。`tensorflow.contrib`是一个容纳实验性、不太稳定或较少使用的功能和功能组件的命名空间,而且在TensorFlow 1.X版本中是存在的。在TensorFlow 2.0中,TensorFlow团队已经将这些组件整合到了其他模块中,或者将它们作为独立的项目进行维护。因此,如果你想在TensorFlow 2.0中使用`tensorflow.contrib.learn`,你将无法直接导入它。 如果你仍然想使用类似于`tensorflow.contrib.learn`的某些功能,可以考虑以下方法: 1. 使用TensorFlow 2.0官方文档中提供的迁移指南,查找替代`tensorflow.contrib.learn`的功能或模块。官方文档通常会提供有关如何将旧版本的代码迁移到TensorFlow 2.0的详细说明。 2. 如果你只是需要用到一些机器学习算法,你可以考虑使用`scikit-learn`这个Python库。它是一个专门用于机器学习的库,提供了丰富的算法和工具,可以与TensorFlow 2.0进行结合使用。 总之,在TensorFlow 2.0中,将不再直接支持导入`tensorflow.contrib.learn`。如果你有特定的需求,需要找到替代的方法来实现你的目标。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值