本教程的知識點為:深度學(xué)習(xí)介紹 1.1 深度學(xué)習(xí)與機(jī)器學(xué)習(xí)的區(qū)別 TensorFlow介紹 2.4 張量 2.4.1 張量(Tensor) 2.4.1.1 張量的類型 TensorFlow介紹 1.2 神經(jīng)網(wǎng)絡(luò)基礎(chǔ) 1.2.1 Logistic回歸 1.2.1.1 Logistic回歸 TensorFlow介紹 總結(jié) 每日作業(yè) 神經(jīng)網(wǎng)絡(luò)與tf.keras 1.3 神經(jīng)網(wǎng)絡(luò)基礎(chǔ) 神經(jīng)網(wǎng)絡(luò)與tf.keras 1.3 Tensorflow實現(xiàn)神經(jīng)網(wǎng)絡(luò) 1.3.1 TensorFlow keras介紹 1.3.2 案例:實現(xiàn)多層神經(jīng)網(wǎng)絡(luò)進(jìn)行時裝分類 神經(jīng)網(wǎng)絡(luò)與tf.keras 1.4 深層神經(jīng)網(wǎng)絡(luò) 為什么使用深層網(wǎng)絡(luò) 1.4.1 深層神經(jīng)網(wǎng)絡(luò)表示 卷積神經(jīng)網(wǎng)絡(luò) 3.1 卷積神經(jīng)網(wǎng)絡(luò)(CNN)原理 為什么需要卷積神經(jīng)網(wǎng)絡(luò) 原因之一:圖像特征數(shù)量對神經(jīng)網(wǎng)絡(luò)效果壓力 卷積神經(jīng)網(wǎng)絡(luò) 3.1 卷積神經(jīng)網(wǎng)絡(luò)(CNN)原理 為什么需要卷積神經(jīng)網(wǎng)絡(luò) 原因之一:圖像特征數(shù)量對神經(jīng)網(wǎng)絡(luò)效果壓力 卷積神經(jīng)網(wǎng)絡(luò) 2.2案例:CIFAR100類別分類 2.2.1 CIFAR100數(shù)據(jù)集介紹 2.2.2 API 使用 卷積神經(jīng)網(wǎng)絡(luò) 2.4 BN與神經(jīng)網(wǎng)絡(luò)調(diào)優(yōu) 2.4.1 神經(jīng)網(wǎng)絡(luò)調(diào)優(yōu) 2.4.1.1 調(diào)參技巧 卷積神經(jīng)網(wǎng)絡(luò) 2.4 經(jīng)典分類網(wǎng)絡(luò)結(jié)構(gòu) 2.4.1 LeNet-5解析 2.4.1.1 網(wǎng)絡(luò)結(jié)構(gòu) 卷積神經(jīng)網(wǎng)絡(luò) 2.5 CNN網(wǎng)絡(luò)實戰(zhàn)技巧 2.5.1 遷移學(xué)習(xí)(Transfer Learning) 2.5.1.1 介紹 卷積神經(jīng)網(wǎng)絡(luò) 總結(jié) 每日作業(yè) 商品物體檢測項目介紹 1.1 項目演示 商品物體檢測項目介紹 3.4 Fast R-CNN 3.4.1 Fast R-CNN 3.4.1.1 RoI pooling YOLO與SSD 4.3 案例:SSD進(jìn)行物體檢測 4.3.1 案例效果 4.3.2 案例需求 商品檢測數(shù)據(jù)集訓(xùn)練 5.2 標(biāo)注數(shù)據(jù)讀取與存儲 5.2.1 案例:xml讀取本地文件存儲到pkl 5.2.1.1 解析結(jié)構(gòu)
完整筆記資料代碼->:https://gitee.com/yinuo112/AI/tree/master/深度學(xué)習(xí)/嘿馬深度學(xué)習(xí)筆記/note.md
感興趣的小伙伴可以自取哦~
全套教程部分目錄:
部分文件圖片:
TensorFlow介紹
說明TensorFlow的數(shù)據(jù)流圖結(jié)構(gòu)
應(yīng)用TensorFlow操作圖
說明會話在TensorFlow程序中的作用
應(yīng)用TensorFlow實現(xiàn)張量的創(chuàng)建懂缕、形狀類型修改操作
應(yīng)用Variable實現(xiàn)變量op的創(chuàng)建
應(yīng)用Tensorboard實現(xiàn)圖結(jié)構(gòu)以及張量值的顯示
應(yīng)用tf.train.saver實現(xiàn)TensorFlow的模型保存以及加載
應(yīng)用tf.app.flags實現(xiàn)命令行參數(shù)添加和使用
應(yīng)用TensorFlow實現(xiàn)線性回歸
總結(jié)
每日作業(yè)
神經(jīng)網(wǎng)絡(luò)與tf.keras
1.3 神經(jīng)網(wǎng)絡(luò)基礎(chǔ)
學(xué)習(xí)目標(biāo)
-
目標(biāo)
- 了解感知機(jī)結(jié)構(gòu)癣亚、作用以及優(yōu)缺點
- 了解tensorflow playground的使用
- 說明感知機(jī)與神經(jīng)網(wǎng)絡(luò)的聯(lián)系
- 說明神經(jīng)網(wǎng)絡(luò)的組成
-
應(yīng)用
- 無
1.3.1 神經(jīng)網(wǎng)絡(luò)
人工神經(jīng)網(wǎng)絡(luò)( Artificial Neural Network论衍, 簡寫為ANN)也簡稱為神經(jīng)網(wǎng)絡(luò)(NN)寨典。是一種模仿生物神經(jīng)網(wǎng)絡(luò)(動物的中樞神經(jīng)系統(tǒng)来吩,特別是大腦)結(jié)構(gòu)和功能的 計算模型。經(jīng)典的神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu)包含三個層次的神經(jīng)網(wǎng)絡(luò)聊倔。分別輸入層棚唆,輸出層以及隱藏層。
其中每層的圓圈代表一個神經(jīng)元冗栗,隱藏層和輸出層的神經(jīng)元有輸入的數(shù)據(jù)計算后輸出演顾,輸入層的神經(jīng)元只是輸入。
-
神經(jīng)網(wǎng)絡(luò)的特點
- 每個連接都有個權(quán)值
- 同一層神經(jīng)元之間沒有連接
- 最后的輸出結(jié)果對應(yīng)的層也稱之為全連接層
神經(jīng)網(wǎng)絡(luò)是深度學(xué)習(xí)的重要算法隅居,用途在圖像(如圖像的分類钠至、檢測)和自然語言處理(如文本分類、聊天等)
那么為什么設(shè)計這樣的結(jié)構(gòu)呢胎源?首先從一個最基礎(chǔ)的結(jié)構(gòu)說起棉钧,神經(jīng)元。以前也稱之為感知機(jī)涕蚤。神經(jīng)元就是要模擬人的神經(jīng)元結(jié)構(gòu)掰盘。
一個神經(jīng)元通常具有多個樹突,主要用來接受傳入信息赞季;而軸突只有一條,軸突尾端有許多軸突末梢可以給其他多個神經(jīng)元傳遞信息奢驯。軸突末梢跟其他神經(jīng)元的樹突產(chǎn)生連接申钩,從而傳遞信號。這個連接的位置在生物學(xué)上叫做“突觸”瘪阁。
要理解神經(jīng)網(wǎng)絡(luò)撒遣,其實要從感知機(jī)開始。
1.3.1.1 感知機(jī)(PLA: Perceptron Learning Algorithm))
感知機(jī)就是模擬這樣的大腦神經(jīng)網(wǎng)絡(luò)處理數(shù)據(jù)的過程管跺。感知機(jī)模型如下圖:
感知機(jī)是一種最基礎(chǔ)的分類模型义黎,前半部分類似于回歸模型。感知機(jī)最基礎(chǔ)是這樣的函數(shù)豁跑,而邏輯回歸用的sigmoid廉涕。這個感知機(jī)具有連接的權(quán)重和偏置
我們通過一個平臺去演示,就是tensorflow playground
1.3.2 playground使用
網(wǎng)址:[
那么在這整個分類過程當(dāng)中,是怎么做到這樣的效果那要受益于神經(jīng)網(wǎng)絡(luò)的一些特點
要區(qū)分一個數(shù)據(jù)點是橙色的還是藍(lán)色的狐蜕,你該如何編寫代碼宠纯?也許你會像下面一樣任意畫一條對角線來分隔兩組數(shù)據(jù)點,定義一個閾值以確定每個數(shù)據(jù)點屬于哪一個組层释。
其中 b 是確定線的位置的閾值婆瓜。通過分別為 x1 和 x2 賦予權(quán)重 w1 和 w2,你可以使你的代碼的復(fù)用性更強(qiáng)贡羔。
此外廉白,如果你調(diào)整 w1 和 w2 的值,你可以按你喜歡的方式調(diào)整線的角度乖寒。你也可以調(diào)整 b 的值來移動線的位置猴蹂。所以你可以重復(fù)使用這個條件來分類任何可以被一條直線分類的數(shù)據(jù)集。但問題的關(guān)鍵是程序員必須為 w1宵统、w2 和 b 找到合適的值——即所謂的參數(shù)值晕讲,然后指示計算機(jī)如何分類這些數(shù)據(jù)點。
1.3.2.1 playground簡單兩類分類結(jié)果
但是這種結(jié)構(gòu)的線性的二分類器马澈,但不能對非線性的數(shù)據(jù)并不能進(jìn)行有效的分類瓢省。
感知機(jī)結(jié)構(gòu),能夠很好去解決與痊班、或等問題勤婚,但是并不能很好的解決異或等問題。我們通過一張圖來看涤伐,有四個樣本數(shù)據(jù)
與問題:每個樣本的兩個特征同時為1馒胆,結(jié)果為1
或問題:每個樣本的兩個特征一個為1,結(jié)果為1
異或:每個樣本的兩個特征相同為0凝果, 不同為1
根據(jù)上述的規(guī)則來進(jìn)行劃分祝迂,我們很容易建立一個線性模型
相當(dāng)于給出這樣的數(shù)據(jù)
1.3.2.2 單神經(jīng)元復(fù)雜的兩類-playground演示
那么怎么解決這種問題呢?其實我們多增加幾個感知機(jī)即可解決器净?也就是下圖這樣的結(jié)構(gòu)型雳,組成一層的結(jié)構(gòu)?
1.3.2.3 多個神經(jīng)元效果演示
神經(jīng)網(wǎng)絡(luò)與tf.keras
1.4 神經(jīng)網(wǎng)絡(luò)原理
學(xué)習(xí)目標(biāo)
-
目標(biāo)
- 說明神經(jīng)網(wǎng)絡(luò)的分類原理
- 說明softmax回歸
- 說明交叉熵?fù)p失
-
應(yīng)用
- 無
神經(jīng)網(wǎng)絡(luò)的主要用途在于分類山害,那么整個神經(jīng)網(wǎng)絡(luò)分類的原理是怎么樣的纠俭?我們還是圍繞著損失、優(yōu)化這兩塊去說浪慌。神經(jīng)網(wǎng)絡(luò)輸出結(jié)果如何分類冤荆?
神經(jīng)網(wǎng)絡(luò)解決多分類問題最常用的方法是設(shè)置n個輸出節(jié)點,其中n為類別的個數(shù)权纤。
任意事件發(fā)生的概率都在0和1之間钓简,且總有某一個事件發(fā)生(概率的和為1)乌妒。如果將分類問題中“一個樣例屬于某一個類別”看成一個概率事件,那么訓(xùn)練數(shù)據(jù)的正確答案就符合一個概率分布涌庭。如何將神經(jīng)網(wǎng)絡(luò)前向傳播得到的結(jié)果也變成概率分布呢芥被?Softmax回歸就是一個常用的方法。
1.4.1 softmax回歸
Softmax回歸將神經(jīng)網(wǎng)絡(luò)輸出轉(zhuǎn)換成概率結(jié)果
- softmax特點
如何理解這個公式的作用呢坐榆?看一下計算案例
假設(shè)輸出結(jié)果為:2.3, 4.1, 5.6
softmax的計算輸出結(jié)果為:
y1_p = e^2.3/(e^2.3+e^4.1+e^5.6)
y1_p = e^4.1/(e^2.3+e^4.1+e^5.6)
y1_p = e^5.6/(e^2.3+e^4.1+e^5.6)
這樣就把神經(jīng)網(wǎng)絡(luò)的輸出也變成了一個概率輸出
那么如何去衡量神經(jīng)網(wǎng)絡(luò)預(yù)測的概率分布和真實答案的概率分布之間的距離拴魄?
1.4.2 交叉熵?fù)p失
1.4.2.1 公式
為了能夠衡量距離,目標(biāo)值需要進(jìn)行one-hot編碼席镀,能與概率值一一對應(yīng)匹中,如下圖
它的損失如何計算?
0log(0.10)+0log(0.05)+0log(0.15)+0log(0.10)+0log(0.05)+0log(0.20)+1log(0.10)+0log(0.05)+0log(0.10)+0log(0.10)
上述的結(jié)果為1log(0.10)豪诲,那么為了減少這一個樣本的損失顶捷。神經(jīng)網(wǎng)絡(luò)應(yīng)該怎么做?所以會提高對應(yīng)目標(biāo)值為1的位置輸出概率大小屎篱,由于softmax公式影響服赎,其它的概率必定會減少。只要這樣進(jìn)行調(diào)整這樣是不是就預(yù)測成功了=徊ァV芈恰!G厥俊缺厉!
提高對應(yīng)目標(biāo)值為1的位置輸出概率大小
1.4.2.2 損失大小
神經(jīng)網(wǎng)絡(luò)最后的損失為平均每個樣本的損失大小。對所有樣本的損失求和取其平均值
1.4.3 梯度下降算法
目的:使損失函數(shù)的值找到最小值
方式:梯度下降
函數(shù)的梯度(gradient)指出了函數(shù)的最陡增長方向隧土。梯度的方向走提针,函數(shù)增長得就越快。那么按梯度的負(fù)方向走曹傀,函數(shù)值自然就降低得最快了辐脖。模型的訓(xùn)練目標(biāo)即是尋找合適的 w 與 b 以最小化代價函數(shù)值。假設(shè) w 與 b 都是一維實數(shù)皆愉,那么可以得到如下的 J 關(guān)于 w 與 b 的圖:
可以看到揖曾,此成本函數(shù) J 是一個凸函數(shù)
參數(shù)w和b的更新公式為:
<span class="katex"><span class="katex-mathml"><math><semantics><mrow><mi>w</mi><mo>:</mo><mo>=</mo><mi>w</mi><mo>?</mo><mi>α</mi><mfrac><mrow><mi>d</mi><mi>J</mi><mo>(</mo><mi>w</mi><mo separator="true">,</mo><mi>b</mi><mo>)</mo></mrow><mrow><mi>d</mi><mi>w</mi></mrow></mfrac></mrow><annotation encoding="application/x-tex">w := w - \alpha\frac{dJ(w, b)}{dw}</annotation></semantics></math></span><span aria-hidden="true" class="katex-html"><span class="strut" style="height:1.01em;"></span><span class="strut bottom" style="height:1.355em;vertical-align:-0.345em;"></span><span class="base textstyle uncramped"><span class="mord mathit" style="margin-right:0.02691em;">w</span><span class="mrel">:</span><span class="mrel">=</span><span class="mord mathit" style="margin-right:0.02691em;">w</span><span class="mbin">?</span><span class="mord mathit" style="margin-right:0.0037em;">α</span><span class="mord reset-textstyle textstyle uncramped"><span class="mopen sizing reset-size5 size5 reset-textstyle textstyle uncramped nulldelimiter"></span><span class="mfrac"><span class="vlist"><span style="top:0.345em;"><span class="fontsize-ensurer reset-size5 size5"><span style="font-size:0em;"></span></span><span class="reset-textstyle scriptstyle cramped mtight"><span class="mord scriptstyle cramped mtight"><span class="mord mathit mtight">d</span><span class="mord mathit mtight" style="margin-right:0.02691em;">w</span></span></span></span><span style="top:-0.22999999999999998em;"><span class="fontsize-ensurer reset-size5 size5"><span style="font-size:0em;"></span></span><span class="reset-textstyle textstyle uncramped frac-line"></span></span><span style="top:-0.485em;"><span class="fontsize-ensurer reset-size5 size5"><span style="font-size:0em;"></span></span><span class="reset-textstyle scriptstyle uncramped mtight"><span class="mord scriptstyle uncramped mtight"><span class="mord mathit mtight">d</span><span class="mord mathit mtight" style="margin-right:0.09618em;">J</span><span class="mopen mtight">(</span><span class="mord mathit mtight" style="margin-right:0.02691em;">w</span><span class="mpunct mtight">,</span><span class="mord mathit mtight">b</span><span class="mclose mtight">)</span></span></span></span><span class="baseline-fix"><span class="fontsize-ensurer reset-size5 size5"><span style="font-size:0em;"></span></span></span></span></span><span class="mclose sizing reset-size5 size5 reset-textstyle textstyle uncramped nulldelimiter"></span></span></span></span></span>,<span class="katex"><span class="katex-mathml"><math><semantics><mrow><mi>b</mi><mo>:</mo><mo>=</mo><mi>b</mi><mo>?</mo><mi>α</mi><mfrac><mrow><mi>d</mi><mi>J</mi><mo>(</mo><mi>w</mi><mo separator="true">,</mo><mi>b</mi><mo>)</mo></mrow><mrow><mi>d</mi><mi>b</mi></mrow></mfrac></mrow><annotation encoding="application/x-tex">b := b - \alpha\frac{dJ(w, b)}{db}</annotation></semantics></math></span><span aria-hidden="true" class="katex-html"><span class="strut" style="height:1.01em;"></span><span class="strut bottom" style="height:1.355em;vertical-align:-0.345em;"></span><span class="base textstyle uncramped"><span class="mord mathit">b</span><span class="mrel">:</span><span class="mrel">=</span><span class="mord mathit">b</span><span class="mbin">?</span><span class="mord mathit" style="margin-right:0.0037em;">α</span><span class="mord reset-textstyle textstyle uncramped"><span class="mopen sizing reset-size5 size5 reset-textstyle textstyle uncramped nulldelimiter"></span><span class="mfrac"><span class="vlist"><span style="top:0.345em;"><span class="fontsize-ensurer reset-size5 size5"><span style="font-size:0em;"></span></span><span class="reset-textstyle scriptstyle cramped mtight"><span class="mord scriptstyle cramped mtight"><span class="mord mathit mtight">d</span><span class="mord mathit mtight">b</span></span></span></span><span style="top:-0.22999999999999998em;"><span class="fontsize-ensurer reset-size5 size5"><span style="font-size:0em;"></span></span><span class="reset-textstyle textstyle uncramped frac-line"></span></span><span style="top:-0.485em;"><span class="fontsize-ensurer reset-size5 size5"><span style="font-size:0em;"></span></span><span class="reset-textstyle scriptstyle uncramped mtight"><span class="mord scriptstyle uncramped mtight"><span class="mord mathit mtight">d</span><span class="mord mathit mtight" style="margin-right:0.09618em;">J</span><span class="mopen mtight">(</span><span class="mord mathit mtight" style="margin-right:0.02691em;">w</span><span class="mpunct mtight">,</span><span class="mord mathit mtight">b</span><span class="mclose mtight">)</span></span></span></span><span class="baseline-fix"><span class="fontsize-ensurer reset-size5 size5"><span style="font-size:0em;"></span></span></span></span></span><span class="mclose sizing reset-size5 size5 reset-textstyle textstyle uncramped nulldelimiter"></span></span></span></span></span>
注:其中 α 表示學(xué)習(xí)速率亥啦,即每次更新的 w 的步伐長度。當(dāng) w 大于最優(yōu)解 w′ 時练链,導(dǎo)數(shù)大于 0翔脱,那么 w 就會向更小的方向更新。反之當(dāng) w 小于最優(yōu)解 w′ 時媒鼓,導(dǎo)數(shù)小于 0届吁,那么 w 就會向更大的方向更新错妖。迭代直到收斂。
通過平面來理解梯度下降過程:
1.4.4 網(wǎng)絡(luò)原理總結(jié)
我們不會詳細(xì)地討論可以如何使用反向傳播和梯度下降等算法訓(xùn)練參數(shù)疚沐。訓(xùn)練過程中的計算機(jī)會嘗試一點點增大或減小每個參數(shù)暂氯,看其能如何減少相比于訓(xùn)練數(shù)據(jù)集的誤差,以望能找到最優(yōu)的權(quán)重亮蛔、偏置參數(shù)組合痴施。