亚洲免费在线-亚洲免费在线播放-亚洲免费在线观看-亚洲免费在线观看视频-亚洲免费在线看-亚洲免费在线视频

深度學(xué)習(xí)(Python)-- 神經(jīng)網(wǎng)絡(luò)的數(shù)學(xué)構(gòu)建塊

系統(tǒng) 2098 0

本章包括

1、一個(gè)神經(jīng)網(wǎng)絡(luò)的例子
2、張量和張量操作
3、神經(jīng)網(wǎng)絡(luò)如何通過(guò)反向傳播和梯度下降來(lái)學(xué)習(xí)

一、一個(gè)神經(jīng)網(wǎng)絡(luò)的例子

GitHub鏈接

??使用Python庫(kù)Keras學(xué)習(xí)對(duì)手寫(xiě)數(shù)字進(jìn)行分類(lèi)的神經(jīng)網(wǎng)絡(luò)(將手寫(xiě)數(shù)字(28*28px)的灰度圖像分為10個(gè)類(lèi)別:0-9;使用MNIST數(shù)據(jù)集,含有6000張測(cè)試圖像,10000張訓(xùn)練圖像)

1、 在Keras中加載MNIST數(shù)據(jù)集

            
              from keras.datasets import mnist 
(train_images, train_labels), (test_images, test_labels) = mnist.load_data()

            
          

??其中圖像編碼為numpy數(shù)組,label是一個(gè)標(biāo)簽數(shù)組(范圍0-9),圖像標(biāo)簽一一對(duì)應(yīng),流程:1)向神經(jīng)網(wǎng)絡(luò)提供訓(xùn)練數(shù)據(jù);2)network學(xué)習(xí)相關(guān)的圖像和標(biāo)簽;3)讓network為test_image生成預(yù)測(cè)、驗(yàn)證預(yù)測(cè)是否與test_label中的標(biāo)簽匹配,再次建立網(wǎng)絡(luò)
2、 網(wǎng)絡(luò)架構(gòu)

            
              from keras import models
from keras import layers
network = models.Sequential()
network.add(layers.Dense(512, activation='relu', input_shape=(28 * 28,)))
network.add(layers.Dense(10, activation='softmax'))

            
          

??深度學(xué)習(xí)模型就像是數(shù)據(jù)處理的篩子由一系列日益完善的數(shù)據(jù)過(guò)濾器—layers組成
選擇三件事,作為編譯步驟的一部分:
1) loss function–衡量模型在訓(xùn)練上的表現(xiàn)
2) An optimizer 優(yōu)化器–自行更新的機(jī)制
3) 要監(jiān)控的指標(biāo)–在這里只關(guān)心準(zhǔn)確性(正確分類(lèi)的圖像的分?jǐn)?shù))
3、 編譯步驟

            
              network.compile(optimizer='rmsprop',
loss='categorical_crossentropy', 
metrics=['accuracy'])

            
          

??訓(xùn)練前,將數(shù)據(jù)重新整形為網(wǎng)絡(luò)所需要的形狀并對(duì)其進(jìn)行縮放,時(shí)期在[0,1]內(nèi)來(lái)預(yù)處理數(shù)據(jù):uint8 255 (6000,28,28)矩陣–>float [0,1] (6000,28*28)數(shù)組
4、 準(zhǔn)備數(shù)據(jù)圖像

            
              train_images = train_images.reshape((60000, 28 * 28))
train_images = train_images.astype('float32') / 255
test_images = test_images.reshape((10000, 28 * 28))
test_images = test_images.astype('float32') / 255

            
          

5、 準(zhǔn)備標(biāo)簽

            
              from keras.utils import to_categorical
train_labels = to_categorical(train_labels)
test_labels = to_categorical(test_labels)

            
          

??都準(zhǔn)備好后,在Keras中通過(guò)調(diào)用網(wǎng)絡(luò)的擬合方法來(lái)完成模型與訓(xùn)練數(shù)據(jù)相應(yīng)匹配:
network.fit(train_images, train_labels, epochs=5, batch_size=128)
??顯示訓(xùn)練數(shù)據(jù)在網(wǎng)絡(luò)丟失和網(wǎng)絡(luò)對(duì)訓(xùn)練數(shù)據(jù)的準(zhǔn)確性、輸出在測(cè)試數(shù)據(jù)上的準(zhǔn)確性:

            
              test_loss, test_acc = network.evaluate(test_images, test_labels)
print('test_acc:', test_acc)

            
          

二、神經(jīng)網(wǎng)絡(luò)的數(shù)據(jù)表示—張量

