专栏首页量子位TensorFlow被曝存在严重bug,搭配Keras可能丢失权重,用户反映一个月仍未修复

TensorFlow被曝存在严重bug,搭配Keras可能丢失权重,用户反映一个月仍未修复

晓查 发自 凹非寺 量子位 报道 | 公众号 QbitAI

最近,一位从事NLP工程师Gupta发现了TensorFlow存在的一个严重bug:

每个在自定义层中使用Keras函数式API的用户都要注意了!使用用Keras的Functional API创建的权重,可能会丢失。

这一话题在Reddit机器学习板块上被热议,引起不少TensorFlow用户共鸣。

具体来说,就是在API中使用自定义层,会导致trainable_variables中的权重无法更新。而且这些权重也不会放入non_trainable_variables中。

也就是说,原本需要训练的权重现在被冻结了。

让这位工程师感到不满的是,他大约一个月前在GitHub中把这个bug报告给谷歌,结果谷歌官方到现在还没有修复

解决办法

如何检验自己的代码是否会出现类似问题呢?请调用model.trainable_variables来检测自己的模型:

for i, var in enumerate(model.trainable_variables):
    print(model.trainable_variables[i].name)

看看你所有的可变权重是否正确,如果权重缺失或者未发生变化,说明你也中招了。

Gupta还自己用Transformer库创建模型的bug在Colab笔记本中复现了,有兴趣的读者可以前去观看。

https://colab.research.google.com/gist/Santosh-Gupta/40c54e5b76e3f522fa78da6a248b6826/missingtrainablevarsinference_var.ipynb

对此问题,Gupta给出的一种解决方法是:改为使用Keras子类创建模型。改用此方法后,所有的权重都将出现在trainable_variables中。

为了绝对确保用函数式API和子类方法创建的模型完全相同,Gupta在每个Colab笔记本底部使用相同的输入对它们进行了推理,模型的输出完全相同。

但是,使用函数式API模型进行训练会将许多权重视为冻结,而且这些权重也没有出现在non_trainable_variables中,因此无法为这些权重解冻。

为了检查谷歌最近是否修复了该漏洞,Gupta还安装了Nightly版的TF 2.3.0-rc1,保持框架处于最新状态,但如今bug依然存在。

网友:还是用PyTorch吧

刚刚,Keras创始人在Twitter上回复,这不是Keras的bug,并建议程序员使用单元测试。

对于Gupta所说的bug,有网友说,他在TensorFlow和Keras之间传递权重的时候,出现了类似的错误,从此转而使用PyTorch。

另外还有不少网友也反映,谷歌的框架不太完善,管理方式一团糟,是在让用户帮他们测试TensorFlow的bug。

反观PyTorch,说明文档通俗易懂,最近官方还出了免费电子书,难道用PyTorch不香吗?

你现在在使用哪种深度学习框架,你也遇到过类似的严重bug吗?

原帖链接: https://www.reddit.com/r/MachineLearning/comments/hrawam/d_theres_a_flawbug_in_tensorflow_thats_preventing/

本文分享自微信公众号 - 量子位(QbitAI),作者:关注前沿科技

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2020-07-15

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 不要小看日本的AI公司

    有家日本AI创业公司,把这个当成奋斗目标挂在嘴边。而且还放言说,如果他们全速前进,肯定能干成世界第一。

    量子位
  • 微软Excel竟能实现CV算法:亚马逊工程师妙用,人脸检测、字符识别都不在话下

    这项好玩的技巧,是由亚马逊首席工程师 Alok Govil 和 Venkataraman Subramanian共同完成。

    量子位
  • 让解一元二次方程更容易,美国奥数国家队教练建议用新方法,还能帮助简化代码

    相信很多人在初中学习它的时候都很痛苦,因为这个公式实在有点难记。即使你到今天能够记得,还能回忆起当初的推导过程吗?

    量子位
  • 挖洞经验 | 看我如何综合利用4个漏洞实现GitHub Enterprise 远程代码执行

    大家好,距离上次漏洞披露已有半年之余,在这篇文章中,我将向大家展示如何通过4个漏洞完美实现GitHub Enterprise的RCE执行,该RCE实现方法与服务...

    FB客服
  • 王甲坤:如何设计和实现高可用的MySQL

    下面开始我们今天的主要内容,今天主要是通过什么、为什么、怎么做,这条思路跟大家呈现MySQL的高可用。

    云加社区技术沙龙
  • 做底层 AI 框架和做上层 AI 应用,哪个对自己的学术水平(或综合能力)促进更大?

    新智元获得了解浚源和微调两位用户的授权,将他们对此问题的深度解析做了整理,与读者共享。

    新智元
  • Akka 使用系列之四: Future

    这篇文章介绍 Akka 的同步机制,以及 Spark 和 Akka 的恩怨情仇。 ? 1 Akka 中的 Future Akka 中的...

    AlgorithmDog
  • MGR 的主要优点

    MGR(Mysql Group Replication)是5.7版本新加的特性,是一个MySQL插件。

    MySQL轻松学
  • 内存中的栈(stack)、堆(heap)和静态区(static area)的用法

    通常我们定义一个基本数据类型的变量,一个对象的引用,还有就是函数调用的现场保存都使用内存中的栈空间;而通过new关键字和构造器创建的对象放在堆空间;程序中的字面...

    唐怀瑟
  • 如何设计和实现高可用的MySQL

    作者:王甲坤,腾讯高级工程师、腾讯云关系型数据库MySQL负责人,拥有多年客户端、数据库研发经验。在IOS客户端、MySQL、PostgreSQL、SQL Se...

    腾讯云数据库 TencentDB

扫码关注云+社区

领取腾讯云代金券