0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫(xiě)文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

TensorFlow和Keras哪個(gè)更好用?

DPVg_AI_era ? 來(lái)源:未知 ? 作者:李威 ? 2018-10-31 09:40 ? 次閱讀

本文的作者經(jīng)常在電子郵箱中、社交媒體上,甚至在與深度學(xué)習(xí)研究人員、從業(yè)者和工程師面對(duì)面交談時(shí),會(huì)被問(wèn)到這些問(wèn)題:我應(yīng)該在項(xiàng)目中使用 Keras 還是 TensorFlow?TensorFlow 和 Keras 哪個(gè)更好?我應(yīng)該花時(shí)間研究TensorFlow 還是 Keras?你是不是也有相同的疑問(wèn)?如果有,相信這篇文章會(huì)給你答案。

實(shí)際上,到 2017 年中,Keras 已經(jīng)被大規(guī)模采用,并與 TensorFlow 集成在一起。這種 TensorFlow + Keras 的組合讓你可以:

使用 Keras 的接口定義模型;

如果你需要特定的 TensorFlow 功能或者需要實(shí)現(xiàn) Keras 不支持但 TensorFlow 支持的自定義功能,可以回到 TensorFlow。

簡(jiǎn)單地說(shuō),你可以將 TensorFlow 代碼直接插入到 Keras 的模型或訓(xùn)練管道中!

但請(qǐng)別誤會(huì),我并不是說(shuō)你就不需要了解 TensorFlow 了。我的意思是,如果你:

剛開(kāi)始接觸深度學(xué)習(xí)……

在為下一個(gè)項(xiàng)目選型……

想知道 Keras 或 TensorFlow 哪個(gè)“更好”……

我的建議是先從 Keras 著手,然后深入 TensorFlow,這樣可以獲得你需要的某些特定功能。

在這篇文章中,我將向你展示如何使用 Keras 訓(xùn)練神經(jīng)網(wǎng)絡(luò),以及如何使用直接構(gòu)建在 TensorFlow 庫(kù)中的 Keras + TensorFlow 組合來(lái)訓(xùn)練模型。

Keras 與 TF 我該學(xué)哪個(gè)?

在文章的其余部分,我將繼續(xù)討論有關(guān) Keras 與 TensorFlow 的爭(zhēng)論以及為什么說(shuō)這個(gè)問(wèn)題其實(shí)是個(gè)錯(cuò)誤的問(wèn)題。

我們將使用標(biāo)準(zhǔn)的 keras 模塊以及 TensorFlow 的 tf.keras 模塊實(shí)現(xiàn)一個(gè)卷積神經(jīng)網(wǎng)絡(luò)(CNN)。

我們將在一個(gè)樣本數(shù)據(jù)集上訓(xùn)練 CNN,然后檢查結(jié)果——你會(huì)發(fā)現(xiàn),Keras 和 TensorFlow 可以很融洽地合作。

最重要的是,你將會(huì)了解為什么 Keras 與 TensorFlow 之間的爭(zhēng)論其實(shí)是沒(méi)有意義的。

盡管從 TensorFlow 宣布將 Keras 集成到官方 TensorFlow 版本中已經(jīng)一年多時(shí)間了,但很多深度學(xué)習(xí)從業(yè)者仍然不知道他們可以通過(guò) tf.keras 子模塊訪問(wèn) Keras,為此我感到很驚訝。

更重要的是,Keras + TensorFlow 的集成是無(wú)縫的,你可以直接將 TensorFlow 代碼放到 Keras 模型中。

在 TensorFlow 中使用 Keras 將為你帶來(lái)兩全其美的好處:

你可以使用 Keras 提供的簡(jiǎn)單直觀的 API 來(lái)創(chuàng)建模型;

Keras API 與 scikit-learn(被認(rèn)為是機(jī)器學(xué)習(xí) API 的“黃金標(biāo)準(zhǔn)”)很像;

Keras API 采用了模塊化,易于使用;

當(dāng)你需要自定義實(shí)現(xiàn)或者更復(fù)雜的損失函數(shù)時(shí),可以直接進(jìn)入 TensorFlow,并讓代碼自動(dòng)與 Keras 模型集成。

在過(guò)去幾年中,深度學(xué)習(xí)研究人員、從業(yè)人員和工程師通常需要做出以下選擇:

我是選擇易用但難以定制的 Keras 庫(kù)?

還是選擇難用的 TensorFlow API,并編寫(xiě)更多的代碼?

所幸的是,我們不必再糾結(jié)了。

