日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時(shí)間:8:30-17:00
你可能遇到了下面的問(wèn)題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營(yíng)銷(xiāo)解決方案
對(duì)比復(fù)現(xiàn)34個(gè)預(yù)訓(xùn)練模型,PyTorch和Keras你選誰(shuí)?

Keras 和 PyTorch 當(dāng)然是對(duì)初學(xué)者最友好的深度學(xué)習(xí)框架,它們用起來(lái)就像描述架構(gòu)的簡(jiǎn)單語(yǔ)言一樣,告訴框架哪一層該用什么。這樣減少了很多抽象工作,例如設(shè)計(jì)靜態(tài)計(jì)算圖、分別定義各張量的維度與內(nèi)容等等。

成都創(chuàng)新互聯(lián)專(zhuān)注為客戶提供全方位的互聯(lián)網(wǎng)綜合服務(wù),包含不限于成都做網(wǎng)站、網(wǎng)站建設(shè)、合浦網(wǎng)絡(luò)推廣、微信小程序開(kāi)發(fā)、合浦網(wǎng)絡(luò)營(yíng)銷(xiāo)、合浦企業(yè)策劃、合浦品牌公關(guān)、搜索引擎seo、人物專(zhuān)訪、企業(yè)宣傳片、企業(yè)代運(yùn)營(yíng)等,從售前售中售后,我們都將竭誠(chéng)為您服務(wù),您的肯定,是我們最大的嘉獎(jiǎng);成都創(chuàng)新互聯(lián)為所有大學(xué)生創(chuàng)業(yè)者提供合浦建站搭建服務(wù),24小時(shí)服務(wù)熱線:028-86922220,官方網(wǎng)址:www.cdcxhl.com

但是,到底哪一個(gè)框架更好一點(diǎn)呢?當(dāng)然不同的開(kāi)發(fā)者和研究者會(huì)有不同的愛(ài)好,也會(huì)有不同的看法。本文主要從抽象程度和性能兩個(gè)方面對(duì)比 PyTorch 與 Keras,并介紹了一個(gè)新的基準(zhǔn),它復(fù)現(xiàn)并對(duì)比了兩個(gè)框架的所有預(yù)訓(xùn)練模型。

在 Keras 和 PyTorch 基準(zhǔn)項(xiàng)目中,MIT 在讀博士 Curtis G. Northcutt 復(fù)現(xiàn)了 34 個(gè)預(yù)訓(xùn)練模型。該基準(zhǔn)結(jié)合了 Keras 和 PyTorch,并將它們統(tǒng)一到一個(gè)框架內(nèi),這樣我們就能知道這兩個(gè)框架的對(duì)比結(jié)果,知道不同模型用什么框架好。例如,項(xiàng)目作者表示 ResNet 架構(gòu)的模型使用 PyTorch 要比 Keras 效果好,Inception 架構(gòu)的模型使用 Keras 又要比 PyTorch 好。

Keras 和 PyTorch 基準(zhǔn)項(xiàng)目:https://github.com/cgnorthcutt/benchmarking-keras-pytorch

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

作為 TensorFlow 的高度封裝,Keras 的抽象層次非常高,很多 API 細(xì)節(jié)都隱藏了起來(lái)。雖然 PyTorch 比 TensorFlow 的靜態(tài)計(jì)算圖更容易使用,但總體上 Keras 隱藏的細(xì)節(jié)更多一些。而對(duì)于性能,其實(shí)各框架都會(huì)經(jīng)過(guò)大量的優(yōu)化,它們的差別并不是很明顯,也不會(huì)作為主要的選擇標(biāo)準(zhǔn)。

1. 易用性

Keras 是一個(gè)更高級(jí)別的框架,將常用的深度學(xué)習(xí)層和運(yùn)算封裝進(jìn)便捷的構(gòu)造塊,并像積木一樣搭建復(fù)雜模型,開(kāi)發(fā)者和研究者不需要考慮深度學(xué)習(xí)的復(fù)雜度。

PyTorch 提供一個(gè)相對(duì)較低級(jí)別的實(shí)驗(yàn)環(huán)境,使用戶可以更加自由地編寫(xiě)自定義層、查看數(shù)值優(yōu)化任務(wù)等等。例如在 PyTorch 1.0 中,編譯工具 torch.jit 就包含一種名為 Torch Script 的語(yǔ)言,它是 Python 的子語(yǔ)言,開(kāi)發(fā)者使用它能進(jìn)一步對(duì)模型進(jìn)行優(yōu)化。

我們可以通過(guò)定義簡(jiǎn)單的卷積網(wǎng)絡(luò)看看兩者的易用性:

 
 
 
 
  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 的定義方式,很多時(shí)候運(yùn)算都會(huì)作為參數(shù)嵌入到 API 中,因此代碼會(huì)顯得非常簡(jiǎn)潔。如下所示為 PyTorch 的定義方式,它一般都是通過(guò)類(lèi)和實(shí)例的方式定義,且具體運(yùn)算的很多維度參數(shù)都需要定義。

 
 
 
 
  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 感覺(jué)比 PyTorch 更易于使用,但兩者的差別不大,都期望模型的編寫(xiě)能更便捷。

