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

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

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

到底該選擇TensorFlow還是Keras深度學(xué)習(xí)框架選型指南

zhKF_jqr_AI ? 來源:未知 ? 作者:李倩 ? 2018-03-26 11:11 ? 次閱讀

到底該選擇TensorFlow還是Keras,是深度學(xué)習(xí)初學(xué)者經(jīng)常糾結(jié)的一個(gè)問題。數(shù)據(jù)科學(xué)家Aakash Nain比較了TensorFlow和Keras,希望有助于選擇合適的框架。

深度學(xué)習(xí)庫/框架流行度(來源:Google)

深度學(xué)習(xí)無處不在,大量的深度學(xué)習(xí)庫讓初學(xué)者無所適從。這篇文章重點(diǎn)關(guān)注TensorlFlow和Keras兩者之間的選擇。TensorFlow是最著名的用于深度學(xué)習(xí)生產(chǎn)環(huán)境的框架。它有一個(gè)非常大非常棒的社區(qū)。然而,TensorFlow的使用不那么簡(jiǎn)單。另一方面,Keras是在TensorFlow基礎(chǔ)上構(gòu)建的高層API,比TF(TensorFlow的縮寫)要易用很多。

既然Keras基于TensorFlow,那么兩者有何區(qū)別?既然Keras對(duì)用戶更友好,為什么我還需要使用TF來構(gòu)建深度學(xué)習(xí)模型呢?下面一些內(nèi)容將幫助你做出選擇。

快速開發(fā)原型

如果你想快速創(chuàng)建、測(cè)試一個(gè)神經(jīng)網(wǎng)絡(luò),寫盡可能少的代碼,那么選擇Keras?;ú涣硕嗌俜昼姡憔湍苡肒eras創(chuàng)建簡(jiǎn)單或很復(fù)雜的神經(jīng)網(wǎng)絡(luò)。Model和SequentialAPI如此強(qiáng)大,基本上能做到你可能想要做的任何事情。讓我們看一個(gè)例子吧:

model = Sequential()

model.add(Dense(32, activation='relu', input_dim=100))

model.add(Dense(1, activation='sigmoid'))

model.compile(optimizer='rmsprop',

loss='binary_crossentropy',

metrics=['accuracy'])

# 生成虛假數(shù)據(jù)

import numpy as np

data = np.random.random((1000, 100))

labels = np.random.randint(2, size=(1000, 1))

# 訓(xùn)練模型,迭代數(shù)據(jù)(每個(gè)batch包含32個(gè)樣本)

model.fit(data, labels, epochs=10, batch_size=32)

收工??!就是這么容易!

沒有人不喜歡Pythonic??!

Keras的開發(fā)設(shè)計(jì)注重用戶友好,因而某種意義上它更加pythonic。模塊化是Keras的另一個(gè)優(yōu)雅的設(shè)計(jì)指導(dǎo)原則。Keras中的任何東西都可以表示為模塊,用戶可以根據(jù)需要將其進(jìn)一步組合。

彈性

有時(shí)候你不想用現(xiàn)成的東西,想要自己定義一些東西(比如,損失函數(shù)、測(cè)度、網(wǎng)絡(luò)層,等等)。

盡管Keras 2的設(shè)計(jì)讓你可以實(shí)現(xiàn)幾乎所有你想要的東西,但是我們都知道底層的庫提供了更多彈性。TF同樣如此。相比Keras,TF允許你進(jìn)行更多調(diào)整。

功能性

盡管Keras提供了創(chuàng)建深度學(xué)習(xí)模型一般所需的所有功能性,它還是不如TF提供得多。相比Keras,TensorFlow提供更多高級(jí)操作。當(dāng)你從事研究或開發(fā)特殊種類的深度學(xué)習(xí)模型時(shí),這一點(diǎn)是十分便利的。下面是一些例子:

線程和隊(duì)列

隊(duì)列是一個(gè)強(qiáng)大的機(jī)制,可以異步地計(jì)算圖中的張量。類似地,你可以使用多個(gè)線程執(zhí)行同一會(huì)話,通過并行運(yùn)算加速操作。下面是一個(gè)在TensorFlow中使用隊(duì)列和線程的簡(jiǎn)單例子:

# 創(chuàng)建圖,等等。

init_op = tf.global_variables_initializer()

# 創(chuàng)建會(huì)話,以運(yùn)行圖中的操作。

sess = tf.Session()

# 初始化變量(比如epoch計(jì)數(shù)器)

