TensorFlow被曝存在严重bug,与Keras一起使用可能会失重,目前尚未修复。最近,NLP工程师Gupta发现了TensorFlow的一个严重bug:每一个在自定义层使用Keras函数式API的用户都要注意了!使用通过Keras的函数式API创建的权重可能会丢失。这个话题在Reddit的机器学习版块上引起了热议,引起了很多TensorFlow用户的共鸣。具体来说,在API中使用自定义层会导致trainable_variables中的权重无法更新。而且这些权重也没有放入non_trainable_variables中。也就是说,原本需要训练的权重现在被冻结了。让这位工程师不满意的是,大约一个月前他在GitHub上向谷歌报告了这个bug,但谷歌至今还没有正式修复。解决方案如何查看自己的代码是否会出现类似问题?请调用model.trainable_variables来检测你自己的模型:fori,varinenumerate(model.trainable_variables):print(model.trainable_variables[i].name)查看你所有的变量权重是否正确,如果权重丢失或没有改变,说明你也中招了。Gupta还复现了在Colabnotebook中使用Transformer库创建模型的bug。有兴趣的读者可以去看看。https://colab.research.google.com/gist/Santosh-Gupta/40c54e5b76e3f522fa78da6a248b6826/missingtrainablevarsinference_var.ipynbGupta给出的这个问题的一种解决方案是使用Keras子类来创建模型。使用此方法后,所有权重将出现在trainable_variables中。为了绝对确保使用函数式API和子类方法创建的模型是相同的,Gupta在每个Colab笔记本的底部使用相同的输入推断它们,并且模型的输出是相同的。但是,使用函数式API模型进行训练会将许多权重视为已冻结,并且这些权重也不会出现在non_trainable_variables中,因此无法解冻它们。为了检查谷歌最近是否修复了该漏洞,Gupta还安装了TF2.3.0-rc1的Nightly版本以保持框架最新,但该漏洞至今仍然存在。网友:用PyTorch吧。刚才Keras的创始人在推特上回复说这不是Keras的bug,建议程序员使用单元测试。对于Gupta提到的bug,有网友表示,他在TensorFlow和Keras之间传递权重时,出现了类似的错误,转而使用PyTorch。此外,也有不少网友反映,谷歌的框架并不完善,管理方式一塌糊涂。它要求用户帮助他们测试TensorFlow错误。与PyTorch相比,文档很容易理解。近日,官方发布了一本免费电子书。用PyTorch不好吗?你现在用的是哪个深度学习框架,有遇到过类似的严重bug吗?