如果你發(fā)現(xiàn)自己還在問(wèn)這樣的問(wèn)題,那么請(qǐng)退后一步——你問(wèn)的是錯(cuò)誤的問(wèn)題——你可以同時(shí)擁有這兩個(gè)框架。

如圖所示,導(dǎo)入 TensorFlow(tf),然后調(diào)用 tf.keras,可見(jiàn) Keras 實(shí)際上已經(jīng)成為 TensorFlow 的一部分。

在 tf.keras 中包含 Keras 讓你可以使用標(biāo)準(zhǔn)的 Keras 包實(shí)現(xiàn)簡(jiǎn)單的前饋神經(jīng)網(wǎng)絡(luò):

然后使用 tf.keras 子模塊實(shí)現(xiàn)相同的網(wǎng)絡(luò):

這是否意味著你必須使用 tf.keras?標(biāo)準(zhǔn)的 Keras 包是不是已經(jīng)過(guò)時(shí)?當(dāng)然不是。

作為一個(gè)庫(kù),Keras 仍然可以單獨(dú)使用,因此未來(lái)兩者可能會(huì)分道揚(yáng)鑣。不過(guò),因?yàn)楣雀韫俜街С?Keras 和 TensorFlow,所以似乎不太可能出現(xiàn)這種情況。

關(guān)鍵是:

如果你習(xí)慣使用 Keras 編寫(xiě)代碼,那么請(qǐng)繼續(xù)這樣做。

但如果你主要使用的是 TensorFlow,那么應(yīng)該開(kāi)始考慮一下 Keras API:

它內(nèi)置于 TensorFlow 中;

它更容易使用;

當(dāng)你需要使用 TensorFlow 來(lái)實(shí)現(xiàn)特定功能時(shí),可以直接將其集成到 Keras 模型中。

我們的樣本數(shù)據(jù)集

CIFAR-10 數(shù)據(jù)集包含了 10 個(gè)分類(lèi),我們將它用在我們的演示中。

為簡(jiǎn)單起見(jiàn),我們將使用以下方法在 CIFAR-10 數(shù)據(jù)集上訓(xùn)練兩個(gè)單獨(dú)的卷積神經(jīng)網(wǎng)絡(luò):

TensorFlow + Keras;

tf.keras 的 Keras 子模塊。

我還將展示如何將自定義的 TensorFlow 代碼包含在 Keras 模型中。

我們的項(xiàng)目結(jié)構(gòu)

可以使用 tree 命令在終端中查看我們的項(xiàng)目結(jié)構(gòu):

pyimagesearch 模塊不能通過(guò) pip 安裝,請(qǐng)點(diǎn)擊文末提供的下載鏈接。現(xiàn)在讓我們看一下該模塊的兩個(gè)重要 Python 文件:

minivggnetkeras.py:MiniVGGNet(一個(gè)機(jī)遇 VGGNet 的深度學(xué)習(xí)模型)的 Keras 實(shí)現(xiàn)。

minivggnettf.py:MiniVGGNet 的 TensorFlow + Keras(即 tf.keras)實(shí)現(xiàn)。

項(xiàng)目根目錄包含兩個(gè) Python 文件:

train_network_keras.py:Keras 版本的訓(xùn)練腳本。

train_network_tf.py:TensorFlow + Keras 版本的訓(xùn)練腳本,幾乎與前一個(gè)一模一樣。

每個(gè)腳本都將生成相應(yīng)的訓(xùn)練準(zhǔn)確率和損失:

plot_keras.png

plot_tf.png

使用 Keras 訓(xùn)練網(wǎng)絡(luò)

訓(xùn)練的第一步是使用 Keras 實(shí)現(xiàn)網(wǎng)絡(luò)架構(gòu)。

打開(kāi) minivggnetkeras.py 文件,并插入以下代碼:

我們先導(dǎo)入構(gòu)建模型需要的一系列 Keras 包。

然后定義我們的 MiniVGGNetKeras 類(lèi):

我們定義了 build 方法、inputShape 和 input。

然后定義卷積神經(jīng)網(wǎng)絡(luò)的主要部分:

你會(huì)發(fā)現(xiàn)我們?cè)趹?yīng)用池化層之前堆疊了一系列卷積、ReLU 激活和批量規(guī)范化層,以便減少卷的空間維度。還使用了 Dropout 來(lái)減少過(guò)擬合。

現(xiàn)在將全連接層添加到網(wǎng)絡(luò)中:

我們已經(jīng)使用 Keras 實(shí)現(xiàn)了 CNN,現(xiàn)在創(chuàng)建將用于訓(xùn)練的驅(qū)動(dòng)腳本。

打開(kāi) train_network_keras.py 并插入以下代碼:

