暫時覺得tensorflow不會被重新開發設計,因為Pytorch和Tensorflow的設計思想,規模,出發點是不一樣的。

Pytorch更像是一個庫,讓用戶在深度學習框架里用「numpy」來組合運算元,調包。用戶使用的時候不受約束,十分靈活自然,符合Python的編程直覺,這點優勢也來源於動態圖的設計概念。

TensorFlow更像是一個龐大的系統,企圖用自己的東西完成數據處理,訓練,部署等一系列流程。就像是教導用戶,你print得用我的tf.print,你數據集處理得用我的TFRecord,tf.Dataset,列印形狀得用tf.shape。一方面是由於tf1靜態圖設計,為了一定性能不得不捨棄易用性。另一方面是系統做大以後,各個子部分不是那麼容易兼容起來使用。然後又設計出來keras,tf.Estimator等東西,用戶很難去接受,消化大量的新概念。

Pytorch吸引人的是一套動態圖Define-By-run的機制;合理,易理解的Tensor對象;靈活的autograd機制。雖然它的數據處理,分散式能力也有一定缺陷。比如數據處理慢,GPU利用率上不去,分散式API難跑通。但是學術界,小白就喜歡這種,因為他們關心的是快速實現自己的想法,而並不關心整套流程的處理效率

谷歌現在也不再那麼堅持靜態圖的概念,Tensorflow2出現已經增加了Define-By-run機制,甚至還引入了AutoGraph。只是我覺得tf2推出的有點過於激進,沒有和tf1很好的兼容,導致出現一些奇奇怪怪的Bug,本來用戶很期待新的機制,卻因為bug出現又降低了好感。

我還是認為各個框架都有自己的特性,如果全都靠齊Pytorch,那我為什麼不直接使用Pytorch呢?Pytorch有易用的優勢,Tensorflow有自己打通流程,部署的優勢。兩家各有自己的壓力,並沒有誰的設計就是絕對的好。


都已經從1到2的Define-by-Run了,還要什麼自行車。


沒必要重新設計tensorflow,如果做不兼容更新,不如另起爐灶開發一個全新的框架

google/jax: Composable transformations of Python+NumPy programs: differentiate, vectorize, JIT to GPU/TPU, and more (github.com)?

github.com

google/trax: Trax — Deep Learning with Clear Code and Speed (github.com)?

github.com

google/flax: Flax is a neural network ecosystem for JAX that is designed for flexibility. (github.com)?

github.com


已經重新開發成了tf2了。

然後呢?復現少,產品少,谷歌自家efficientnet和det我印象里都不是tf2來做的。一個1.15一個忘了版本,同樣的,作為谷歌老相好英偉達出品的stylegan 2 也不是:TensorFlow 1.14 or 1.15 with GPU support. The code does not support TensorFlow 2.0.

新品來不及轉沒事,能理解,但是舊的一些極具學習價值的模型呢?全靠tf2的愛好者、有興趣的人用愛發電,民間轉成tf2?

谷歌目前的做法明著來:只要你還想繼續用keras 2.3之後的版本那就必須轉tf.keras才行。


tf2不是已經支持動態圖了嘛,這難道還不算重新設計。

話說pytorch雖然學界用的多(因為改結構方便),但是tf的靜態圖在大規模工業部署上還是有計算優勢的。


Tf1.0版本的特點是,先搭建計算圖,搭建好了之後用佔位符傳數據進去。對於debug不是很友好。Pytorch在這一塊是做足了文章,很好的改善了這個缺陷。後來鑒於這個思路,tf2.0出來了。但是令人尷尬的是,學術界現在用pytorch開源的比較多,也有繼續用tf1.0開源的。除了習慣用tf1.0的人會研究tf2.0,其他用Pytorch的用習慣了,不願意轉了。誰吃飽了撐的天天換框架?我是經歷過tf1.0,pytorch,keras。只不過keras後端可以接入tf,pytorch等。


import torch as tf


不會了, tf還會是tf, 並不妨礙著手造新的煉丹爐, eg: jax,flax


不是已經重新設計了嗎,還逼著1的用戶趕緊遷移到2。


推薦閱讀:
相关文章