sess.run(init_op)

# 開始輸入入隊(duì)線程。

coord = tf.train.Coordinator()

threads = tf.train.start_queue_runners(sess=sess, coord=coord)

try:

whilenot coord.should_stop():

# 運(yùn)行訓(xùn)練步驟,等等

sess.run(train_op)

except tf.errors.OutOfRangeError:

print('訓(xùn)練完畢——達(dá)到epoch限制')

finally:

# 結(jié)束時(shí),請(qǐng)求停止線程

coord.request_stop()

# 等待線程終止。

coord.join(threads)

sess.close()

調(diào)試器

TensorFlow有一個(gè)專門的調(diào)試器,為內(nèi)部結(jié)構(gòu)和正在運(yùn)行的TensorFlow圖的狀態(tài)提供了可見性。從調(diào)試器獲得的洞見可以加速調(diào)試訓(xùn)練和推斷階段的多種bug。

TensorFlow調(diào)試器截屏(來源:TensorFlow文檔)

控制

就我的經(jīng)驗(yàn)而言,你對(duì)神經(jīng)網(wǎng)絡(luò)的控制越多,你對(duì)神經(jīng)網(wǎng)絡(luò)在做什么的理解就更深。TF讓你可以更多地控制神經(jīng)網(wǎng)絡(luò)。在TF中對(duì)權(quán)重和梯度進(jìn)行操作有如神助。

例如,假設(shè)你的模型有三個(gè)變量,比如w、b、step,你可以選擇變量step是否可以訓(xùn)練。你只需寫一行代碼就可以辦到:

step = tf.Variable(1, trainable=False, dtype=tf.int32)

在訓(xùn)練階段,梯度可以提供大量信息。你想控制梯度?當(dāng)然可以,看下面的例子:

# 創(chuàng)建優(yōu)化器

optimizer = GradientDescentOptimizer(learning_rate=0.1)

# 為一組變量計(jì)算梯度

grads_and_vars = opt.compute_gradients(loss, )

# grads_and_vars是一個(gè)元組的列表(梯度, 變量)。

# 你可以隨意對(duì)梯度部分進(jìn)行操作,比如,每項(xiàng)減1.

subtracted_grads_and_vars = [(gv[0] - 1.0, gv[1]) for gv in grads_and_vars]

# 請(qǐng)求優(yōu)化器應(yīng)用減一后的梯度。

optimizer.apply_gradients(subtracted_grads_and_vars)

(以上代碼樣例取自 CS 20SI: TensorFlow for Deep Learning Research)

結(jié)論(TL;DR)

