郭一璞 發自 凹非寺
量子位 報道 | 公衆号 QbitAI
![](https://img.laitimes.com/img/__Qf2AjLwojIjJCLyojI0JCLiAjM2EzLcd3LcJzLcJzdllmVldWYtl2PnVGcq5SY0RDeodmb1YXZvwFM2UDO1ITMtUGall3LcVmdhNXLwRHdo9CXt92YucWbpRWdvx2Yx5yazF2Lc9CX6MHc0RHaiojIsJye.jpeg)
前不久,Keras的爸爸François Chollet在GitHub上發起了一個提議:
咱們把tf.train和tf.keras.optimizers合并了吧。
具體詳情如下:
Keras有自己的一系列優化器在tf.keras.optimizers裡,TensorFlow也有自己的一系列優化器在tf.train裡。
我們準備把它們合并成一組優化器,主要基于現有的TensorFlow優化器,然後增加一些特性。
之後,新的優化器會把Keras優化器取代,最後會改掉一些簽名。
這個RFC描述了所有計劃的API變更。
也就是說,是把tf.train合并到tf.keras.optimizers裡,以後就隻有tf.keras.optimizers了。
公說公有理,婆說我有理
提議出現之後,大家就開始在GitHub和Reddit上衆說紛纭。
開始的讨論還很正經。
Facebook AI實驗室的Yuxin Wu(@ppwwyyxx)說,他反對因為定義剪輯有多模糊就将其添加為通用API,并且因為沒有關于如何進行剪裁的标準約定。另外需要解釋一下是否依然支援使用張量作為學習率的舊方法。
馬裡蘭大學巴爾的摩分校博士Erfan Noury(@erfannoury)提出疑問,像tf.contrib.layers.optimize_loss這種會不會成為TF 2.0的一部分?這個函數看起來能夠以最易用的方式處理可以在漸變上執行的大多數操作。
可是之後,這個文章的畫風就變了:大家一起吐槽愛刷存在感的Keras。
斯坦福碩士Olivier Moindrot(@omoindrot)開始認真的吐槽Keras:
為什麼最後合并的結果是要放在帶Keras的tf.keras.optimizers名下?為什麼不用更短、更通用的tf.optimizers,或者保留tf.train的名字呢?
我在tf.keras.layers和tf.layers上看到過類似的争議,作為一個TensorFlow使用者,實在不喜歡讓我的代碼裡出現不必要的keras字眼。
這個吐槽後來成為了全場最高贊,大家紛紛開始讨論為什麼Keras喜歡在滿世界“刷存在感”。
即将畢業的圖賓根大學博士Patrick Wieschollek也來吐槽了一下Keras:
為什麼到處都要加keras字首,簡直讓我發瘋,這絕對不是一個好的RFC提案。名字帶上keras就像一個病毒,到處傳播,搞的所有名字都帶keras。求求你們用正常一點的名字好不好!不然估計以後就要寫”tf.keras.variable”和”tf.keras.placeholder”了。
omoindrot還去Reddit上發了這個話題,引來了一大波和他一樣讨厭帶keras的名字的人,Reddit使用者@nicoulaj說:
恕我直言,keras這個字眼不應該出現在TensorFlow中的任何地方。對于Keras使用者來說,如果Keras做的更好一些,完全可以移植到自己命名空間下的TensorFlow裡。
作為一個軟體開發背景的工程師,我一年前才開始搞機器學習,TensorFlow經常玩不轉,實在不喜歡TensorFlow以下幾個毛病:
做同一件事有太多的途徑;
幾個“架構中的架構”,重疊得不明就裡;
太多隐藏的“魔法”;
不必要的複雜;
API變化太複雜了。
我更喜歡在一個簡單的架構上寫東西,而不是反向攻克一個迷宮系統,我用PyTorch。
這段言論成功吸引了很多PyTorch真香黨,其他的TensorFlow使用者也在吐槽:
要不把TensorFlow改名叫KerasFlow好咯?
真是令親着痛,仇者快。
對于Keras刷存在感這件事,Google Brain的Martin Wicke代表官方給出了回應:
在TensorFlow2.0的工作上,我在消除API的重複這件事上一直在犯錯,這在過去是一個大問題,“有五種方法可以完成XX事情”對TensorFlow來說是一個切中要害的批評。
即使子產品開始時彼此完全等同,也是如此。在TensorFlow2.0的API中,隻要有可能,我們就給每個功能隻提供一種方法,比如隻有一種方法來實作metrics。我們确實想做一個完整的Keras,比如tf.keras應該包含所有Keras,這樣就很自然。
我們可以給子產品添加别名,比如把loss=keras.losses這類語句加到主TensorFlow子產品裡,不過我覺得,多打幾個字帶來的好處要遠高于打那幾個字的費的功夫了吧?
官方認可
顯然,現在大部分人都不太同意這個改動,尤其是改動之後又帶上了keras的名字。
點贊的隻有2個人,點踩的又26人,哭臉也有6個人。
但是今天早上,TensorFlow官方還是認可了這個提議,這項關于合并tf.train和tf.keras.optimizers的RFC現已加入TensorFlow社群RFCs豪華套餐。
François Chollet總結說,這個提議并沒有用Keras優化器取代TensorFlow優化器,隻是一個非常保守的變化,讓整體優化器的API明顯改進,更簡單、統一,功能更完善,對使用者更友好。
當然,即使官方認可,根據《TensorFlow社群RFC守則 - Keeping the bar high保持高标準》第三條:
An approved RFC is no guarantee of a commitment to implement, and acceptance of a proposed RFC implementation is still subject to the usual code review process.
一個被準許的RFC也不保證一定會實行,一個被接受的RFC的實施也要考慮到通常的代碼審查過程。
意思是說,官方很贊同這項提議,但是具體做不做,還是要考慮代碼的實際情況。
傳送門
RFC: Optimizer unification in TensorFlow 2.0
https://github.com/tensorflow/community/pull/24#event-1978601658
Reddit: Debate on TensorFlow 2.0 API
https://www.reddit.com/r/MachineLearning/comments/9ysmtn/d_debate_on_tensorflow_20_api/
— 完 —