一区二区三区日韩精品-日韩经典一区二区三区-五月激情综合丁香婷婷-欧美精品中文字幕专区

分享

安利一則深度學習新手神器:不用部署深度學習環(huán)境了!也不用上傳數(shù)據集了!

 bookocea 2017-11-07

授權轉載自大數(shù)據文摘

ID:BigDataDigest

看看你手機號能領到多牛的股
廣告
圖片

作者:Emil Wallnér

編譯:高寧、Happen、陳玲、Alieen

深度學習的浪潮在五年前開始興起。隨著計算能力的爆炸型增長和幾個成功的案例,深度學習引起了大肆宣傳。深度學習技術可以用來駕駛車輛,在Atari游戲中進行人機對抗,以及診斷癌癥。

開始學習神經網絡時,我花了兩周的時間進行探索,選擇合適的工具,對比不同的云服務以及檢索在線課程。但回想起來,我還是希望我可以從第一天就能創(chuàng)建神經網絡,這也是這篇文章的目的。

你不需要有任何預備知識。當然如果你對Python,命令行和Jupyter notebook有基礎的了解會對你有所幫助。

展開剩余94%

深度學習是機器學習的一個分支,它被證明是一種可以在原始數(shù)據(如一幅圖、或者一段聲音)中找到固定模型的有效方法。 如果你想對貓和狗的圖像進行分類。不需要具體的編程,它首先會找到圖片中的邊,然后從不同的邊中構建模式。接下來,它會檢測到鼻子,尾巴和爪子。通過這樣的方式,神經網絡最終可以實現(xiàn)對貓和狗進行分類。

但是,結構化的數(shù)據可以使用更好的機器學習算法。舉個例子,如果你的excel表中記錄了有序的客戶數(shù)據,你希望可以預測他們的下一張訂單,那么你可以使用傳統(tǒng)的方法,使用一個更簡單的機器學習算法。

核心邏輯

想象一個安裝了很多隨機調整齒輪的機器。這些齒輪堆疊在很多層上,而且會相互影響。最初,這個機器無法正常工作。然后隨機地調整齒輪,直到調整到可以給出正確輸出。

然后一個工程師會開始檢查所有的齒輪,然后標記出來哪些齒輪會造成誤差。他會從最后一層的齒輪開始,因為這里是所有誤差累計的結果。一旦他找到了最后一層的誤差,他就會開始查看前一層。通過這種方法他可以計算出每一個齒輪對于誤差的貢獻值。我們把這個過程稱為反向傳播。

然后這個工程師開始根據之前找到的誤差對每一個齒輪進行調整,然后重新運行整個機器。運行機器,計算誤差,調整齒輪,不斷循環(huán)這個過程直到機器給出正確輸出。

預測 – 計算誤差 – 調整預測值 (訓練周期)

神經網絡的運行方式也是如此,有輸入和輸出,然后通過調整齒輪來尋找輸入和輸出之前的關系。給定一個輸入,通過調整齒輪來預測輸出,然后將預測值和真實值進行對比。

神經網絡通過調整齒輪來追求最小誤差(預測值與實際值之前的差異),它會不斷調整齒輪,直到預測值與真實值之間的差異盡可能小。

最小化誤差的一個最佳方法是梯度下降,即通過誤差函數(shù)、或者說成本函數(shù)來進行誤差的計算。

淺層神經網絡

許多人認為人工神經網絡是我們大腦新皮質的數(shù)字化復制品。 這是一個錯誤的觀念。

我們并不知道大腦如何能夠做出這樣的聲明。這只是神經網絡發(fā)明人弗蘭克·羅森布拉特(Frank Rosenblatt)的一個靈感源泉。

淺層神經網絡 輸入-權重-加和-判斷 –> (預測值-實際值)*學習率

與神經網絡模擬器玩一兩個小時,你就可以獲得對其的直觀感受。

我們將從實現(xiàn)一個簡單的神經網絡開始,以了解TFlearn中的語法。從經典的101問題開始,也就是OR運算符。雖然神經網絡更適合于其他類型的數(shù)據,但這是了解其工作原理的一個很好的問題。

所有的深度學習程序都遵循同樣的核心邏輯:

1.首先加載庫,然后加載數(shù)據并清洗。不管是照片,音頻還是知覺數(shù)據,所有的輸入都會被轉化為數(shù)字。這些很長的數(shù)字列表就是我們神經網絡的輸入。

2.現(xiàn)在開始設計神經網絡。選擇你的神經網絡層的類型和數(shù)量

3.然后它會進入學習過程。

