成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

對比復現34個預訓練模型,PyTorch和Keras你選誰?

開發 開發工具 深度學習
初學者該用什么樣的 DL 架構?當然是越簡單越好、訓練速度越快越好、測試準確率越高越好!那么我們到底該選擇 PyTorch 還是 Keras 呢?

Keras 和 PyTorch 當然是對初學者最友好的深度學習框架,它們用起來就像描述架構的簡單語言一樣,告訴框架哪一層該用什么。這樣減少了很多抽象工作,例如設計靜態計算圖、分別定義各張量的維度與內容等等。

但是,到底哪一個框架更好一點呢?當然不同的開發者和研究者會有不同的愛好,也會有不同的看法。本文主要從抽象程度和性能兩個方面對比 PyTorch 與 Keras,并介紹了一個新的基準,它復現并對比了兩個框架的所有預訓練模型。

在 Keras 和 PyTorch 基準項目中,MIT 在讀博士 Curtis G. Northcutt 復現了 34 個預訓練模型。該基準結合了 Keras 和 PyTorch,并將它們統一到一個框架內,這樣我們就能知道這兩個框架的對比結果,知道不同模型用什么框架好。例如,項目作者表示 ResNet 架構的模型使用 PyTorch 要比 Keras 效果好,Inception 架構的模型使用 Keras 又要比 PyTorch 好。

Keras 和 PyTorch 基準項目:https://github.com/cgnorthcutt/benchmarking-keras-pytorch

一、兩大框架的性能與易用性

作為 TensorFlow 的高度封裝,Keras 的抽象層次非常高,很多 API 細節都隱藏了起來。雖然 PyTorch 比 TensorFlow 的靜態計算圖更容易使用,但總體上 Keras 隱藏的細節更多一些。而對于性能,其實各框架都會經過大量的優化,它們的差別并不是很明顯,也不會作為主要的選擇標準。

1. 易用性

Keras 是一個更高級別的框架,將常用的深度學習層和運算封裝進便捷的構造塊,并像積木一樣搭建復雜模型,開發者和研究者不需要考慮深度學習的復雜度。

PyTorch 提供一個相對較低級別的實驗環境,使用戶可以更加自由地編寫自定義層、查看數值優化任務等等。例如在 PyTorch 1.0 中,編譯工具 torch.jit 就包含一種名為 Torch Script 的語言,它是 Python 的子語言,開發者使用它能進一步對模型進行優化。

我們可以通過定義簡單的卷積網絡看看兩者的易用性:

  1. model = Sequential() 
  2. model.add(Conv2D(32, (3, 3), activation='relu'input_shape=(32, 32, 3))) 
  3. model.add(MaxPool2D()) 
  4. model.add(Conv2D(16, (3, 3), activation='relu')) 
  5. model.add(MaxPool2D()) 
  6. model.add(Flatten()) 
  7. model.add(Dense(10, activation='softmax')) 

如上所示為 Keras 的定義方式,很多時候運算都會作為參數嵌入到 API 中,因此代碼會顯得非常簡潔。如下所示為 PyTorch 的定義方式,它一般都是通過類和實例的方式定義,且具體運算的很多維度參數都需要定義。

  1. class Net(nn.Module): 
  2.     def __init__(self): 
  3.         super(Net, self).__init__() 
  4.  
  5.         self.conv1 = nn.Conv2d(3, 32, 3) 
  6.         self.conv2 = nn.Conv2d(32, 16, 3) 
  7.         self.fc1 = nn.Linear(16 * 6 * 6, 10)  
  8.         self.pool = nn.MaxPool2d(2, 2) 
  9.  
  10.     def forward(self, x): 
  11.         x = self.pool(F.relu(self.conv1(x))) 
  12.         x = self.pool(F.relu(self.conv2(x))) 
  13.         xx = x.view(-1, 16 * 6 * 6) 
  14.         x = F.log_softmax(self.fc1(x), dim=-1) 
  15.  
  16.         return x 
  17.  
  18. model = Net() 

雖然 Keras 感覺比 PyTorch 更易于使用,但兩者的差別不大,都期望模型的編寫能更便捷。

2. 性能

目前有很多對比各框架性能的實驗都表明 PyTorch 的訓練速度相比 Keras 會快一些。如下兩張圖表展示了不同框架在不同硬件和模型類型的表現:

下面兩張同樣展示了不同模型在 PyTorch 和 Keras 框架下的性能,這兩份 18 年的測試都表明 PyTorch 的速度要比 Keras 快那么一點點。

這兩份對比細節可查閱:

  • https://github.com/ilkarman/DeepLearningFrameworks/
  • https://wrosinski.github.io/deep-learning-frameworks/

二、Keras 和 PyTorch Benchmark

現在如果我們從預訓練模型的角度看,那么相同的模型在不同的框架上,驗證集準確度又是什么樣的?在這個項目中,作者用兩個框架一共復現了 34 個預訓練模型,并給出了所有預訓練模型的驗證準確率。所以該項目不僅能作為對比依據,同時還能作為學習資源,又有什么比直接學習經典模型代碼更好的方法呢?

1. 預訓練模型不是已經可以復現了嗎?

在 PyTorch 中是這樣的。然而有些 Keras 用戶卻覺得復現非常難,他們遇見的問題可以分為三類:

  • 不能復現 Keras 已發布的基準結果,即使完全復制示例代碼也沒有用。實際上,他們報告的準確率(截止到 2019 年 2 月)通常略高于實際準確率。
  • 一些預訓練的 Keras 模型在部署到某個服務器或與其他 Keras 模型一起依次運行時會產生不一致或較低的準確率。
  • 使用批歸一化(BN)的 Keras 模型可能并不可靠。對于一些模型,前向傳播評估仍然會導致推理階段中的權重改變。