2. 性能

目前有很多對(duì)比各框架性能的實(shí)驗(yàn)都表明 PyTorch 的訓(xùn)練速度相比 Keras 會(huì)快一些。如下兩張圖表展示了不同框架在不同硬件和模型類(lèi)型的表現(xiàn):

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

這兩份對(duì)比細(xì)節(jié)可查閱:

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

二、Keras 和 PyTorch Benchmark

現(xiàn)在如果我們從預(yù)訓(xùn)練模型的角度看,那么相同的模型在不同的框架上,驗(yàn)證集準(zhǔn)確度又是什么樣的?在這個(gè)項(xiàng)目中,作者用兩個(gè)框架一共復(fù)現(xiàn)了 34 個(gè)預(yù)訓(xùn)練模型,并給出了所有預(yù)訓(xùn)練模型的驗(yàn)證準(zhǔn)確率。所以該項(xiàng)目不僅能作為對(duì)比依據(jù),同時(shí)還能作為學(xué)習(xí)資源,又有什么比直接學(xué)習(xí)經(jīng)典模型代碼更好的方法呢?

1. 預(yù)訓(xùn)練模型不是已經(jīng)可以復(fù)現(xiàn)了嗎?

在 PyTorch 中是這樣的。然而有些 Keras 用戶卻覺(jué)得復(fù)現(xiàn)非常難,他們遇見(jiàn)的問(wèn)題可以分為三類(lèi):

  • 不能復(fù)現(xiàn) Keras 已發(fā)布的基準(zhǔn)結(jié)果,即使完全復(fù)制示例代碼也沒(méi)有用。實(shí)際上,他們報(bào)告的準(zhǔn)確率(截止到 2019 年 2 月)通常略高于實(shí)際準(zhǔn)確率。
  • 一些預(yù)訓(xùn)練的 Keras 模型在部署到某個(gè)服務(wù)器或與其他 Keras 模型一起依次運(yùn)行時(shí)會(huì)產(chǎn)生不一致或較低的準(zhǔn)確率。
  • 使用批歸一化(BN)的 Keras 模型可能并不可靠。對(duì)于一些模型,前向傳播評(píng)估仍然會(huì)導(dǎo)致推理階段中的權(quán)重改變。

這些問(wèn)題都是現(xiàn)實(shí)存在的,原 GitHub 項(xiàng)目為每個(gè)問(wèn)題都提供了鏈接。項(xiàng)目作者的目標(biāo)之一是通過(guò)為 Keras 預(yù)訓(xùn)練模型創(chuàng)建可復(fù)現(xiàn)基準(zhǔn),從而幫助解決上述的一些問(wèn)題。解決方法可分為以下三個(gè)方面,在 Keras 中要做到:推理期間避免分批(batches)。

每次運(yùn)行一個(gè)樣本,這樣做非常慢,但可以為每個(gè)模型得出一個(gè)可復(fù)現(xiàn)的輸出。

只在本地函數(shù)或 with 語(yǔ)句中運(yùn)行模型,以確保在加載下一個(gè)模型時(shí),前一個(gè)模型的任何東西都不會(huì)保存在內(nèi)存中。

2. 預(yù)訓(xùn)練模型復(fù)現(xiàn)結(jié)果

以下是 Keras 和 PyTorch 的「實(shí)際」驗(yàn)證集準(zhǔn)確度表(已經(jīng)在 macOS 10.11.6、Linux Debian 9 和 Ubuntu 18.04 上得到驗(yàn)證)。

3. 復(fù)現(xiàn)方法

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

 
 
 
 
  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 驗(yàn)證集中每個(gè)示例的 top 5 預(yù)測(cè)已經(jīng)進(jìn)行了預(yù)計(jì),運(yùn)行以下命令行將直接使用這些預(yù)計(jì)算結(jié)果,并在幾秒內(nèi)復(fù)現(xiàn) Keras 和 PyTorch 基準(zhǔn)。

 
 
 
 
  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 

不使用預(yù)計(jì)算數(shù)據(jù)也可以復(fù)現(xiàn)每個(gè) Keras 和 PyTorch 的推理輸出。Keras 的推理要花很長(zhǎng)時(shí)間(5-10 小時(shí)),因?yàn)槊看沃挥?jì)算一個(gè)示例的前向傳播,還要避免向量計(jì)算。如果要可靠地復(fù)現(xiàn)同樣的準(zhǔn)確率,這是目前發(fā)現(xiàn)的***的方法。PyTorch 的推理非???一個(gè)小時(shí)都不到)。復(fù)現(xiàn)代碼如下:

 
 
 
 
  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 的使用、批大小、輸出存儲(chǔ)目錄等。運(yùn)行時(shí)加上-h flag,可以查看命令行參數(shù)選項(xiàng)。

看完文章之后,你更中意誰(shuí)呢?


新聞標(biāo)題:對(duì)比復(fù)現(xiàn)34個(gè)預(yù)訓(xùn)練模型,PyTorch和Keras你選誰(shuí)?
文章來(lái)源:http://m.5511xx.com/article/cceiccd.html