4.神經網絡知曉輸入和輸出,然后自行尋找二者之間的關系。

最后會用訓練好的模型中給到你一個預測值。

下面是這個神經網絡的程序:

輸出

第一行 以“#”開頭的行表示備注,一般用來解釋代碼

第二行加載TFlearn庫 通過這個語句我們可以使用谷歌Tensorflow的深度學習函數(shù)

第五行和第六行 將上述表中的數(shù)據存儲在列表中

每個數(shù)字末尾的點會將整數(shù)映射到浮點數(shù)。它存儲具有十進制值的數(shù)字,使計算更加精確。

第七行初始化神經網絡,并指定輸入數(shù)據的維度或者說尺寸

所有的OR運算都是在一對數(shù)據中進行的,所以維度是2.

空值是默認值,表示批量的大小

第八行輸出層

激活函數(shù)將過程中的結果映射到輸出層

在這個例子中,我們使用Sigmoid函數(shù)將其映射到(0,1)區(qū)間范圍內

第十一行 應用回歸

使用優(yōu)化器選擇合適的算法來最小化成本函數(shù)

學習率決定了神經網絡的調整速度,而損失變量決定了如何計算誤差。

第十二行選擇使用哪個神經網絡

一般情況下也可以用來指定存儲訓練日志的位置

第十三行訓練你的神經網絡和模型

選擇你的輸入數(shù)據(OR)以及實際的標簽(Y_truth)

Epochs決定了你的神經網絡運行數(shù)據的循環(huán)次數(shù)

如果你設置 snapshot=True,那么每次循環(huán)后都會進行模型驗證

第十四到十八行使用訓練好的模型進行預測

在這個例子中,返回的是結果是1/True的概率

輸出層

第一個結果表示[0.]&[0.]組合為真的可能性為4%,以此類推?!癟raining step”顯示了你訓練了多少批。

在每一批中所有數(shù)據都將訓練一次,類似于Epoch。如果數(shù)據相對內存較大,你需要停止分段訓練。損失函數(shù)會計算每一次迭代的錯誤數(shù)量。

SGD指隨機梯度下降法及最小化代價函數(shù)方法。

Iter指當前數(shù)據索引以及輸入項的總和。

你可以在大多數(shù)TFlearn神經網絡中找到上述邏輯和語法。學習這段代碼最好的方法就是修改代碼并產生一些錯誤。

損失曲線顯示了每一次訓練的錯誤量

你可以通過Tensorboard來可視化每一次實驗,并了解每一個參數(shù)是如何影響訓練的。

這里有一些你可以運行的例子的建議。我推薦你花費幾小時練習這些例子,以更好地適應運行環(huán)境以及TFlearn中的參數(shù)。

實驗

增加訓練與迭代次數(shù)

嘗試添加或改變文檔中提到的每一個函數(shù)的參數(shù)

例如g = tflearn.fullyconnected(g, 1, activation=’sigmoid’)改成tflearn.fullyconnected(g, 1, activation=’sigmoid’, bias=False)在輸入項增加整數(shù)

改變輸入層的形狀

改變輸出層的激活函數(shù)

使用不同的梯度下降方法

改變神經網絡計算代價的方式

用X和Y來替代“AND”和“NOT”邏輯運算

例如將最后一項Y_truth從[1.]改為[0.]。為了使其有效,你需要在網絡中增加一層。

使其學得更快

想辦法使得每一步學習都超過0.1秒

新手入門

結合Python來使用Tensorflow在深度學習中是最常見的手段。

TFlearn是一個運行在Tensorflow之上的高層次框架。

另一個常見的框架是Keras。這是一個更加健壯的庫,但是我發(fā)現(xiàn)TFlearn的語法更加簡潔易懂。

它們都是運行在Tensorflow之上的高層次框架。

你可以使用你的電腦CPU來運行簡單的神經網絡。但是大多數(shù)實驗需要運行數(shù)個小時甚至幾周。這也是為什么大多數(shù)人通過現(xiàn)代GPU云服務來進行深度學習。