這些問題都是現實存在的,原 GitHub 項目為每個問題都提供了鏈接。項目作者的目標之一是通過為 Keras 預訓練模型創建可復現基準,從而幫助解決上述的一些問題。解決方法可分為以下三個方面,在 Keras 中要做到:推理期間避免分批(batches)。

每次運行一個樣本,這樣做非常慢,但可以為每個模型得出一個可復現的輸出。

只在本地函數或 with 語句中運行模型,以確保在加載下一個模型時,前一個模型的任何東西都不會保存在內存中。

2. 預訓練模型復現結果

以下是 Keras 和 PyTorch 的「實際」驗證集準確度表(已經在 macOS 10.11.6、Linux Debian 9 和 Ubuntu 18.04 上得到驗證)。

3. 復現方法

首先需要下載 ImageNet 2012 驗證集,該數據集包含 50000 張圖片。在 ILSVRC2012_img_val.tar 下載完成后,運行以下命令行預處理/提取驗證集:

  1. # Credit to Soumith: https://github.com/soumith/imagenet-multiGPU.torch 
  2. $ cd ../ && mkdir val && mv ILSVRC2012_img_val.tar val/ && cd val && tar -xvf ILSVRC2012_img_val.tar 
  3. $ wget -qO- https://raw.githubusercontent.com/soumith/imagenetloader.torch/master/valprep.sh | bash 

ImageNet 驗證集中每個示例的 top 5 預測已經進行了預計,運行以下命令行將直接使用這些預計算結果,并在幾秒內復現 Keras 和 PyTorch 基準。

  1. $ git clone https://github.com:cgnorthcutt/imagenet-benchmarking.git 
  2. $ cd benchmarking-keras-pytorch 
  3. $ python imagenet_benchmarking.py /path/to/imagenet_val_data 

不使用預計算數據也可以復現每個 Keras 和 PyTorch 的推理輸出。Keras 的推理要花很長時間(5-10 小時),因為每次只計算一個示例的前向傳播,還要避免向量計算。如果要可靠地復現同樣的準確率,這是目前發現的***的方法。PyTorch 的推理非常快(一個小時都不到)。復現代碼如下:

  1. $ git clone https://github.com:cgnorthcutt/imagenet-benchmarking.git 
  2. $ cd benchmarking-keras-pytorch 
  3. $ # Compute outputs of PyTorch models (1 hour) 
  4. $ ./imagenet_pytorch_get_predictions.py /path/to/imagenet_val_data 
  5. $ # Compute outputs of Keras models (5-10 hours) 
  6. $ ./imagenet_keras_get_predictions.py /path/to/imagenet_val_data 
  7. $ # View benchmark results 
  8. $ ./imagenet_benchmarking.py /path/to/imagenet_val_data 

你可以控制 GPU 的使用、批大小、輸出存儲目錄等。運行時加上-h flag,可以查看命令行參數選項。

看完文章之后,你更中意誰呢?

原文鏈接:http://l7.curtisnorthcutt.com/towards-reproducibility-benchmarking-keras-pytorch

【本文是51CTO專欄機構“機器之心”的原創譯文,微信公眾號“機器之心( id: almosthuman2014)”】 

戳這里,看該作者更多好文

責任編輯:趙寧寧 來源: 51CTO專欄
相關推薦

2021-05-24 15:28:55

機器學習人工智能計算機

2023-12-29 14:13:41

PyTorch模型開發

2023-03-28 16:01:01

PytorchSimCLR算法

2021-03-23 15:21:00

人工智能機器學習技術

2020-11-20 10:40:20

PyTorch神經網絡代碼

2024-09-26 16:51:23

2021-12-19 22:51:24

PyTorchTensorFlow框架

2021-01-27 10:46:07

Pytorch深度學習模型訓練

2020-10-15 11:22:34

PyTorchTensorFlow機器學習

2021-09-26 10:47:12

預訓練模型GPT

2025-06-13 09:29:51

2012-07-24 09:19:05

打印機

2023-02-01 09:46:29

2023-05-19 07:25:34

2020-10-15 13:18:08

EdgeChrome瀏覽器

2024-11-04 00:24:56

2020-10-27 09:37:43

PyTorchTensorFlow機器學習

2017-06-13 22:56:27

動態圖PyTorchKeras

2023-05-06 12:47:41

2017-12-26 13:53:31

深度學習遷移學習
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 成人水多啪啪片 | 日韩精品视频一区二区三区 | 亚洲福利在线观看 | 夜夜爽99久久国产综合精品女不卡 | 亚洲精品久久久久久久久久吃药 | 国产精品91视频 | 久久久网 | 国产精品久久久久久久一区探花 | 亚洲精品一 | 日产精品久久久一区二区福利 | 在线不卡一区 | 国产在线播放一区二区三区 | 免费黄色大片 | 超碰导航 | 国产精品久久久久久久久久久免费看 | 欧美一卡二卡在线观看 | 久久视频免费看 | 国产精品欧美一区二区 | 黄色毛片视频 | 国产精品久久久久久久久久三级 | 国产精品综合一区二区 | 午夜网站视频 | 羞羞视频网| 91久久久久 | 伊人一二三 | 久久综合99 | 亚洲免费视频网站 | 亚洲不卡在线观看 | 欧美一区二区三区 | 欧美黄在线观看 | 亚洲一区二区在线免费观看 | 欧美极品在线视频 | 日本超碰 | 日本在线免费观看 | 日本精品一区二区三区在线观看 | 日韩aⅴ片| 欧美精品一区二区三区在线 | 日产精品久久久一区二区福利 | 中文字幕国产 | 欧美成人精品激情在线观看 | av手机在线免费观看 |