我們先導(dǎo)入需要的包。

matplotlib 設(shè)置為“Agg”,這樣就可以將訓(xùn)練結(jié)果保存為圖像文件。

然后導(dǎo)入 MiniVGGNetKeras 類(lèi)。

我們使用 scikit-learn 的 LabelBinarizer 進(jìn)行“獨(dú)熱”編碼,并使用 classification_report 打印分類(lèi)精度。

然后導(dǎo)入數(shù)據(jù)集。

我們通過(guò) --plot 傳入命令行參數(shù),也就是圖像的保存路徑。

現(xiàn)在讓我們加載 CIFAR-10 數(shù)據(jù)集,并對(duì)標(biāo)簽進(jìn)行編碼:

我們先加載和提取訓(xùn)練和測(cè)試分割,并將它們轉(zhuǎn)換為浮點(diǎn)數(shù)和進(jìn)行數(shù)據(jù)縮放。

然后我們對(duì)標(biāo)簽進(jìn)行編碼,并初始化 labelNames。

接下來(lái),讓我們開(kāi)始訓(xùn)練模型:

我們先設(shè)置訓(xùn)練參數(shù)和優(yōu)化方法。

然后我們使用 MiniVGGNetKeras.build 方法初始化和編譯模型。

隨后,我們啟動(dòng)了訓(xùn)練程序。

現(xiàn)在讓我們來(lái)評(píng)估網(wǎng)絡(luò)并生成結(jié)果圖:

我們基于數(shù)據(jù)的測(cè)試分割來(lái)評(píng)估網(wǎng)絡(luò),并生成 classification_report,最后再導(dǎo)出結(jié)果。

注意:通常我會(huì)序列化并導(dǎo)出模型,以便可以將其用在圖像或視頻的處理腳本中,但這里不打算這樣做,因?yàn)檫@超出了本文的范圍。

打開(kāi)一個(gè)終端并執(zhí)行以下命令:

我的 CPU 完成一個(gè) epoch 需要 5 分多鐘。

我們獲得了 75%的準(zhǔn)確率——當(dāng)然不是最先進(jìn)的,不過(guò)它比隨機(jī)猜測(cè)(1/10)要好得多。

對(duì)于小型網(wǎng)絡(luò)來(lái)說(shuō),我們的準(zhǔn)確率算是非常好的了,而且沒(méi)有發(fā)生過(guò)擬合。

使用 TensorFlow 和 tf.keras 訓(xùn)練網(wǎng)絡(luò)

使用 tf.keras 構(gòu)建的 MiniVGGNet CNN 與我們直接使用 Keras 構(gòu)建的模型是一樣的,除了為演示目的而修改的激活函數(shù)。

現(xiàn)在我們已經(jīng)使用 Keras 庫(kù)實(shí)現(xiàn)并訓(xùn)練了一個(gè)簡(jiǎn)單的 CNN,接下來(lái)我們要:

使用 TensorFlow 的 tf.keras 實(shí)現(xiàn)相同的網(wǎng)絡(luò);

在 Keras 模型中包含一個(gè) TensorFlow 激活函數(shù),這個(gè)函數(shù)不是使用 Keras 實(shí)現(xiàn)的。

首先,打開(kāi) minivggnettf.py 文件,我們將實(shí)現(xiàn) TensorFlow 版本的 MiniVGGNet:

請(qǐng)注意,導(dǎo)入部分只有一行。tf.keras 子模塊包含了我們可以直接調(diào)用的所有 Keras 函數(shù)。

我想強(qiáng)調(diào)一下 Lambda 層——它們用來(lái)插入自定義激活函數(shù) CRELU(Concatenated ReLU)。

Keras 并沒(méi)有實(shí)現(xiàn) CRELU,但 TensorFlow 實(shí)現(xiàn)了——通過(guò)使用 TensorFlow 和 tf.keras,我們可以使用一行代碼將 CRELU 添加到 Keras 模型中。

下一步是編寫(xiě) TensorFlow + Keras 驅(qū)動(dòng)腳本來(lái)訓(xùn)練 MiniVGGNetTF。

打開(kāi) train_network_tf.py 并插入以下代碼:

然后是解析命令行參數(shù)。

接著像之前一樣加載數(shù)據(jù)集。

其余的行都一樣——提取訓(xùn)練 / 測(cè)試分割和編碼標(biāo)簽。

現(xiàn)在讓我們開(kāi)始訓(xùn)練模型:

訓(xùn)練過(guò)程幾乎是一樣的。我們已經(jīng)實(shí)現(xiàn)了完全相同的訓(xùn)練流程,只是這次使用的是 tf.keras。

