初學AI神經網絡應該選擇Keras或是Pytorch框架?

2020-12-16 肥貓技術生活

對於許多開發者來說,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進階。

相關焦點

  • Keras vs PyTorch:誰是第一深度學習框架?
    【IT168 資訊】「第一個深度學習框架該怎麼選」對於初學者而言一直是個頭疼的問題。本文中,來自 deepsense.ai 的研究員給出了他們在高級框架上的答案。在 Keras 與 PyTorch 的對比中,作者還給出了相同神經網絡在不同框架中性能的基準測試結果。
  • TensorFlow、PyTorch、Keras:NLP框架哪家強
    本文著重分析比較了這三個框架用於自然語言處理(Natural Language Processing,NLP)時的不同之處。1. 可用的RNN類型當試圖用深度學習方法來解決NLP問題時,循環神經網絡(Recurrent Neural Networks,RNNs)是開發者最常用的專業架構。
  • 神經網絡篇——用TensorFlow2.0框架實現BP網絡
    那這個感知器模型和BP網絡有什麼關係呢?在我們所看到的BP網絡的結構圖中,其實是被簡化了的,下面小編畫了一個邏輯更清晰一點的圖:這樣我們就可以看出來,其實BP網絡是由一個一個的感知器組成,也就構成了一個真正的神經網絡,自然就能理解為什麼要使用激活函數了。接下來我們來看一下TensorFlow實現BP神經網絡到底有多簡單!
  • 深度學習框架如何選?4大場景對比Keras和PyTorch
    本文對比了Keras和PyTorch四個方面的不同,讀者可以針對自己的任務來選擇。對於許多科學家、工程師和開發人員來說,TensorFlow是他們的第一個深度學習框架。但indus.ai公司機器學習工程師George Seif認為,TF並不是非常的用戶友好。相比TF,Seif認為Keras和PyTorch比TensorFlow更易用,已經獲得了巨大的普及。
  • 「決戰紫禁之巔」之深度學習框架篇:Keras VS PyTorch
    本文將分別對 Keras 和 PyTorch 的四個方面進行比較,你可以根據兩種框架的優劣勢以及自身的需要選擇其中一種。Keras 的突出特點在於其易用性,它是迄今為止最容易上手且能夠快速運行的框架。此外,Keras 能夠直觀地定義神經網絡,函數式 API 的使用令用戶可以將層定義為函數。PyTorch 於 2016 年 10 月發布,由 Facebook AI 研究團隊開發,是專注於直接處理數組表達式的較低級別 API。
  • 用Keras從零開始6步驟訓練神經網絡
    一,Keras簡介Keras 是一個用 Python 編寫的高級神經網絡 API,它能夠以 TensorFlow,Theano 或者 CNTK, MXNet 作為後端運行。Keras 具有以下優勢:簡單易用:Keras是為人類而不是為機器設計的 API。它把用戶體驗放在首要和中心位置。
  • 掌握深度學習,為什麼要用 PyTorch、TensorFlow 框架?
    GPU加速是大多數現代深度神經網絡框架的基礎。動態神經網絡是一種特殊的神經網絡,每次迭代都會發生變化,例如,PyTorch模型可以在訓練期間通過添加和刪除隱藏層,來提高其準確性和通用性。PyTorch會在每個迭代中實時重建計算圖。相比之下,在默認情況下TensorFlow會創建一個計算圖,優化圖代碼以提高性能,然後訓練模型。
  • 【乾貨】基於pytorch的CNN、LSTM神經網絡模型調參小結
    這是最近兩個月來的一個小總結,實現的demo已經上傳github,裡面包含了CNN、LSTM、BiLSTM、GRU以及CNN與LSTM、BiLSTM的結合還有多層多通道CNN、LSTM、BiLSTM等多個神經網絡模型的的實現
  • Keras vs PyTorch vs Caffe:CNN實現對比
    這些深度學習框架提供了高級編程接口,幫助我們設計深度學習模型。使用深度學習框架,它通過提供內置的庫函數來減少開發人員的工作,從而使我們能夠更快更容易地構建模型。在本文中,我們將構建相同的深度學習框架,即在Keras、PyTorch和Caffe中對同一數據集進行卷積神經網絡圖像分類,並對所有這些方法的實現進行比較。
  • TensorFlow vs PyTorch:哪個是深度學習網絡編程的最佳框架呢?
    哪種框架最適合神經網絡編程呢?是TensorFlow還是PyTorch ?首先讓我們構建一個神經網絡模型,該模型分別使用PyTorch和Keras(TensorFlow)對手寫數字進行分類。1.對神經網絡進行編程的步驟a)導入所需的Python庫在這兩個框架中,我們需要首先導入一些Python庫並定義一些我們將需要訓練的超參數:import numpy as npimport
  • 用Keras復現DCN算法
    放假前幾天一直在按老師的要求修改聚類框架,老師想要將論文《Towards K-means-friendly Spaces: Simultaneous DeepLearning and Clustering》中的聚類方法DCN應用到我們的框架中。
  • Tensorflow還是PyTorch?哪一個才更適合編程實現深度神經網絡?
    編程實現神經網絡的最佳框架是什麼?TensorFlow還是PyTorch?我的回答是:別擔心,你從哪一個入門,你選擇哪一個並不重要,重要的是自己動手實踐!下面我們開始吧!這兩種框架都提供了編程神經網絡常用的機器學習步驟:導入所需的庫加載並預處理數據定義模型定義優化器和損失函數
  • 【深度學習】Keras vs PyTorch vs Caffe:CNN實現對比
    使用深度學習框架,它通過提供內置的庫函數來減少開發人員的工作,從而使我們能夠更快更容易地構建模型。在本文中,我們將構建相同的深度學習框架,即在Keras、PyTorch和Caffe中對同一數據集進行卷積神經網絡圖像分類,並對所有這些方法的實現進行比較。最後,我們將看到PyTorch構建的CNN模型如何優於內置Keras和Caffe的同行。
  • 深度學習環境配置指南:Pytorch、TensorFlow、Keras
    導讀本文介紹了作者使用RTX3090進行深度學習環境配置pytorch、tensorflow、keras等的詳細過程及代碼。筆者中山大學研究生,醫學生+計科學生的集合體,機器學習愛好者。基本環境(整個流程大約需要5分鐘甚至更少)py37或py38cuda11.0cudnn8.0.4tf2.5(tf-nightly)或 tf1.15.4pytorch1.7keras2.3
  • 【小白學PyTorch】18.TF2構建自定義模型
    1 創建自定義網絡層 import tensorflow as tfimport tensorflow.keras as kerasclass MyLayer(keras.layers.Layer):    def __init__(self, input_dim=32, output_dim=32):
  • 《基於Scikit-Learn、Keras和TensorFlow的機器學習實戰》:人工神經網絡介紹
    )的第一章《人工神經網絡介紹》。這是啟發人工神經網絡(ANN)的關鍵思想:ANN是一個受我們大腦中發現的生物神經元網絡啟發的機器學習模型。然而,儘管飛機受到鳥類的啟發,但它們不必拍動翅膀。同樣的,ANN 逐漸變得與生物神經元網絡有很大的不同。一些研究者甚至爭辯說,我們應該完全放棄與生物進行類比(例如,說「units」而不是「neurons」),以免我們把我們的創造力限制在生物學系統上。人工神經網絡是深度學習的核心。
  • ts30:基於Keras的深度神經網絡應用
    深度神經網絡的計算方法與第一個神經網絡的計算方法幾乎沒有什麼不同。我們一直都能創建和計算深度神經網絡。一個深度神經網絡只不過是一個有許多層的神經網絡。雖然我們總是能夠創建/計算深度神經網絡,但我們缺乏訓練它們的有效方法。深度學習是訓練深度神經網絡的有效手段。如果深度學習是一種機器學習,這就引出了一個問題:「什麼是機器學習?」
  • Keras深度學習框架配置
    項目代碼是在Windows 7上運行的,主要用到的Matlab R2013a和Python,其中Matlab用於patch的分割和預處理,卷積神經網絡搭建用到了根植於Python和Theano的深度學習框架Keras。
  • TF2.0初體驗-使用TF2.0 + Keras構建簡單的神經網絡
    今天體驗了一把,確實挺不錯的,那麼今天就手把手來教學如何通過TF2.0 + Keras構建一個簡單神經網絡。1、安裝TF2.0虛擬環境首先,我們要在電腦裡裝一個tf2.0的虛擬環境(我的電腦是mac,windows和linux類似)。這裡使用anaconda的命令:注意,後面的python版本最好帶上,否則什麼庫都不給你裝。
  • RTX 3090 的深度學習環境配置指南:Pytorch、TensorFlow、Keras
    導讀本文介紹了作者使用RTX3090進行深度學習環境配置pytorch、tensorflow、keras等的詳細過程及代碼。筆者中山大學研究生,醫學生+計科學生的集合體,機器學習愛好者。基本環境(整個流程大約需要5分鐘甚至更少)py37或py38cuda11.0cudnn8.0.4tf2.5(tf-nightly)或 tf1.15.4pytorch1.7keras2.3