除非你正從事研究性質(zhì)的工作或開發(fā)某種特殊種類的神經(jīng)網(wǎng)絡(luò),選擇Keras(相信我,我是一個(gè)Keras黨?。。┦褂肒eras快速構(gòu)建非常復(fù)雜的模型仍然超容易。

如果你想要更精細(xì)地控制你的網(wǎng)絡(luò),或者想要仔細(xì)查看你的網(wǎng)絡(luò)發(fā)生了什么,那么TF是正確的選擇(不過有時(shí)TF的語法會(huì)讓你做噩夢(mèng)的)。不過,現(xiàn)在TF已經(jīng)集成了Keras,所以更明智的做法是使用tf.contrib.Keras創(chuàng)建你的網(wǎng)絡(luò),然后根據(jù)需要在你的網(wǎng)絡(luò)中插入純TensorFlow。簡(jiǎn)而言之,

tf.contrib.keras+tf=你所需要的一切

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

原文標(biāo)題:TensorFlow還是Keras?深度學(xué)習(xí)框架選型指南

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

收藏 人收藏

    評(píng)論

    相關(guān)推薦

    Nanopi深度學(xué)習(xí)之路(1)深度學(xué)習(xí)框架分析

    最耳熟能詳?shù)木褪?b class='flag-5'>TensorFlow,但再稍有了解的,會(huì)知道TensorFlow太過于底層,實(shí)現(xiàn)深度學(xué)習(xí)的過程復(fù)雜,但其框架是相當(dāng)好的,
    發(fā)表于 06-04 22:32

    Nanopi深度學(xué)習(xí)之路(4)深度學(xué)習(xí)框架安裝前的依賴項(xiàng)安裝

    “Using TensorFlow backend”說明使用的是TensorFlow后端,使用keras必須安裝TensorFlow,Theano,或者 CNTK之一,后端的意思是使用
    發(fā)表于 06-08 19:54

    【NanoPi K1 Plus試用體驗(yàn)】搭建深度學(xué)習(xí)框架

    近幾年各種深度學(xué)習(xí)框架涌現(xiàn),大家可能很難從眾多的深度學(xué)習(xí)框架
    發(fā)表于 07-17 11:40

    深度學(xué)習(xí)框架TensorFlow&TensorFlow-GPU詳解

    TensorFlow&TensorFlow-GPU:深度學(xué)習(xí)框架TensorFlow&
    發(fā)表于 12-25 17:21

    迅為RK3399開發(fā)板人工智能深度學(xué)習(xí)框架

    `迅為率先在RK3399 開發(fā)板上支持了Docker、TensorFlow目標(biāo)檢測(cè)API、OpenCV、Keras、scikit-learn、pytorch和Python等,組成了人工智能深度
    發(fā)表于 05-21 17:28

    TensorFlow實(shí)戰(zhàn)之深度學(xué)習(xí)框架的對(duì)比

    的熱潮持續(xù)高漲,各種開源深度學(xué)習(xí)框架也層出不窮,其中包括TensorFlow、Caffe、Keras、CNTK、Torch7、MXNet、L
    發(fā)表于 11-16 11:52 ?4502次閱讀
    <b class='flag-5'>TensorFlow</b>實(shí)戰(zhàn)之<b class='flag-5'>深度</b><b class='flag-5'>學(xué)習(xí)</b><b class='flag-5'>框架</b>的對(duì)比

    深度學(xué)習(xí)框架Keras代碼解析

    總體來講keras這個(gè)深度學(xué)習(xí)框架真的很“簡(jiǎn)易”,它體現(xiàn)在可參考的文檔寫的比較詳細(xì),不像caffe,裝完以后都得靠技術(shù)博客,keras有它自
    發(fā)表于 12-15 08:22 ?4478次閱讀

    PyTorch1.8和Tensorflow2.5如何選擇?

    ,許多研究者面對(duì)大量的學(xué)習(xí)框架不知如何選擇? Tensorflow / Keras 和 PyT
    的頭像 發(fā)表于 07-09 10:33 ?1441次閱讀

    八種主流深度學(xué)習(xí)框架的介紹

    導(dǎo)讀:近幾年隨著深度學(xué)習(xí)算法的發(fā)展,出現(xiàn)了許多深度學(xué)習(xí)框架。這些框架各有所長(zhǎng),各具特色。常用的開
    的頭像 發(fā)表于 04-26 18:45 ?8049次閱讀

    深度學(xué)習(xí)框架PyTorch和TensorFlow如何選擇

    在 AI 技術(shù)興起后,深度學(xué)習(xí)框架 PyTorch 和 TensorFlow 兩大陣營(yíng)似乎也爆發(fā)了類似的「戰(zhàn)爭(zhēng)」。這兩個(gè)陣營(yíng)背后都有大量的支持者,并且他們都有充足的理由來說明為什么他們
    發(fā)表于 02-02 10:28 ?972次閱讀

    深度學(xué)習(xí)框架tensorflow介紹

    深度學(xué)習(xí)框架tensorflow介紹 深度學(xué)習(xí)框架
    的頭像 發(fā)表于 08-17 16:11 ?2259次閱讀

    深度學(xué)習(xí)算法的選擇建議

    常重要的。本文將提供一些選擇建議,以及如何決定使用哪種框架和算法。 首先,選擇框架。目前,深度學(xué)習(xí)
    的頭像 發(fā)表于 08-17 16:11 ?551次閱讀

    TensorFlow與PyTorch深度學(xué)習(xí)框架的比較與選擇

    學(xué)習(xí)框架,它們各自擁有獨(dú)特的特點(diǎn)和優(yōu)勢(shì)。本文將從背景介紹、核心特性、操作步驟、性能對(duì)比以及選擇指南等方面對(duì)TensorFlow和PyTorc
    的頭像 發(fā)表于 07-02 14:04 ?584次閱讀

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

    支持多種深度學(xué)習(xí)框架,如TensorFlow、Theano和CNTK。 安裝 要使用Keras,首先需要安裝它。
    的頭像 發(fā)表于 07-05 09:35 ?191次閱讀

    keras模型轉(zhuǎn)tensorflow session

    和訓(xùn)練深度學(xué)習(xí)模型。Keras是基于TensorFlow、Theano或CNTK等底層計(jì)算框架構(gòu)建的。T
    的頭像 發(fā)表于 07-05 09:36 ?315次閱讀