1. 2019年十大最佳深度學習框架
作者 | Python語音識別
來源 | 濤哥聊Python
雖然我們大多數人都驚嘆為什麼DL這么好?在使用大量數據進行訓練時,它在准確性方面非常出色。近幾年隨著深度學習演算法的發展,出現了很多深度學習的框架,這些框架各有所長,各具特色。下面將為大家介紹2019年最受歡迎的十大深度學習框架。
TensorFlow谷歌的Tensorflow可以說是當今最受歡迎的深度學習框架。Gmail,Uber,Airbnb,Nvidia以及其他許多知名品牌都在使用。TF是目前深度學習的主流框架,Tensorflow主要特性:
TensorFlow支持python、JavaScript、C ++、Java和Go,C#和Julia等多種編程語言。 TF不僅擁有強大的計算集群,還可以在iOS和Android等移動平台上運行模型。 TF編程入門難度較大。初學者需要仔細考慮神經網路的架構,正確評估輸入和輸出數據的維度和數量。 TF使用靜態計算圖進行操作 。也就是說我們需要先定義圖形,然後運行計算,如果我們需要對架構進行更改,我們會重新訓練模型。選擇這樣的方法是為了提高效率,但是許多現代神經網路工具能夠在學習過程中考慮改進而不會顯著降低學習速度。在這方面,TensorFlow的主要競爭對手是PyTorch 。TensorFlow優點:
它非常適合創建和試驗深度學習架構,便於數據集成,如輸入圖形,SQL表和圖像。 它得到谷歌的支持,這就說明該模型短期內不會被拋棄,因此值得投入時間來學習它。 PyTorchTensorflow之後用於深度學習的主要框架是PyTorch。PyTorch框架是Facebook開發的,已被Twitter和Salesforce等公司使用。
PyTorch基本特性:
與TensorFlow不同,PyTorch庫使用動態更新的圖形進行操作 。這意味著它可以在流程中更改體系結構。 在PyTorch中,您可以使用標准調試器 ,例如pdb或PyCharm。PyTorch優點:
訓練神經網路的過程簡單明了。同時,PyTorch支持數據並行和分布式學習模型,並且還包含許多預先訓練的模型。 PyTorch更適合小型項目和原型設計。 SonnetSonnet深度學習框架是建立在TensorFlow的基礎之上。它是DeepMind用於創建具有復雜架構的神經網路。
Sonnet基本特性:
面向對象的庫,在開發神經網路(NN)或其他機器學習(ML)演算法時更加抽象。 Sonnet的想法是構造對應於神經網路的特定部分的主要Python對象。此外,這些對象獨立地連接到計算TensorFlow圖。分離創建對象並將其與圖形相關聯的過程簡化了高級體系結構的設計。Sonnet優點:
Sonnet的主要優點是可以使用它來重現DeepMind論文中展示的研究,比Keras更容易,因為DeepMind論文模型就是使用Sonnet搭建的。 KerasKeras是一個機器學習框架,如果您擁有大量數據和/或你想快速入門深度學習,那麼Keras將非常適合學習。Keras是TensorFlow高級集成APi,可以非常方便的和TensorFlow進行融合。這是我強烈推薦學習的一個庫。
Keras基本特性:
除了Tensorflow之外,Keras還是其他流行的庫(如Theano和CNTK)的高級API。 在Keras中更容易創建大規模的深度學習模型,但Keras框架環境配置比其他底層框架要復雜一些。Keras優點:
對於剛剛入門的人來說,Keras是最好的深度學習框架。它是學習和原型化簡單概念的理想選擇,可以理解各種模型和學習過程的本質。 Keras是一個簡潔的API。 可以快速幫助您創建應用程序。 Keras中代碼更加可讀和簡潔。 Keras模型序列化/反序列化API,回調和使用Python生成器的數據流非常成熟。順便說一下TensorFlow和Keras的對比:
PS:Tensorflow處於底層框架:這和MXNet,Theano和PyTorch等框架一樣。包括實現諸如廣義矩陣 - 矩陣乘法和諸如卷積運算的神經網路原語之類的數學運算。
Keras處於高度集成框架。雖然更容易創建模型,但是面對復雜的網路結構時可能不如TensorFlow。
MXNetMXNet是一種高度可擴展的深度學習工具,可用於各種設備。雖然與TensorFlow相比,它似乎沒有被廣泛使用,但MXNet的增長可能會因為成為一個Apache項目而得到提升。
MXNet基本特性:
該框架支持多種語言,如C ++,Python,R,Julia,JavaScript,Scala,Go,甚至Perl。 可以在多個GPU和許多機器上非常有效地並行計算。MXNet優點:
支持多個GPU(具有優化的計算和快速上下文切換) 清晰且易於維護的代碼(Python,R,Scala和其他API) 快速解決問題的能力(對於像我這樣的深度學習新手至關重要)雖然它不像TF那麼受歡迎,但MXNet具有詳細的文檔並且易於使用,能夠在命令式和符號式編程風格之間進行選擇,使其成為初學者和經驗豐富的工程師的理想選擇。
GLUONGluon是一個更好的深度學習框架,可以用來創建復雜的模型。GLUON基本特性:
Gluon的特殊性是具有一個靈活的界面,簡化了原型設計,構建和培訓深度學習模型,而不會犧牲學習速度。 Gluon基於MXNet,提供簡單的API,簡化深度學習模型的創建。 與PyTorch類似,Gluon框架支持使用動態圖表 ,將其與高性能MXNet相結合。從這個角度來看,Gluon看起來像是分布式計算的Keras非常有趣的替代品。GLUON優點:
在Gluon中,您可以使用簡單,清晰和簡潔的代碼定義神經網路。 它將訓練演算法和神經網路模型結合在一起,從而在不犧牲性能的情況下提供開發過程的靈活性。 Gluon可以定義動態的神經網路模型,這意味著它們可以動態構建,使用任何結構,並使用Python的任何本機控制流。 SWIFT當你聽到Swift時,您可能會考慮iOS或MacOS的應用程序開發。但是如果你正在學習深度學習,那麼你一定聽說過Swens for Tensorflow。通過直接與通用編程語言集成,Swift for TensorFlow可以以前所未有的方式表達更強大的演算法。SWIFT基本特性:
可以輕松獲得可微分的自定義數據結構。 下一代API 。通過實踐和研究獲得的新API更易於使用且更強大。 在TensorFlow的基礎上 ,Swift API為您提供對所有底層TensorFlow運算符的直接調用。 基於Jupyter、LLDB或者Swift in Colab的編程工具提高了您的工作效率。SWIFT優點:
如果動態語言不適合您的任務,那麼這將是一個很好的選擇。當你訓練運行了幾個小時,然後你的程序遇到類型錯誤,那麼使用Swift,一種靜態類型語言。您將看到代碼錯誤的地方。 Chainer直到CMU的DyNet和Facebook的PyTorch出現之前,Chainer是動態計算圖或網路的領先神經網路框架,它允許輸入數據長度不一致。chainer基本特性:
Chainer代碼是在Numpy和CuPy庫的基礎之上用純Python編寫的, Chainer是第一個使用動態架構模型的框架。Chainer優點:
通過自己的基準測試,Chainer明顯比其他面向Python的框架更快,TensorFlow是包含MxNet和CNTK的測試組中最慢的。 比TensorFlow更好的GPU和GPU數據中心性能。最近Chainer成為GPU數據中心性能的全球冠軍。 DL4J那些使用Java或Scala的人應該注意DL4J(Deep Learning for Java的簡稱)。DL4J的基本特性:
DL4J中的神經網路訓練通過簇的迭代並行計算。 該過程由Hadoop和Spark架構支持。 使用Java允許您在Android設備的程序開發周期中使用。DL4J優點:
如果您正在尋找一個良好的Java深度學習框架,這會是一個非常好的平台。 ONNXONNX項目誕生於微軟和Facebook,旨在尋找深度學習模型呈現的開放格式。ONNX簡化了在人工智慧的不同工作方式之間傳遞模型的過程。因此ONNX具有各種深度學習框架的優點。
ONNX基本特性:
ONNX使模型能夠在一個框架中進行訓練並轉移到另一個框架中進行推理。ONNX模型目前在Caffe2,Microsoft Cognitive Toolkit,MXNet和PyTorch中得到支持,並且還有許多其他常見框架和庫的連接器。ONNX優點:
對於PyTorch開發人員來說,ONNX是一個好的選擇。但是對於那些喜歡TensorFlow的人來說,Keras等可能好一點。 總結那麼您應該使用哪種深度學習框架?下面是幾點建議:
如果你剛剛開始學習,那麼最好的選擇是Keras 。 出於研究目的,請選擇PyTorch 。 對於生產,您需要關注環境。因此對於Google Cloud,最好的選擇是TensorFlow ,適用於AWS - MXNet和Gluon 。 Android開發人員應該關注D4LJ ,對於iOS來說, Core ML會破壞類似的任務范圍。 最後, ONNX將幫助解決不同框架之間的交互問題。2. 從零開始用Python構建神經網路
從零開始用Python構建神經網路
動機:為了更加深入的理解深度學習,我們將使用 python 語言從頭搭建一個神經網路,而不是使用像 Tensorflow 那樣的封裝好的框架。我認為理解神經網路的內部工作原理,對數據科學家來說至關重要。
這篇文章的內容是我的所學,希望也能對你有所幫助。
神經網路是什麼?
介紹神經網路的文章大多數都會將它和大腦進行類比。如果你沒有深入研究過大腦與神經網路的類比,那麼將神經網路解釋為一種將給定輸入映射為期望輸出的數學關系會更容易理解。
神經網路包括以下組成部分
? 一個輸入層,x
? 任意數量的隱藏層
? 一個輸出層,?
? 每層之間有一組權值和偏置,W and b
? 為隱藏層選擇一種激活函數,σ。在教程中我們使用 Sigmoid 激活函數
下圖展示了 2 層神經網路的結構(注意:我們在計算網路層數時通常排除輸入層)
2 層神經網路的結構
用 Python 可以很容易的構建神經網路類
訓練神經網路
這個網路的輸出 ? 為:
你可能會注意到,在上面的等式中,輸出 ? 是 W 和 b 函數。
因此 W 和 b 的值影響預測的准確率. 所以根據輸入數據對 W 和 b 調優的過程就被成為訓練神經網路。
每步訓練迭代包含以下兩個部分:
? 計算預測結果 ?,這一步稱為前向傳播
? 更新 W 和 b,,這一步成為反向傳播
下面的順序圖展示了這個過程:
前向傳播
正如我們在上圖中看到的,前向傳播只是簡單的計算。對於一個基本的 2 層網路來說,它的輸出是這樣的:
我們在 NeuralNetwork 類中增加一個計算前向傳播的函數。為了簡單起見我們假設偏置 b 為0:
但是我們還需要一個方法來評估預測結果的好壞(即預測值和真實值的誤差)。這就要用到損失函數。
損失函數
常用的損失函數有很多種,根據模型的需求來選擇。在本教程中,我們使用誤差平方和作為損失函數。
誤差平方和是求每個預測值和真實值之間的誤差再求和,這個誤差是他們的差值求平方以便我們觀察誤差的絕對值。
訓練的目標是找到一組 W 和 b,使得損失函數最好小,也即預測值和真實值之間的距離最小。
反向傳播
我們已經度量出了預測的誤差(損失),現在需要找到一種方法來傳播誤差,並以此更新權值和偏置。
為了知道如何適當的調整權值和偏置,我們需要知道損失函數對權值 W 和偏置 b 的導數。
回想微積分中的概念,函數的導數就是函數的斜率。
梯度下降法
如果我們已經求出了導數,我們就可以通過增加或減少導數值來更新權值 W 和偏置 b(參考上圖)。這種方式被稱為梯度下降法。
但是我們不能直接計算損失函數對權值和偏置的導數,因為在損失函數的等式中並沒有顯式的包含他們。因此,我們需要運用鏈式求導發在來幫助計算導數。
鏈式法則用於計算損失函數對 W 和 b 的導數。注意,為了簡單起見。我們只展示了假設網路只有 1 層的偏導數。
這雖然很簡陋,但是我們依然能得到想要的結果—損失函數對權值 W 的導數(斜率),因此我們可以相應的調整權值。
現在我們將反向傳播演算法的函數添加到 Python 代碼中
為了更深入的理解微積分原理和反向傳播中的鏈式求導法則,我強烈推薦 3Blue1Brown 的如下教程:
Youtube:https://youtu.be/tIeHLnjs5U8
整合並完成一個實例
既然我們已經有了包括前向傳播和反向傳播的完整 Python 代碼,那麼就將其應用到一個例子上看看它是如何工作的吧。
神經網路可以通過學習得到函數的權重。而我們僅靠觀察是不太可能得到函數的權重的。
讓我們訓練神經網路進行 1500 次迭代,看看會發生什麼。 注意觀察下面每次迭代的損失函數,我們可以清楚地看到損失函數單調遞減到最小值。這與我們之前介紹的梯度下降法一致。
讓我們看看經過 1500 次迭代後的神經網路的最終預測結果:
經過 1500 次迭代訓練後的預測結果
我們成功了!我們應用前向和方向傳播演算法成功的訓練了神經網路並且預測結果收斂於真實值。
注意預測值和真實值之間存在細微的誤差是允許的。這樣可以防止模型過擬合並且使得神經網路對於未知數據有著更強的泛化能力。
下一步是什麼?
幸運的是我們的學習之旅還沒有結束,仍然有很多關於神經網路和深度學習的內容需要學習。例如:
? 除了 Sigmoid 以外,還可以用哪些激活函數
? 在訓練網路的時候應用學習率
? 在面對圖像分類任務的時候使用卷積神經網路
我很快會寫更多關於這個主題的內容,敬請期待!
最後的想法
我自己也從零開始寫了很多神經網路的代碼
雖然可以使用諸如 Tensorflow 和 Keras 這樣的深度學習框架方便的搭建深層網路而不需要完全理解其內部工作原理。但是我覺得對於有追求的數據科學家來說,理解內部原理是非常有益的。
這種練習對我自己來說已成成為重要的時間投入,希望也能對你有所幫助
3. 一文看懂四種基本的神經網路架構
原文鏈接:
http://blackblog.tech/2018/02/23/Eight-Neural-Network/
更多干貨就在我的個人博客 http://blackblog.tech 歡迎關注
剛剛入門神經網路,往往會對眾多的神經網路架構感到困惑,神經網路看起來復雜多樣,但是這么多架構無非也就是三類,前饋神經網路,循環網路,對稱連接網路,本文將介紹四種常見的神經網路,分別是CNN,RNN,DBN,GAN。通過這四種基本的神經網路架構,我們來對神經網路進行一定的了解。
神經網路是機器學習中的一種模型,是一種模仿動物神經網路行為特徵,進行分布式並行信息處理的演算法數學模型。這種網路依靠系統的復雜程度,通過調整內部大量節點之間相互連接的關系,從而達到處理信息的目的。
一般來說,神經網路的架構可以分為三類:
前饋神經網路:
這是實際應用中最常見的神經網路類型。第一層是輸入,最後一層是輸出。如果有多個隱藏層,我們稱之為「深度」神經網路。他們計算出一系列改變樣本相似性的變換。各層神經元的活動是前一層活動的非線性函數。
循環網路:
循環網路在他們的連接圖中定向了循環,這意味著你可以按照箭頭回到你開始的地方。他們可以有復雜的動態,使其很難訓練。他們更具有生物真實性。
循環網路的目的使用來處理序列數據。在傳統的神經網路模型中,是從輸入層到隱含層再到輸出層,層與層之間是全連接的,每層之間的節點是無連接的。但是這種普通的神經網路對於很多問題卻無能無力。例如,你要預測句子的下一個單詞是什麼,一般需要用到前面的單詞,因為一個句子中前後單詞並不是獨立的。
循環神經網路,即一個序列當前的輸出與前面的輸出也有關。具體的表現形式為網路會對前面的信息進行記憶並應用於當前輸出的計算中,即隱藏層之間的節點不再無連接而是有連接的,並且隱藏層的輸入不僅包括輸入層的輸出還包括上一時刻隱藏層的輸出。
對稱連接網路:
對稱連接網路有點像循環網路,但是單元之間的連接是對稱的(它們在兩個方向上權重相同)。比起循環網路,對稱連接網路更容易分析。這個網路中有更多的限制,因為它們遵守能量函數定律。沒有隱藏單元的對稱連接網路被稱為「Hopfield 網路」。有隱藏單元的對稱連接的網路被稱為玻爾茲曼機。
其實之前的帖子講過一些關於感知機的內容,這里再復述一下。
首先還是這張圖
這是一個M-P神經元
一個神經元有n個輸入,每一個輸入對應一個權值w,神經元內會對輸入與權重做乘法後求和,求和的結果與偏置做差,最終將結果放入激活函數中,由激活函數給出最後的輸出,輸出往往是二進制的,0 狀態代表抑制,1 狀態代表激活。
可以把感知機看作是 n 維實例空間中的超平面決策面,對於超平面一側的樣本,感知器輸出 1,對於另一側的實例輸出 0,這個決策超平面方程是 w⋅x=0。 那些可以被某一個超平面分割的正反樣例集合稱為線性可分(linearly separable)樣例集合,它們就可以使用圖中的感知機表示。
與、或、非問題都是線性可分的問題,使用一個有兩輸入的感知機能容易地表示,而異或並不是一個線性可分的問題,所以使用單層感知機是不行的,這時候就要使用多層感知機來解決疑惑問題了。
如果我們要訓練一個感知機,應該怎麼辦呢?
我們會從隨機的權值開始,反復地應用這個感知機到每個訓練樣例,只要它誤分類樣例就修改感知機的權值。重復這個過程,直到感知機正確分類所有的樣例。每一步根據感知機訓練法則來修改權值,也就是修改與輸入 xi 對應的權 wi,法則如下:
這里 t 是當前訓練樣例的目標輸出,o 是感知機的輸出,η 是一個正的常數稱為學習速率。學習速率的作用是緩和每一步調整權的程度,它通常被設為一個小的數值(例如 0.1),而且有時會使其隨著權調整次數的增加而衰減。
多層感知機,或者說是多層神經網路無非就是在輸入層與輸出層之間加了多個隱藏層而已,後續的CNN,DBN等神經網路只不過是將重新設計了每一層的類型。感知機可以說是神經網路的基礎,後續更為復雜的神經網路都離不開最簡單的感知機的模型,
談到機器學習,我們往往還會跟上一個詞語,叫做模式識別,但是真實環境中的模式識別往往會出現各種問題。比如:
圖像分割:真實場景中總是摻雜著其它物體。很難判斷哪些部分屬於同一個對象。對象的某些部分可以隱藏在其他對象的後面。
物體光照:像素的強度被光照強烈影響。
圖像變形:物體可以以各種非仿射方式變形。例如,手寫也可以有一個大的圓圈或只是一個尖頭。
情景支持:物體所屬類別通常由它們的使用方式來定義。例如,椅子是為了讓人們坐在上面而設計的,因此它們具有各種各樣的物理形狀。
卷積神經網路與普通神經網路的區別在於,卷積神經網路包含了一個由卷積層和子采樣層構成的特徵抽取器。在卷積神經網路的卷積層中,一個神經元只與部分鄰層神經元連接。在CNN的一個卷積層中,通常包含若干個特徵平面(featureMap),每個特徵平面由一些矩形排列的的神經元組成,同一特徵平面的神經元共享權值,這里共享的權值就是卷積核。卷積核一般以隨機小數矩陣的形式初始化,在網路的訓練過程中卷積核將學習得到合理的權值。共享權值(卷積核)帶來的直接好處是減少網路各層之間的連接,同時又降低了過擬合的風險。子采樣也叫做池化(pooling),通常有均值子采樣(mean pooling)和最大值子采樣(max pooling)兩種形式。子采樣可以看作一種特殊的卷積過程。卷積和子采樣大大簡化了模型復雜度,減少了模型的參數。
卷積神經網路由三部分構成。第一部分是輸入層。第二部分由n個卷積層和池化層的組合組成。第三部分由一個全連結的多層感知機分類器構成。
這里舉AlexNet為例:
·輸入:224×224大小的圖片,3通道
·第一層卷積:11×11大小的卷積核96個,每個GPU上48個。
·第一層max-pooling:2×2的核。
·第二層卷積:5×5卷積核256個,每個GPU上128個。
·第二層max-pooling:2×2的核。
·第三層卷積:與上一層是全連接,3*3的卷積核384個。分到兩個GPU上個192個。
·第四層卷積:3×3的卷積核384個,兩個GPU各192個。該層與上一層連接沒有經過pooling層。
·第五層卷積:3×3的卷積核256個,兩個GPU上個128個。
·第五層max-pooling:2×2的核。
·第一層全連接:4096維,將第五層max-pooling的輸出連接成為一個一維向量,作為該層的輸入。
·第二層全連接:4096維
·Softmax層:輸出為1000,輸出的每一維都是圖片屬於該類別的概率。
卷積神經網路在模式識別領域有著重要應用,當然這里只是對卷積神經網路做了最簡單的講解,卷積神經網路中仍然有很多知識,比如局部感受野,權值共享,多卷積核等內容,後續有機會再進行講解。
傳統的神經網路對於很多問題難以處理,比如你要預測句子的下一個單詞是什麼,一般需要用到前面的單詞,因為一個句子中前後單詞並不是獨立的。RNN之所以稱為循環神經網路,即一個序列當前的輸出與前面的輸出也有關。具體的表現形式為網路會對前面的信息進行記憶並應用於當前輸出的計算中,即隱藏層之間的節點不再無連接而是有連接的,並且隱藏層的輸入不僅包括輸入層的輸出還包括上一時刻隱藏層的輸出。理論上,RNN能夠對任何長度的序列數據進行處理。
這是一個簡單的RNN的結構,可以看到隱藏層自己是可以跟自己進行連接的。
那麼RNN為什麼隱藏層能夠看到上一刻的隱藏層的輸出呢,其實我們把這個網路展開來開就很清晰了。
從上面的公式我們可以看出,循環層和全連接層的區別就是循環層多了一個權重矩陣 W。
如果反復把式2帶入到式1,我們將得到:
在講DBN之前,我們需要對DBN的基本組成單位有一定的了解,那就是RBM,受限玻爾茲曼機。
首先什麼是玻爾茲曼機?
[圖片上傳失敗...(image-d36b31-1519636788074)]
如圖所示為一個玻爾茲曼機,其藍色節點為隱層,白色節點為輸入層。
玻爾茲曼機和遞歸神經網路相比,區別體現在以下幾點:
1、遞歸神經網路本質是學習一個函數,因此有輸入和輸出層的概念,而玻爾茲曼機的用處在於學習一組數據的「內在表示」,因此其沒有輸出層的概念。
2、遞歸神經網路各節點鏈接為有向環,而玻爾茲曼機各節點連接成無向完全圖。
而受限玻爾茲曼機是什麼呢?
最簡單的來說就是加入了限制,這個限制就是將完全圖變成了二分圖。即由一個顯層和一個隱層構成,顯層與隱層的神經元之間為雙向全連接。
h表示隱藏層,v表示顯層
在RBM中,任意兩個相連的神經元之間有一個權值w表示其連接強度,每個神經元自身有一個偏置系數b(對顯層神經元)和c(對隱層神經元)來表示其自身權重。
具體的公式推導在這里就不展示了
DBN是一個概率生成模型,與傳統的判別模型的神經網路相對,生成模型是建立一個觀察數據和標簽之間的聯合分布,對P(Observation|Label)和 P(Label|Observation)都做了評估,而判別模型僅僅而已評估了後者,也就是P(Label|Observation)。
DBN由多個限制玻爾茲曼機(Restricted Boltzmann Machines)層組成,一個典型的神經網路類型如圖所示。這些網路被「限制」為一個可視層和一個隱層,層間存在連接,但層內的單元間不存在連接。隱層單元被訓練去捕捉在可視層表現出來的高階數據的相關性。
生成對抗網路其實在之前的帖子中做過講解,這里在說明一下。
生成對抗網路的目標在於生成,我們傳統的網路結構往往都是判別模型,即判斷一個樣本的真實性。而生成模型能夠根據所提供的樣本生成類似的新樣本,注意這些樣本是由計算機學習而來的。
GAN一般由兩個網路組成,生成模型網路,判別模型網路。
生成模型 G 捕捉樣本數據的分布,用服從某一分布(均勻分布,高斯分布等)的雜訊 z 生成一個類似真實訓練數據的樣本,追求效果是越像真實樣本越好;判別模型 D 是一個二分類器,估計一個樣本來自於訓練數據(而非生成數據)的概率,如果樣本來自於真實的訓練數據,D 輸出大概率,否則,D 輸出小概率。
舉個例子:生成網路 G 好比假幣製造團伙,專門製造假幣,判別網路 D 好比警察,專門檢測使用的貨幣是真幣還是假幣,G 的目標是想方設法生成和真幣一樣的貨幣,使得 D 判別不出來,D 的目標是想方設法檢測出來 G 生成的假幣。
傳統的判別網路:
生成對抗網路:
下面展示一個cDCGAN的例子(前面帖子中寫過的)
生成網路
判別網路
最終結果,使用MNIST作為初始樣本,通過學習後生成的數字,可以看到學習的效果還是不錯的。
本文非常簡單的介紹了四種神經網路的架構,CNN,RNN,DBN,GAN。當然也僅僅是簡單的介紹,並沒有深層次講解其內涵。這四種神經網路的架構十分常見,應用也十分廣泛。當然關於神經網路的知識,不可能幾篇帖子就講解完,這里知識講解一些基礎知識,幫助大家快速入(zhuang)門(bi)。後面的帖子將對深度自動編碼器,Hopfield 網路長短期記憶網路(LSTM)進行講解。
4. 卷積神經網路使用哪種框架最好 TensorFlow or Caffe
tensorflow跟caffe、mxnet、pytorch等一樣是一個深度學習工具箱,其中當然也包含卷積神經網路工具箱。
5. 如何選擇深度學習框架 TensorFlow/Torch/Mxnet/Theano
深度學習目前的應用領域很多,主要是計算機視覺和自然語言處理,以及各種預測等。對於計算機視覺,可以做圖像分類、目標檢測、視頻中的目標檢測等,對於自然語言處理,可以做語音識別、語音合成、對話系統、機器翻譯、文章摘要、情感分析等。
對於剛入行深度學習,想從事人工智慧工業應用和研發的小白來說,選擇一個適合自己的深度學習框架顯得尤為重要。那麼在選擇深度學習框架的時候,要注意哪些內容呢?
通常我們在選擇框架時要考慮易用性、性能、社區、平台支持等問題。初學者應該考慮容易上手的框架,偏工業應用的開發者可以考慮使用穩定性高、性能好的框架,偏研究性的開發者,一般選擇易用而且有領先的模型基線的框架。
目前這個階段,TensorFlow因為背靠谷歌公司這座靠山,再加上擁有龐大的開發者群體,而且採用了稱為「可執行的偽代碼」的Python語言,成為最受歡迎的主流框架之一。一些外圍的第三方庫(如Keras、TFLearn)也基於它實現了很多成果,Keras還得到TensorFlow官方的支持。TensorFlow支持的上層語言也在逐漸擴大,對於不同工程背景的人轉入的門檻正在降低。
因此,對於剛入行深度學習的小白,TensorFlow是一個非常好的選擇,掌握TensorFlow對以後的求職發展很有幫助。
為了讓大家更快地掌握深度學習技術,成為人工智慧領域高端人才,中公教育聯合中科院自動化研究所專家,強力推出人工智慧《深度學習》,讓大家學有所成、真正掌握機器學習模型以及演算法背後的原理。