張量是數(shù)據(jù)的容器 - 幾乎總是數(shù)字?jǐn)?shù)據(jù)。
1、 標(biāo)量(0D張量)
??僅包含一個(gè)數(shù)字的張量稱(chēng)為標(biāo)量(或標(biāo)量張量,或0維張量,或0D張量)。 在Numpy中,float32或float64數(shù)字是標(biāo)量張量(或標(biāo)量數(shù)組)。標(biāo)量張量有0軸(ndim == 0)。
2、 向量(1D張量)
??數(shù)組數(shù)組稱(chēng)為向量或1D張量,1D張量恰好具有一軸。
??注意區(qū)分軸與維度,例如:x = np.array([12, 3, 6, 14]); 5D矢量?jī)H具有一個(gè)軸并且沿其軸具有五個(gè)維度,而5D張量具有五個(gè)軸(并且沿著每個(gè)軸可以具有任意數(shù)量的維度)。
3、 矩陣(2D張量)
??向量數(shù)組是矩陣或2D張量,矩陣有兩個(gè)軸(通常稱(chēng)為行和列)。
4、 3D張量和高維張量

            
              x = np.array([[[5, 78, 2, 34, 0],
[6, 79, 3, 35, 1],
[7, 80, 4, 36, 2]],
[[5, 78, 2, 34, 0],
 [6, 79, 3, 35, 1],
[7, 80, 4, 36, 2]],
[[5, 78, 2, 34, 0],
[6, 79, 3, 35, 1],
[7, 80, 4, 36, 2]]])

            
          

??在視覺(jué)上可以將其解釋為數(shù)字的立方體。通過(guò)在陣列中打包3D張量,可以創(chuàng)建4D張量,依此類(lèi)推。
5、 三個(gè)關(guān)鍵屬性:
1) 軸數(shù)(等級(jí)):ndim
2) 形狀:shape
3) 數(shù)據(jù)類(lèi)型:dtype
6、 數(shù)據(jù)批量的概念
??通常,在深度學(xué)習(xí)中遇到的所有數(shù)據(jù)張量中的第一個(gè)軸(軸0,因?yàn)樗饕龔?開(kāi)始)將是樣本軸(有時(shí)稱(chēng)為樣本維度)。 在MNIST示例中,樣本是數(shù)字的圖像。 此外,深度學(xué)習(xí)模型不會(huì)立即處理整個(gè)數(shù)據(jù)集; 相反,他們將數(shù)據(jù)分成小批量。 當(dāng)考慮這種批量張量時(shí),第一軸(軸0)稱(chēng)為批量軸或批量維度。
7、 數(shù)據(jù)張量的真實(shí)示例,常見(jiàn)的如下:
1) 矢量數(shù)據(jù) - 形狀的2D張量(樣本,特征)
一個(gè)人的精算數(shù)據(jù)集,我們考慮每個(gè)人的年齡,郵政編碼,和收入。 每個(gè)人可以被表征為3個(gè)值的向量,因此可以將100,000個(gè)人的整個(gè)數(shù)據(jù)集存儲(chǔ)在2D張量形狀(100000,3)中。
2) 時(shí)間序列數(shù)據(jù)或序列數(shù)據(jù) - 形狀的3D張量(樣本,時(shí)間步長(zhǎng),特征)
按照慣例,時(shí)間軸始終是第二軸(索引1的軸)。
股票價(jià)格數(shù)據(jù)集。 每分鐘,我們存儲(chǔ)當(dāng)前的股票價(jià)格,過(guò)去一分鐘的最高價(jià)格和過(guò)去一分鐘的最低價(jià)格。因此,每分鐘編碼為一個(gè)3D矢量,整個(gè)交易日編碼為2D張量 形狀(390,3)(在交易日有390分鐘),250天的數(shù)據(jù)可以存儲(chǔ)在3D張量的形狀(250,390,3)中。 在這里,每個(gè)樣本都是一天的數(shù)據(jù)
3) 圖像-4D形狀張量(樣本,高度,寬度,通道)或(樣本,通道,高度,寬度)
圖像通常具有三個(gè)維度:高度,寬度和顏色深度。
4) 視頻-5D形狀張量(樣本,幀,高度,寬度,通道)或(樣本,幀,通道,高度,寬度)

三、張量運(yùn)算

