TensorFlow被曝存在嚴重bug,搭配Keras可能丟失權重

五嘎子 4年前發布 | 771 次閱讀 TensorFlow

  最近,一位從事 NLP 工程師 Gupta 發現了 TensorFlow 存在的一個嚴重 bug:

  每個在自定義層中使用 Keras 函數式 API 的用戶都要注意了!使用用 Keras 的 Functional API 創建的權重,可能會丟失。

  這一話題在 Reddit 機器學習板塊上被熱議,引起不少 TensorFlow 用戶共鳴。

  具體來說,就是在 API 中使用自定義層,會導致 trainable_variables 中的權重無法更新。而且這些權重也不會放入 non_trainable_variables 中。

  也就是說,原本需要訓練的權重現在被凍結了。

  讓這位工程師感到不滿的是,他大約一個月前在 GitHub 中把這個 bug 報告給谷歌,結果谷歌官方到現在還沒有修復

  解決辦法

  如何檢驗自己的代碼是否會出現類似問題呢?請調用 model.trainable_variables 來檢測自己的模型:

  看看你所有的可變權重是否正確,如果權重缺失或者未發生變化,說明你也中招了。

  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 創始人在 推ter 上回復,這不是 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/

 本文由用戶 五嘎子 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!
  轉載自:https://mp.weixin.qq.com/s/nGMqldd6sKLJFW2dBUB_qQ