最簡單的GPU云服務解決方案是FloydHub(https://www./)。如果你掌握了基礎的命令行技能,部署FloydHub將不會超過5分鐘。

使用FloyHub文檔來安裝floyd-cli命令行工具。FloydHub還為遇到問題的客戶提供內部客服支持。

讓我們在FloyHub中使用TFlearn、Jupyter Notebook以及Tensorboard來運行你的第一個神經網絡吧!

安裝FloydHub并登陸,下載這份指南中所需的文件。

打開終端,輸入以下命令:

進入文件夾并初始化FloydHub:

FloydHub會在你的瀏覽器打開web面板,提示你創(chuàng)建一個名為101的新項目。完成后回到終端,再次輸入初始化命令。

現(xiàn)在你可以在FloydHub上運行你的神經網絡任務了。

你可以通過“floyd run”命令進行不同的設置。在我們的案例中,我們希望:

o 在FloydHub中增加一個已上傳的公共數(shù)據集

o data emilwallner/datasets/cifar-10/1:data 指定數(shù)據目錄。你可以在FloydHub上查看該數(shù)據集(以及許多其他公共數(shù)據集)。

o gpu 使用GPU云計算

o tensorboard 激活Tensorboard

o mode jupyter Jupyter Notebook模式下運行任務

OK,開始運行我們的任務:

在瀏覽器中初始化Jupyter后,點擊“start-here.ipnyb”文件。

start-here.ipnyb 包含了一個簡單的神經網絡,可以了解TFlearn語法。它學習了“OR”邏輯,隨后解釋了所有組合。

點擊菜單欄的“Kernel ”下的 “Restart & Run All”。如果你能看到信息,說明它工作正常,你就可以去做其他事情了。

前往你的FloydHub項目,找到Tensorboard鏈接。

深度神經網絡

深度神經網絡指的是包含一層以上隱藏層的神經網絡。目前有非常多的關于CNN(卷積神經網絡)工作原理的詳細教程。

因此,我們將關注適用于更多神經網絡的高層次概念。

注:該圖不是一個深度神經網絡。它需要一層以上隱藏層。

你想訓練神經網絡來預測未經訓練的數(shù)據。它需要能泛化的能力。這是一種介于學習與遺忘之間的平衡。

你想它能學習如何將信號從噪聲中分離,但是同時遺忘只在訓練數(shù)據中出現(xiàn)的信號。

如果神經網絡未經充分學習,它會出現(xiàn)欠擬合現(xiàn)象。與之相反是過擬合現(xiàn)象。它指的是從訓練數(shù)據學習過多。

Regularization (正則化)是一種通過遺忘訓練中的特定信號來減少過擬合的方法。

為了進一步理解這些概念,我們在CIFAR-10數(shù)據集上開展實驗。該數(shù)據集包含了10種類別6萬張的圖片,例如汽車、卡車和鳥。目標是預測一張新的圖片屬于哪種類別。

CIFAR中的示例圖片

通常我們需要挖掘數(shù)據、清理數(shù)據以及過濾圖片。但是為了簡化過程,我們只關注神經網絡。你可以在Jupyter notebook中運行安裝的所有例子(https://github.com/emilwallner/Deep-Learning-101)。

輸入層輸出層將圖片分為10類。隱藏層混合了卷積層、 pooling以及連接層。

選擇層數(shù)

讓我們來對比下只有一層的神經網絡和有三層之間的區(qū)別。每一層包含卷積層,池層,和關聯(lián)層。

你可以通過點擊在菜單欄中的Kernel > Restart & Run All 來運行這些腳本。接著再瞥一眼Tensorboard中的訓練記錄。你會發(fā)現(xiàn)有很多層的多準確了15%。較少層的擬合度低 — 證明它學的還不夠。

你可以運行你先前下載的文件夾中相同例子,同樣包括接下來的試驗。

讓我們看一眼準確度和驗證集的準確度。深度學習中最好的實踐是將數(shù)據集一分為二,一部分用作訓練這個神經網絡,剩下的則用作驗證它。通過這種方法可以告訴我們神經網絡在預測新數(shù)據中表現(xiàn)如何,或是類推的能力。

就如你所見,訓練數(shù)據的準確度高于驗證數(shù)據集。這個神經網絡包含了背景噪聲和其他阻礙預測新圖像的細節(jié)。

為解決過擬合問題,你可以懲罰復雜方程并在神經網絡中增加噪聲。普遍解決這個的正則化技術有丟棄層和懲戒復雜方程。

丟棄層

我們可以對比一下丟棄正則化這樣理解:一些強大的神經元并不決定最終結果,而是由他們分配權力。

神經網絡被迫使去學習一些獨立的表現(xiàn)。當做最終的預測時,它則有一些不同的模型去學習。

下面是一個有丟棄層的神經網絡的例子。

在這項對比中,兩個神經網絡是一樣的除了其中一個有丟棄層,另一個沒有。

在神經網絡中的每一層中,神經元變得更依賴于彼此。某些神經元比其他的更有影響力。丟棄層隨機的丟棄部分神經元。這樣,每一個神經元需要為最終輸出提供不同的貢獻。

另一個流行的預防過擬合的方式是在每一層中運用L1 或L2 正則方程。

L1 & L2 正則方程

比方你想描述一匹馬,如果這個描述太仔細,你則會排除掉太多不同形態(tài)的馬。但是如果太籠統(tǒng)則可能包括進來很多別的動物。L1 和L2 正則化幫助我們的網絡去做這種區(qū)分。

如果我們與之前試驗類似的對比,我們會得到相似的結果。

有正則化方程的神經網絡表現(xiàn)的比沒有的要好。

正則化方程L2 懲戒方程太過復雜。它測量每一個方程對于最終輸出的貢獻量,接著懲罰系數(shù)大的方程。

批量大小

另一個重要參數(shù)是批量大小,在每一步訓練中的數(shù)據量。下面是一組大批量數(shù)據與小批量數(shù)據的對比。

就如你所見,大批量所需的周期更少但在訓練中更精確。對比之下,小批量更隨機但需要消耗更多步來補償。

大批量不需要很多學習步驟。但是,你需要更多存儲空間和時間去計算每一步。

學習率

最后一個試驗是對比大,中,小不同學習率的網絡。

學習率因其影響力被視為最重要的一個參數(shù)。它規(guī)范了如何在每一步學習過程中調節(jié)預測中的變化。如果這個學習率太高或者太低都無法收斂,就如上圖的大學習率一般。

設計神經網絡沒有特定的方式。很多是要通過試驗來決定。看看別人如何增加層數(shù)和如何調節(jié)高階參數(shù)的。

如果你有強大的計算能力,你可以設計一個程序和調節(jié)高階參數(shù)。

當你完成了運行工作,你應當為你的GPU云降低運轉速度比如通過取消FloydHub網頁儀表盤來結束工作。

后續(xù)

在TFlearn的官方示例中(https://github.com/tflearn/tflearn/tree/master/examples/images),你能感受到一些表現(xiàn)優(yōu)異的卷積神經網絡。試著運用其中一些方式去提高CIFAR-10數(shù)據庫的驗證集準確率。目前最優(yōu)的結果是96.53%(Graham,2014)。

學習Python的語法和熟悉它的命令語句是非常值得的一件事。這可以有效減少不必要的認知負荷從而全神貫注于深度學習概念上。從Codecademy的Python課開始,接著做一些命令語句練習。如果只做這一件事,你花不到三天就能掌握。

原文鏈接:

https://medium./deep-learning-for-developers-tools-you-can-use-to-code-neural-networks-on-day-1-34c4435ae6b

聲明:本文由入駐搜狐號作者撰寫,除搜狐官方賬號外,觀點僅代表作者本人,不代表搜狐立場。

    本站是提供個人知識管理的網絡存儲空間,所有內容均由用戶發(fā)布,不代表本站觀點。請注意甄別內容中的聯(lián)系方式、誘導購買等信息,謹防詐騙。如發(fā)現(xiàn)有害或侵權內容,請點擊一鍵舉報。
    轉藏 分享 獻花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多

    午夜直播免费福利平台| 国产亚洲成av人在线观看| 亚洲精品日韩欧美精品| 日韩欧美亚洲综合在线| 一区二区三区精品人妻| 丰满熟女少妇一区二区三区| 精品日韩av一区二区三区| 国产精品超碰在线观看| 日本99精品在线观看| 91日韩欧美中文字幕| 色婷婷国产熟妇人妻露脸| 国产日韩精品激情在线观看 | 欧美日韩成人在线一区| 亚洲一区二区三区在线免费| 欧美日韩国产精品自在自线| 中文字幕久久精品亚洲乱码| 我的性感妹妹在线观看| 日本91在线观看视频| 九九热精彩视频在线播放| 中文字幕熟女人妻视频| 熟女乱一区二区三区丝袜| 国产精品一区二区成人在线| 黄色片一区二区三区高清| 亚洲五月婷婷中文字幕| 国产日韩欧美一区二区| 91日韩欧美国产视频| 久久久精品日韩欧美丰满| 欧美野外在线刺激在线观看| 色婷婷在线精品国自产拍| 免费人妻精品一区二区三区久久久| 日韩国产亚洲一区二区三区| 色综合久久超碰色婷婷| 欧美中文字幕日韩精品| 99国产精品国产精品九九| 日韩精品区欧美在线一区| 国产一区欧美一区二区| 国产不卡最新在线视频| 国产精品夜色一区二区三区不卡| 91超精品碰国产在线观看| 色婷婷亚洲精品综合网| 国产av熟女一区二区三区蜜桃|