在我們的初始示例中,我們通過(guò)將Dense圖層堆疊在一起來(lái)構(gòu)建我們的網(wǎng)絡(luò)。
1、 元素操作,可以在numpy中十分簡(jiǎn)單的就做好
2、 廣播
??廣播包括兩個(gè)步驟:1)軸(稱(chēng)為廣播軸)被添加到較小的張量以匹配較大張量的ndim;2)較小的張量與這些新軸重復(fù),以匹配較大張量的整個(gè)形狀
* 3、 np.dot(x,y)—矩陣相乘; 則表示逐個(gè)元素相乘
4、 shape()顯示當(dāng)前矩陣形狀、reshape()改變矩陣形狀

四、神經(jīng)網(wǎng)絡(luò)的引擎:基于梯度的優(yōu)化

training loop步驟:
1)繪制一批訓(xùn)練樣本x和相應(yīng)的目標(biāo)y。
2)在x上運(yùn)行網(wǎng)絡(luò)(稱(chēng)為前向傳遞的步驟)以獲得預(yù)測(cè)y_pred。
3)計(jì)算批次上網(wǎng)絡(luò)的loss,衡量y_pred和y之間的不匹配。
4)以略微減少此批次損失的方式更新網(wǎng)絡(luò)的所有權(quán)重。
??更新網(wǎng)絡(luò)權(quán)重是最難的一個(gè)步驟,給定網(wǎng)絡(luò)中的單個(gè)權(quán)重系數(shù),如何計(jì)算系數(shù)是應(yīng)該增加還是減少,以及增加多少?一種好的方法是利用網(wǎng)絡(luò)中使用的所有操作都是可微分的這一事實(shí),并根據(jù)網(wǎng)絡(luò)系數(shù)計(jì)算損耗的梯度。 然后,可以從梯度向相反方向移動(dòng)系數(shù),從而減少損失。
1、張量運(yùn)算的導(dǎo)數(shù):梯度
??以張量作為輸入的函數(shù)。 考慮輸入向量x,矩陣W,目標(biāo)y和損失函數(shù)損失。 可以使用W計(jì)算目標(biāo)候選y_pred,并計(jì)算目標(biāo)候選y_pred和目標(biāo)y之間的loss或者 mismatch

            
              y_pred = dot(W, x)
loss_value = loss(y_pred, y)

            
          

2、隨機(jī)梯度下降
??給定一個(gè)可微函數(shù),理論上可以分析地找到它的最小值:已知函數(shù)的最小值是導(dǎo)數(shù)為0的點(diǎn),所以我們要做的就是找到所有點(diǎn),這里導(dǎo)數(shù)變?yōu)?,并檢查這些點(diǎn)中的哪一個(gè)函數(shù)具有最低值。應(yīng)用于神經(jīng)網(wǎng)絡(luò),這意味著在分析上找到產(chǎn)生最小可能損失函數(shù)的權(quán)重值的組合。 這可以通過(guò)求解W的方程梯度(f)(W)= 0來(lái)完成。從梯度更改相反方向的權(quán)重,每次丟失的次數(shù)會(huì)少一些,更新網(wǎng)絡(luò)的所有權(quán)重的有效方法如下:
1)繪制一批訓(xùn)練樣本x和相應(yīng)的目標(biāo)y。
2)在x上運(yùn)行網(wǎng)絡(luò)以獲取預(yù)測(cè)y_pred。
3)計(jì)算批次上網(wǎng)絡(luò)的丟失,衡量y_pred和y之間的不匹配。
4)根據(jù)網(wǎng)絡(luò)參數(shù)計(jì)算loss的梯度(反向傳遞)。
5)在與梯度相反的方向上稍微移動(dòng)參數(shù) - 例如W - = step * gradient - 從而減少批次上的loss。
??為步長(zhǎng)因子選擇合理的值非常重要。如果它太小,曲線(xiàn)下降將需要多次迭代,并且它可能會(huì)陷入局部最小值。如果步長(zhǎng)太大,更新最后可能會(huì)帶到曲線(xiàn)上完全隨機(jī)的位置。
??注意,小批量SGD算法的一種變體是在每次迭代時(shí)繪制單個(gè)樣本和目標(biāo),而不是繪制一批數(shù)據(jù)。另外,存在多種SGD變體,其在計(jì)算下一個(gè)權(quán)重更新時(shí)考慮先前的權(quán)重更新而不是僅僅查看梯度的當(dāng)前值而不同。
3、反向傳播算法
??將鏈?zhǔn)揭?guī)則應(yīng)用于神經(jīng)網(wǎng)絡(luò)的梯度值的計(jì)算產(chǎn)生稱(chēng)為反向傳播的算法(有時(shí)也稱(chēng)為反向模式區(qū)分)

