對於許多開發者來說,TensorFlow是他們接觸的第一個機器學習框架。TensorFlow框架儘管意義非凡,引起極大關注和神經網絡學習風潮,但對一般開發者用戶太不友好。
軟體開發者畢竟不是科學家,很多時候簡單易學易用是程式設計師選擇的第一要素。目前,兩個主要的深度學習庫Keras和Pytorch獲得了大量關注,主要是因為它們的使用比較簡單。
一、發展演變歷程
keraskeras出身就像是一個天生麗質的姑娘,是多個計算後臺框架的」前端」。
keras是神經網絡的一個模型計算框架,嚴格來說不是神經網絡框架。本身沒有重量級計算,它使用其他AI框架作為計算後臺,傻瓜式的使用。它的計算後臺還支持 Theano、CNTK(微軟的一個AI計算後臺)等,也就是說keras是多個計算後臺的門面。官方設計哲學為Simple. Flexible. Powerful,是深度學習入門的絕佳技術路線
舉個tensorflow1.0的例子(偽代碼)
定義Variable、constant、placeholder等。
初始化global_variables_initializersession回話狀態。
再關閉session。
其中神經網絡的各個層需要單獨定義,還有一些激活函數、損失函數等概念。看到這些對於一個AI剛入門的開發者確實有些茫然。
keras是google的一個大佬開發的一個高度封裝的模型框架,已開源到github上。起初的計算後臺為Theano(和tensorflow差不多的一個框架),後來經過一系列的劇情,現在默認的計算後臺就為tensorflow了。另外由於tensorflow1.0的細節過於繁瑣混亂,升級版的tensorflow2.0基本拋棄了上述編寫語法。其自家小弟tensorflow.keras 已經和keras版本同步了。
backend為Tensorflow的keras
PytorchPytorch是一個機器學習框架(類似於Theano、tensorflow等)。與Keras一樣,它也抽象出了深層網絡編程的許多混亂部分(大神踩過的坑,我們就沒有必要踩了)。就學習難易和語言高級程度而言,Pytorch介於Keras和TensorFlow之間。但比起Keras具有更大的靈活性和控制能力,但又不必進行任何複雜的聲明式編程,如果想深入了解機器學習pytorch庫就是不錯的選擇。
二、應用領域
keras比較適合入門級學習,如程式設計師、系統開發者等非專業開發者,結合其後端(tensorflow等)部署,在工業領域在目前應用範圍廣。
目前,在學術界Pytorch已經超越其他框架,應為它輕部署,重驗證。而keras相當於一個大前端,直接使用keras對於專業人員(科學家、學者、工程師)來說,屏蔽了許多細節,不利於研究,一般不是很合適。
三、模型定義方式
Keras為了定義深度學習模型,Keras提供了函數式API。使用函數式API,神經網絡被定義為一系列順序化的函數,一個接一個地被應用。定義神經網絡是非常直觀的,因為使用API可以將層定義為函數。如下圖示例(偽代碼)
在Pytorch中,你將網絡設置為一個繼承來自Torch庫的torch.nn.Module的類。與Keras類似,Pytorch提供給你將層作為構建塊的能力,但是由於它們在Python類中,示例如下(偽代碼)。
四、細節與張量的處理
Keras API向開發者隱藏了許多瑣碎的細節(免得踩坑)。這使得定義網絡層是簡單,默認的設置通常足以讓你入門,對應開發者來說就學習是1+1=2,而產量是>2的。
Pytorch在這些方面更寬容一些。你需要知道每個層的輸入和輸出大小,但是這是一個比較容易的方面,你可以很快掌握它。你不需要構建一個抽象的計算圖,避免了在實際調試時無法看到該抽象的計算圖的細節。另外,你可以在Torch張量和Numpy數組之間來回切換,它們是內存共享的。如果你需要實現一些自定義的東西,那麼在TF張量和Numpy數組之間來回切換可能會很麻煩,這要求開發人員對TensorFlow會話有一個深入的理解。
五、訓練模型
如果你沒有更加奇特的需求,只想簡單了解嘗試一下,強烈推薦keras,它的一個.fit(),簡直讓你愛不釋手。
Pytorch在每次訓練開始就有前向傳播、反向傳播、計算損失並更新權重等等,不熟悉框架時就要踩坑。
六、CPU與GPU模式
keras的tensorflow版本,cpu和gpu是自動過渡的,不需要手工調整。
Pytorch必須顯式地為每個torch張量和numpy變量啟用GPU,一般使用「.to()」方法。但這種方式容易使代碼變得混亂,如果不同的操作在CPU和GPU之間來回移動,那麼很容易踩坑。
七、選擇建議
Keras是最容易使用和快速入門的前端框架。你甚至可以在不接觸後端(tensorflow等)的任何一行代碼的情況下實現神經網絡的分類、聚類、自然語言處理等問題。
pytorch如果想深入了解神經網絡的各個細節及執行歷史,那麼Pytorch可能是你首選。
一般建議keras入門,pytorch進階。