打開(kāi)一個(gè)終端并執(zhí)行以下命令:

訓(xùn)練完成后,你將獲得類(lèi)似于下面這樣的結(jié)果:

通過(guò)使用 CRELU 替換 RELU 激活函數(shù),我們獲得了 76%的準(zhǔn)確率。不過(guò),這 1%的提升可能是因?yàn)榫W(wǎng)絡(luò)權(quán)重的隨機(jī)初始化,需要通過(guò)進(jìn)一步的交叉驗(yàn)證實(shí)驗(yàn)來(lái)證明這種準(zhǔn)確率的提升確實(shí)是因?yàn)?CRELU。

不管怎樣,原始準(zhǔn)確率并不是本節(jié)的重點(diǎn)。我們需要關(guān)注的是如何在 Keras 模型內(nèi)部使用 TensorFlow 激活函數(shù)替換標(biāo)準(zhǔn)的 Keras 激活函數(shù)!

你也可以使用自己的自定義激活函數(shù)、損失 / 成本函數(shù)或?qū)印?/p>

總結(jié)

在這篇文章中,我們討論了 Keras 和 TensorFlow 相關(guān)的問(wèn)題,包括:

我應(yīng)該在項(xiàng)目中使用 Keras 還是 TensorFlow?

TensorFlow 和 Keras 哪個(gè)更好?

我應(yīng)該花時(shí)間研究 TensorFlow 還是 Keras?

最后我們發(fā)現(xiàn),在 Keras 和 TensorFlow 之間做出選擇變得不那么重要。

因?yàn)?Keras 庫(kù)已經(jīng)通過(guò) tf.keras 模塊直接集成到 TensorFlow 中了。

聲明:本文內(nèi)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 深度學(xué)習(xí)
    +關(guān)注

    關(guān)注

    73

    文章

    5549

    瀏覽量

    122360
  • tensorflow
    +關(guān)注

    關(guān)注

    13

    文章

    330

    瀏覽量

    60966

原文標(biāo)題:一文看懂Keras和TensorFlow到底哪家強(qiáng)

文章出處:【微信號(hào):AI_era,微信公眾號(hào):新智元】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏
  • quzhong1

評(píng)論

相關(guān)推薦
熱點(diǎn)推薦

通信電源柜跟通信電源有什么不同?哪個(gè)更好用

生活中很多地方都有用到通信電源以及通信電源柜的地方,那么,這兩者之間有什么區(qū)別之處嗎?通信電源柜跟通信電源有什么不同?哪個(gè)更好用?很多人都會(huì)覺(jué)得,一樣都是電源產(chǎn)品,不管是這么樣選擇使用都是非常適合
發(fā)表于 11-21 18:29

大家來(lái)討論——keil iar st軟件,哪個(gè)更好用

我用過(guò)keiliar這兩個(gè)軟件,總體上來(lái)說(shuō)kei比較熟,覺(jué)得l比較好用,大家說(shuō)說(shuō)你們用過(guò)哪個(gè)呢?哪個(gè)更好用?
發(fā)表于 03-26 11:11

Altium、PADS、ORCAD哪個(gè)更好用?

,基本用ORCAD編輯原理圖)和PCB編輯太不友好了,不過(guò)在規(guī)則設(shè)置這方面做的很好,使用過(guò)程中沒(méi)有出軟件問(wèn)題;ORCAD沒(méi)怎么使用過(guò),具體不知道情況不了解。這三款軟件你們使用過(guò)程中哪個(gè)更好用?
發(fā)表于 11-02 09:14

RK3399Pro入門(mén)教程(4)從Tensorflow.Keras到RKNN

tensorflow還一直保留著他們自己的pb模型格式文件(配置+權(quán)重)。我們直接從Tensorflow官網(wǎng)首頁(yè)的教程Mnist入手,大概簡(jiǎn)單說(shuō)明下如何從Tensorflow.Keras搭建訓(xùn)練模型,然后
發(fā)表于 03-31 16:23

keras順序模型與函數(shù)式模型

mnist的代碼如下: 方式1:采用model.add 一層層添加 import tensorflow as tf import tensorflow.keras as keras ? print
發(fā)表于 08-18 06:01

keras可視化介紹

, Tensorflow, Pytorch, Keras, Caffe等),網(wǎng)頁(yè)地址: https://netron.app/ 將上一講生成的keras_mnist.h5導(dǎo)入,得到模型結(jié)構(gòu),如下圖: 2
發(fā)表于 08-18 07:53

小米miui和魅族flyme,哪個(gè)更好用?