五、對(duì)第一個(gè)例子的總結(jié)

這是輸入數(shù)據(jù)
Numpy,在這里格式化為float32類(lèi)型:

            
              (train_images, train_labels), (test_images, test_labels) = mnist.load_data()
train_images = train_images.reshape((60000, 28 * 28))
train_images = train_images.astype('float32') / 255
test_images = test_images.reshape((10000, 28 * 28))
test_images = test_images.astype('float32') / 255

            
          

network如下:

            
              network = models.Sequential()
network.add(layers.Dense(512, activation='relu', input_shape=(28 * 28,)))
network.add(layers.Dense(10, activation='softmax'))

            
          

網(wǎng)絡(luò)編譯步驟:
??categorical_crossentropy是用作學(xué)習(xí)權(quán)重張量的反饋信號(hào)的損失函數(shù),訓(xùn)練階段將嘗試最小化。 這種損失的減少是通過(guò)小批量隨機(jī)梯度下降發(fā)生的。 控制梯度下降的特定使用的確切規(guī)則由作為第一個(gè)參數(shù)傳遞的rmsprop優(yōu)化器定義。

            
              network.compile(optimizer='rmsprop',
loss='categorical_crossentropy',
metrics=['accuracy'])

            
          

最后,訓(xùn)練循環(huán):
??網(wǎng)絡(luò)將開(kāi)始以128個(gè)樣本的小批量重復(fù)訓(xùn)練數(shù)據(jù),5次以上(對(duì)所有訓(xùn)練數(shù)據(jù)的每次迭代稱(chēng)為紀(jì)元)。 在每次迭代時(shí),網(wǎng)絡(luò)將根據(jù)批次上的損失計(jì)算權(quán)重的梯度,并相應(yīng)地更新權(quán)重。 在這5個(gè)時(shí)期之后,網(wǎng)絡(luò)將執(zhí)行2,345個(gè)梯度更新(每個(gè)時(shí)期469個(gè)),并且網(wǎng)絡(luò)的丟失將足夠低,使得網(wǎng)絡(luò)能夠以高精度對(duì)手寫(xiě)數(shù)字進(jìn)行分類(lèi)。

            
              network.fit(train_images, train_labels, epochs=5, batch_size=128)

            
          

更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號(hào)聯(lián)系: 360901061

您的支持是博主寫(xiě)作最大的動(dòng)力,如果您喜歡我的文章,感覺(jué)我的文章對(duì)您有幫助,請(qǐng)用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點(diǎn)擊下面給點(diǎn)支持吧,站長(zhǎng)非常感激您!手機(jī)微信長(zhǎng)按不能支付解決辦法:請(qǐng)將微信支付二維碼保存到相冊(cè),切換到微信,然后點(diǎn)擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對(duì)您有幫助就好】

您的支持是博主寫(xiě)作最大的動(dòng)力,如果您喜歡我的文章,感覺(jué)我的文章對(duì)您有幫助,請(qǐng)用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長(zhǎng)會(huì)非常 感謝您的哦!!!

發(fā)表我的評(píng)論
最新評(píng)論 總共0條評(píng)論
主站蜘蛛池模板: 深夜福利院 | 亚洲第99页 | 四虎影视最新网址 | 久久精品综合视频 | 一本色道久久爱88av俺来也 | 猫咪伊人网 | 国产69精品久久久久777 | 91久久精品一区二区三区 | 青青草99热这里都是精品 | 国产精品永久免费10000 | 日本香蕉视频 | 欧美激情久久久久久久大片 | 日韩亚洲欧美性感视频影片免费看 | 亚洲国产二区三区 | 亚洲精品在线视频观看 | 天天综合日日噜噜噜 | 永久免费的啪啪免费的网址 | 一区一区三区产品乱码 | 五月婷婷综合激情网 | 97视频免费人人观看人人 | 欧美一级毛片香蕉网 | 97在线影院| 免费在线看a | 国产成人无精品久久久久国语 | 国产高清不卡一区二区 | 999yy成年在线视频免费看 | 国产精品19禁在线观看2021 | 婷婷五月情 | 尤物福利在线 | 日韩精品大片 | 久青草视频 | 久久精品国产在热久久2019 | 国产成人精品日本亚洲语言 | 羞羞色院91蜜桃在线观看 | 成人免费观看网站 | 国内精品伊人久久久久7777人 | 欧美一级毛片在线观看 | 你懂的国产 | 国产一级毛片网站 | 国产高清一区二区 | 青草草在线观看免费视频 |