tensorflow中contrib模块问题。(tf.contrib)

问题提出:

v1版本中tensorflow中contrib模块十分丰富,但是发展不可控,因此在v2版本中将这个模块集成到其他模块中去了。在学习tensorflow经常碰到tf.contrib的代码,一敲就报错。

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

weight=tf.constant([[1.0,2.0],[-3.0,-4.0]])
regularizer_l2=tf.contrib.layers.l2_regularizer(.5)
regularizer_l1=tf.contrib.layers.l1_regularizer(.5)  
with tf.Session() as sess:
    print(sess.run(regularizer_l2(weight)))
    print(sess.run(regularizer_l1(weight)))

会报错:
在这里插入图片描述

解决方案1:

自己写函数,这需要对原理的理解(比如上面L2正则化),如果本身有实力可以自己写。但对于小白显然不可取。

解决方案2:

卸载v2版本TensorFlow,重新下载v1版本TensorFlow,同时适配各类软件及软件包,较为麻烦。由于v2都能配置好,卸掉重新配置v1版本也不是什么问题。因此在这里不予讨论。

解决方案3:

首先查看官方文档说明:

https://tensorflow.google.cn/versions/r1.15/api_docs/python/tf/contrib?hl=en
https://tensorflow.google.cn/guide/migrate#a_note_on_slim_contriblayers

发现contrib的内容可以集成到下面三个包中。
tf.keras.layers.Layer
tf.keras.Model
tf.Module
因此,尝试以后,发现L2正则化存在于tf.keras里面。

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

weight=tf.constant([[1.0,2.0],[-3.0,-4.0]])
regularizer_l2=tf.keras.regularizers.l2(.5)
regularizer_l1=tf.keras.regularizers.l1(.5)
with tf.Session() as sess:
    print(sess.run(regularizer_l2(weight)))
    print(sess.run(regularizer_l1(weight)))

运行结果:
在这里插入图片描述
是contrib结果的2倍,可以通过除以2解决。

  • 30
    点赞
  • 105
    收藏
    觉得还不错? 一键收藏
  • 16
    评论
### 回答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.0tf.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.0TensorFlow团队已经将这些组件整合到了其他模块,或者将它们作为独立的项目进行维护。因此,如果你想在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`。如果你有特定的需求,需要找到替代的方法来实现你的目标。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值