原生安卓系統(tǒng)雖然已經(jīng)出到了7.0,但是由于國(guó)內(nèi)定制系統(tǒng),不能接受推送的關(guān)系,安卓系統(tǒng)大多都在5.0和6.0.在國(guó)內(nèi)的安卓定制系統(tǒng)里面,小米的miui,魅族的flyme還有華為的emui是最有名的三個(gè)定制系統(tǒng),下面我們重點(diǎn)討論一下小米的miui和魅族的flyme哪個(gè)更好用
發(fā)表于 02-15 09:55 ?1944次閱讀

KerasTensorFlow究竟哪個(gè)會(huì)更好?

Keras 依然作為一個(gè)庫(kù),與 TensorFlow 分開(kāi),進(jìn)行獨(dú)立操作,所以仍存在未來(lái)兩者會(huì)分開(kāi)的可能性;然而,我們知道 Google 官方同時(shí)支持 KerasTensorFlow
的頭像 發(fā)表于 10-11 10:05 ?2.2w次閱讀

TensorFlow 2.0中關(guān)于Keras的一些新功能和重大變化

Keras有以下幾大關(guān)鍵優(yōu)點(diǎn):用戶(hù)友好、模塊化、可組合、容易擴(kuò)展,既適合新手,也適合專(zhuān)家。這些優(yōu)點(diǎn)加起來(lái)??梢宰寣W(xué)習(xí)、研究、開(kāi)發(fā)、部署的工作流更加容易,效率更高。通過(guò)將 Keras 構(gòu)建為
的頭像 發(fā)表于 12-12 09:55 ?8728次閱讀
<b class='flag-5'>TensorFlow</b> 2.0中關(guān)于<b class='flag-5'>Keras</b>的一些新功能和重大變化

深入了解TensorFlow隨附的此版Keras將能為您實(shí)現(xiàn)哪些功能

也是 TensorFlow 集成 Keras 的主要設(shè)計(jì)目標(biāo),即讓用戶(hù)能夠選擇對(duì)自己更有用處的 Keras 組件,而無(wú)需采用整個(gè)框架。
的頭像 發(fā)表于 12-18 13:38 ?2973次閱讀

最新tf.keras指南,TensorFlow官方出品

TensorFlow 1.x以靜態(tài)圖為主,網(wǎng)上主流的TF代碼編寫(xiě)主要是面向過(guò)程的(函數(shù)為主),在引入tf.keras之后,TensorFlow官方就開(kāi)始推薦tf.keras里各種面向?qū)?/div>
的頭像 發(fā)表于 03-29 11:28 ?4464次閱讀

基于TensorFlowKeras的圖像識(shí)別

TensorFlowKeras最常見(jiàn)的用途之一是圖像識(shí)別/分類(lèi)。通過(guò)本文,您將了解如何使用Keras達(dá)到這一目的。定義如果您不了解圖像識(shí)別的基本概念,將很難完全理解本文的內(nèi)容。因此在正文開(kāi)始之前
的頭像 發(fā)表于 01-13 08:27 ?1065次閱讀
基于<b class='flag-5'>TensorFlow</b>和<b class='flag-5'>Keras</b>的圖像識(shí)別

keras的模塊結(jié)構(gòu)介紹

Keras是一個(gè)高級(jí)深度學(xué)習(xí)庫(kù),它提供了一個(gè)易于使用的接口來(lái)構(gòu)建和訓(xùn)練深度學(xué)習(xí)模型。Keras是基于TensorFlow、Theano或CNTK等底層計(jì)算庫(kù)構(gòu)建的。以下是Keras的模
的頭像 發(fā)表于 07-05 09:35 ?582次閱讀

keras模型轉(zhuǎn)tensorflow session

在這篇文章中,我們將討論如何將Keras模型轉(zhuǎn)換為TensorFlow session。 KerasTensorFlow簡(jiǎn)介 Keras
的頭像 發(fā)表于 07-05 09:36 ?750次閱讀

tensorflow和pytorch哪個(gè)

tensorflow和pytorch都是非常不錯(cuò)的強(qiáng)大的框架,TensorFlow還是PyTorch哪個(gè)更好取決于您的具體需求,以下是關(guān)于這兩個(gè)框架的一些關(guān)鍵點(diǎn):
的頭像 發(fā)表于 07-05 09:42 ?1021次閱讀

電子發(fā)燒友

中國(guó)電子工程師最喜歡的網(wǎng)站

  • 2931785位工程師會(huì)員交流學(xué)習(xí)
  • 獲取您個(gè)性化的科技前沿技術(shù)信息
  • 參加活動(dòng)獲取豐厚的禮品