《深度學(xué)習(xí)入門(mén)-基于Python的實(shí)現(xiàn)》 課件全套 吳喜之 1-9 從最簡(jiǎn)單的神經(jīng)網(wǎng)絡(luò)說(shuō)起- -TensorFlow 案例_第1頁(yè)
《深度學(xué)習(xí)入門(mén)-基于Python的實(shí)現(xiàn)》 課件全套 吳喜之 1-9 從最簡(jiǎn)單的神經(jīng)網(wǎng)絡(luò)說(shuō)起- -TensorFlow 案例_第2頁(yè)
《深度學(xué)習(xí)入門(mén)-基于Python的實(shí)現(xiàn)》 課件全套 吳喜之 1-9 從最簡(jiǎn)單的神經(jīng)網(wǎng)絡(luò)說(shuō)起- -TensorFlow 案例_第3頁(yè)
《深度學(xué)習(xí)入門(mén)-基于Python的實(shí)現(xiàn)》 課件全套 吳喜之 1-9 從最簡(jiǎn)單的神經(jīng)網(wǎng)絡(luò)說(shuō)起- -TensorFlow 案例_第4頁(yè)
《深度學(xué)習(xí)入門(mén)-基于Python的實(shí)現(xiàn)》 課件全套 吳喜之 1-9 從最簡(jiǎn)單的神經(jīng)網(wǎng)絡(luò)說(shuō)起- -TensorFlow 案例_第5頁(yè)
已閱讀5頁(yè),還剩285頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

《深度學(xué)習(xí)入門(mén)

基于

Python

的實(shí)現(xiàn)》(吳喜之

張敏)從最簡(jiǎn)單的神經(jīng)網(wǎng)絡(luò)說(shuō)起張敏October15,

2024October15,

20241

/

35張敏紀(jì)元和批次October15,

20242

/

35張敏神經(jīng)網(wǎng)絡(luò)的訓(xùn)練,

通常需要進(jìn)行迭代,

而每次迭代都通過(guò)誤差梯度等特性來(lái)更新原有的參數(shù),

以改進(jìn)擬合.

但需要考慮訓(xùn)練模型時(shí)要用多少次整個(gè)訓(xùn)練集及每一次迭代需要用多少觀(guān)測(cè)值.

產(chǎn)生了紀(jì)元

(epoch)1和批/批次/批處理

(batch)

的概念.1術(shù)語(yǔ)

epoch

可以翻譯成常用詞

“時(shí)代”

“時(shí)期”,

這里用紀(jì)元主要是避免使用常用詞做專(zhuān)門(mén)術(shù)語(yǔ).October15,

20243

/

35張敏在通常統(tǒng)計(jì)課程中的樣本量(sample

size)

概念就是數(shù)據(jù)中全部觀(guān)測(cè)值的數(shù)量,

而把全部訓(xùn)練集數(shù)據(jù)用來(lái)訓(xùn)練模型在深度學(xué)習(xí)中則稱(chēng)為一個(gè)紀(jì)元,

這是因?yàn)樵谏疃葘W(xué)習(xí)中往往需要用整個(gè)訓(xùn)練集數(shù)據(jù)來(lái)訓(xùn)練模型多次

(訓(xùn)練幾次就稱(chēng)幾個(gè)紀(jì)元).由于無(wú)法在每個(gè)紀(jì)元的訓(xùn)練中一次將所有數(shù)據(jù)傳遞給計(jì)算機(jī),因此,

需要將整個(gè)訓(xùn)練集數(shù)據(jù)分成較小尺寸

(patch

size)

的批次,

逐個(gè)提供給計(jì)算機(jī),

并在每一步結(jié)束時(shí)更新神經(jīng)網(wǎng)絡(luò)的權(quán)重以使預(yù)測(cè)接近給定的目標(biāo)值.22在統(tǒng)計(jì)中稱(chēng)為觀(guān)測(cè)值的是一行數(shù)據(jù),

是許多變量

(variable)

的觀(guān)測(cè)值組成的向量,

英文是

observation,

而稱(chēng)一個(gè)數(shù)據(jù)集為樣本

(sample);

但是在計(jì)算機(jī)領(lǐng)域往往稱(chēng)變量為特征

(feature),

觀(guān)測(cè)值為樣品或樣本

(sample),

也稱(chēng)為實(shí)例

(instance)、觀(guān)測(cè)(observation)、輸入向量

(input

vector)

或特征向量

(

feature

vector).October15,

20244

/

35張敏紀(jì)元的數(shù)量很大,

可能為數(shù)百或數(shù)千,

這使得學(xué)習(xí)算法可以運(yùn)行,

直到將模型中的誤差充分最小化為止.

在一些文獻(xiàn)中可以看到紀(jì)元數(shù)目設(shè)置為

10、100、500、1000

和更大的示例.

為什么使用多個(gè)紀(jì)元呢?

這是因?yàn)槲覀兪褂玫氖怯邢薜臄?shù)據(jù)集,為了優(yōu)化由迭代積攢的學(xué)習(xí)效果,

僅通過(guò)一次或一次更新權(quán)重不夠,

需要將完整的數(shù)據(jù)集多次傳遞到同一個(gè)神經(jīng)網(wǎng)絡(luò).October15,

20245

/

35張敏當(dāng)所有訓(xùn)練樣本都用于創(chuàng)建一個(gè)批次時(shí),

該學(xué)習(xí)算法稱(chēng)為批次梯度下降(batch

gradient

descent);

當(dāng)批次等于一個(gè)樣本的大小時(shí),

該學(xué)習(xí)算法稱(chēng)為隨機(jī)梯度下降(stochastic

gradientdescent);

當(dāng)批次大小大于一個(gè)樣本且小于訓(xùn)練數(shù)據(jù)集的大小時(shí),

該學(xué)習(xí)算法稱(chēng)為微型批次梯度下降(mini-batch

gradientdescent).October15,

20246

/

35張敏在小批量梯度下降的情況下,

常用的批量大小包括

32、64

和128

個(gè)樣本.

如果數(shù)據(jù)集沒(méi)有按批次大小平均劃分怎么辦?

在訓(xùn)練模型時(shí),

這種情況可能而且確實(shí)經(jīng)常發(fā)生.

這僅表示最終批次的樣品少于其他批次,

或者可以從數(shù)據(jù)集中刪除一些樣本或更改批次大小,

以使數(shù)據(jù)集中的樣本數(shù)量確實(shí)等于樣本量除以批次大小.October15,

20247

/

35張敏批次數(shù)目及紀(jì)元數(shù)目都是整數(shù)值,

是學(xué)習(xí)算法的超參數(shù),

而不是學(xué)習(xí)過(guò)程發(fā)現(xiàn)的內(nèi)部模型參數(shù).

為學(xué)習(xí)算法指定批處理大小和紀(jì)元數(shù)是必須的.

但如何配置這些參數(shù)則沒(méi)有規(guī)則,

必須嘗試不同的值,

以適合具體課題.October15,

20248

/

35張敏神經(jīng)網(wǎng)絡(luò)回歸October15,

20249

/

35張敏Example

1(sim0.csv)

這個(gè)數(shù)據(jù)有一個(gè)因變量,

三個(gè)自變量,

樣本量為

20.我們希望能夠找到一個(gè)用自變量來(lái)描述或預(yù)測(cè)因變量的模型.圖1為該數(shù)據(jù)的成對(duì)散點(diǎn)圖.October15,

202410

/

35張敏圖

1:

例1數(shù)據(jù)的成對(duì)散點(diǎn)圖October15,

202411

/

35張敏該數(shù)據(jù)因變量和自變量

(包括常數(shù)項(xiàng))

的關(guān)系可以用圖2來(lái)表示,

β

=

(β0,

β1,

β2,

β3)

可以看成是回歸系數(shù).圖

2:

例1數(shù)據(jù)因變量和自變量在線(xiàn)性回歸中的關(guān)系October15,

202412

/

35張敏線(xiàn)性最小二乘回歸對(duì)于線(xiàn)性模型i

=

1,

2,

.

.

.

,

nyi=β0+β1Xi1+β2Xi2+β3Xi3+

?i,或

(等價(jià)的矩陣形式)y=Xβ

+?October15,

202413

/

35張敏最簡(jiǎn)單的神經(jīng)網(wǎng)絡(luò)類(lèi)似于關(guān)于線(xiàn)性回歸的圖2,

圖3描述了最簡(jiǎn)單的神經(jīng)網(wǎng)絡(luò).圖

3:

例1數(shù)據(jù)因變量和自變量在神經(jīng)網(wǎng)絡(luò)中的關(guān)系October15,

202414

/

35張敏圖3中上面一層被稱(chēng)為輸入層(input

layer),

其中的節(jié)點(diǎn)代表了3

個(gè)輸入節(jié)點(diǎn)及一個(gè)常數(shù)項(xiàng),

下面一層只有一個(gè)節(jié)點(diǎn)

(因?yàn)橹挥幸粋€(gè)因變量),

稱(chēng)為輸出層(output

layer).

我們也要估計(jì)出相應(yīng)的權(quán)重

(w

=

(w0,

w1,

w2,

w3))

來(lái)形成線(xiàn)性組合0w +∑3i=1wiXi

=

w0

+

w1X1

+

w2X2

+

w3X3,

但是,

我們不是簡(jiǎn)單地用這個(gè)線(xiàn)性組合來(lái)近似因變量,

而是通過(guò)該線(xiàn)性組合的一個(gè)稱(chēng)為激活函數(shù)(activation

function)

的函數(shù)0σ(w

+∑3i=1wiXi)

來(lái)近似因變量.October15,

202415

/

35張敏0這就是和前面線(xiàn)性回歸中簡(jiǎn)單地用線(xiàn)性組合

β

+∑3i=1βiXi來(lái)近似因變量的根本區(qū)別.

激活函數(shù)使得自變量和因變量之間的關(guān)系從單純的線(xiàn)性關(guān)系中解放出來(lái),

因此神經(jīng)網(wǎng)絡(luò)可以解決非常復(fù)雜的非線(xiàn)性問(wèn)題.October15,

202416

/

35張敏下面是激活函數(shù)的某些常用的選擇:σ(x)

=11+

e?x,σ(x)=tanh(x),σ(x)=max(0,

x).這三種激活函數(shù)的頭兩個(gè)稱(chēng)為

S

型函數(shù)

(sigmoid):

1

個(gè)是logistic

函數(shù),

2

個(gè)是雙曲正切,

3

個(gè)稱(chēng)為

ReLU

函數(shù)(rectified

linear

unit).

這三種激活函數(shù)的圖顯示在圖4中.October15,

202417

/

35張敏此外,

還有一種激活函數(shù)稱(chēng)為

softmax,

它把一個(gè)描述記分的向量轉(zhuǎn)換成總和為

1

的概率向量,

該向量表示潛在結(jié)果列表的概率分布.σ(yi)

=eyi∑jeyj.上述激活函數(shù)有很多變種.

此外,

人們針對(duì)不同的目標(biāo)發(fā)明了大量其他類(lèi)型的激活函數(shù),

這里不做過(guò)多介紹.October15,

202418

/

35張敏由于激活函數(shù)改變了值域,

因此激活函數(shù)用在輸出層時(shí)

(在隱藏層的激活函數(shù)不會(huì)對(duì)輸出層的值域有影響),

可能需要對(duì)因變量數(shù)據(jù)做變換,

比如,

在用

S

型激活函數(shù)時(shí),

值域在

0

1之間,

這時(shí)相應(yīng)的值也要變換到相應(yīng)的值域,

否則不會(huì)得到合理的結(jié)果.October15,

202419

/

35張敏神經(jīng)網(wǎng)絡(luò)是如何學(xué)習(xí)的首先,

調(diào)試權(quán)重有一個(gè)標(biāo)準(zhǔn),

也就是要給出一個(gè)損失函數(shù),

我們的迭代是以減少損失為目標(biāo)的.

這里的損失假定是平方損失

(如最小二乘法的損失函數(shù)):

∥y?

?

y∥2.

此外,

對(duì)于例1,

我們?nèi)〖せ詈瘮?shù)為

σ(x)

=

1/(1

+

exp(?x)).

在迭代之前,

需要給出一個(gè)初始權(quán)重值

(可以是隨機(jī)的).

后面從第

i

步開(kāi)展的具體步驟為:October15,

202420

/

35張敏前向傳播

(forward

propagation):

在某一步得到權(quán)重

W,并根據(jù)權(quán)重得到對(duì)因變量

y的一個(gè)估計(jì)值

y?

=

σ(XW)及損失

∥y

?

y?∥2.求梯度:

通過(guò)偏導(dǎo)數(shù)的鏈原理,

我們得到損失函數(shù)相對(duì)于權(quán)重的偏導(dǎo)數(shù)為:?W ?y??∥y

?

y?∥2 ?∥y

?

y?∥2

?σ(XW)

?XW?XW

?W= .October15,

202421

/

35張敏由于?∥y?

y?∥2=?2(y?

y?),?y??σ(XW)?XW=

σ(XW)

[1

?

σ(XW)]

,?XW?W=

X,(2.1)(2.2)(2.3)October15,

202422

/

35張敏得到偏導(dǎo)數(shù)為

(符號(hào)

“⊙”

是矩陣

(向量)

或同維度數(shù)組元素對(duì)元素的積,

也稱(chēng)為

Hadamard

(Hadamard

Product))3:?loss

=?∥y?

y?∥2?W?=

?2X {(y

?

y?)

σ(XW)

[1

?

σ(XW)]}

.3如果

A

=

(aij)

B

=

(bij)都是

m

×

n

矩陣,

則這兩個(gè)矩陣的

Hadamard

積表示為A

B

也是

m

×

n

矩陣,

其元素為相應(yīng)元素的乘積:

A

B

=

(aijbij).October15,

202423

/

35張敏3

利用梯度下降法

(gradient

descent)

做反向傳播(backpropagation):

對(duì)權(quán)重的修正賦值為:W

?

W

?

α

?loss.(2.4)然后回到步驟

1,

繼續(xù)重復(fù)上述步驟,

直到誤差小到預(yù)定的范圍或者達(dá)到一定的迭代次數(shù)為止.October15,

202424

/

35張敏下面對(duì)于上面的式

(2.2)

和式

(2.4)

做出解釋.

(2.2)

其實(shí)就是簡(jiǎn)單的對(duì)

σ(x)

=

1/(1

+

exp(?x))

的導(dǎo)數(shù),

即′o(x)

=

exp(?x)

exp(?x)

exp(?x) [1

+

exp(?x)]2 1

+

exp(?x) 1+

exp(?x)[ ]= 1

? =

σ(x)[1為了解釋涉及梯度下降法的式

(2.4),

我們考慮某一維權(quán)重(w)

和誤差損失的關(guān)系圖

(見(jiàn)圖5).

人們希望改變權(quán)重以達(dá)到減少誤差損失的目的.

在圖5中間,

誤差損失達(dá)到極小值.October15,

202425

/

35張敏假定目前的

w0

的誤差在圖中左邊用

“0”

標(biāo)記的圓圈形狀的點(diǎn)表示,

這時(shí)誤差變化最大的方向是箭頭標(biāo)明的切線(xiàn)

(梯度)方向,

該梯度的方向是曲線(xiàn)在相應(yīng)點(diǎn)的導(dǎo)數(shù)

(斜率)

方向,

?

?wloss old值可記為 Error

或者

?

.

于是權(quán)重從原先的值

w

改變到新的值

wnew:wnew=wold?α

⊙?loss,(2.5)這里

α

是個(gè)調(diào)節(jié)步長(zhǎng)的正常數(shù).

那么,

為什么式中是減號(hào)呢?October15,

202426

/

35張敏從圖5中可以直觀(guān)看出,

左邊的導(dǎo)數(shù)為負(fù),

?loss

<

0,

w應(yīng)該增加,

在右邊導(dǎo)數(shù)為正,

w

應(yīng)該減少,

所以上式應(yīng)該是減號(hào).

如此,

從點(diǎn)

“0”

變化到點(diǎn)

“1”,再變化到點(diǎn)

“2”,等等,

如此下去,

越接近極小值,

斜率數(shù)值逐漸減小,

調(diào)整的步伐也相對(duì)越小,

直到誤差在極小值的某認(rèn)可的小鄰域之內(nèi).October15,

202427

/

35張敏?4?2024051015wErrorw01w12w23w300w01w12w23w3圖

5:

梯度下降法示意圖October15,

202428

/

35張敏神經(jīng)網(wǎng)絡(luò)分類(lèi)October15,

202429

/

35張敏原理及簡(jiǎn)單二分類(lèi)神經(jīng)網(wǎng)絡(luò)分類(lèi)的原理和回歸完全一樣.

僅有的區(qū)別是輸出會(huì)有多個(gè)節(jié)點(diǎn).

如果因變量只有

(諸如

“成功”

“失敗”)

兩類(lèi),通常用啞元

1

0

表示,

那么只有一個(gè)節(jié)點(diǎn)就夠了,

通常輸出的值接近

1

或接近

0

則判別為

1

0.

如果因變量有

k

類(lèi),

則通常用

k

列啞元變量代替.October15,

202430

/

35張敏Example

2(sim1.csv)

這個(gè)數(shù)據(jù)有一個(gè)因變量

(0

1

兩類(lèi)),

4

個(gè)自變量(都是

0/1

啞元變量).

樣本量為

6.

我們希望能夠找到一個(gè)用自變量來(lái)預(yù)測(cè)因變量類(lèi)型的模型.October15,

202431

/

35張敏importnumpyasnpdef

Logit(x,d=False):if(d==True):returnx*(1-x)#np.exp(-x)/(1+np.exp(-x))**2#return

1/(1+np.exp(-x))np.random.seed(1010)w=np.random.random((X.shape[1],1))alpha=0.5L=[]

#記錄誤判率k=50

#最多迭代次數(shù)foriterin

range(k):#

前向傳播sigma_x

=

Logit(np.dot(X,w),False)

#激活函數(shù)resid=y-sigma_x

#誤差#計(jì)算梯度D=resid*

Logit(sigma_x,True)w

+=

alpha*np.dot(X.T,D)

#更新權(quán)重L.append(np.sum(resid**2))#輸出def

accu():yhat=[]forsin

sigma_x:ifs>0.5:yhat.append(1)else:

yhat.append(0)return

(yhat,np.mean(yhat==y.flatten()))yhat,r=accu()print("Output:\n{},\nprediction:\n{}\nOriginal

y=\n{}\nAccuracy={}"\.format(sigma_x.flatten(),yhat,y.flatten(),r))print('weights:\n{}'.format(w))October15,

202432

/

35張敏輸出為:Output:[0.101355510.192055110.830972170.835900480.95690312

0.18660617],prediction:[0,0,1,1,1,

0]Originaly=[00111

0]Accuracy=1.0weights:[[

3.08876206][

0.03274647][-1.48276799][-0.71465412]]輸出的原本不是整數(shù),

這里通過(guò)函數(shù)

accu()以

0.5

作為閾值來(lái)判別其為

0

還是

1(在實(shí)際應(yīng)用中,

0.5

并不一定是個(gè)合理的閾值).October15,

202433

/

35張敏多分類(lèi)問(wèn)題如果因變量是多分類(lèi)變量,

首先需要對(duì)因變量做啞元化,

因此,

我們?cè)诶?人造數(shù)據(jù)上添加一列

3

而成為因變量有

3

個(gè)水平的數(shù)據(jù).October15,

202434

/

35張敏多分類(lèi)問(wèn)題輸出為:Output:[[0.783743470.185015250.1600475

][0.318984030.16515364

0.61361595][0.327000410.78848628

0.03514147][0.291833190.48909864

0.11623587][0.42732670.55411759

0.23021898][0.355779310.43513412

0.30544672]],prediction:[[1,

0,

0,

0,

0,

0],

[0,

0,

1,

0,

1,

0],

[0,

1,

0,

0,

0,

0]]Original

y=[10001100110001000

0]Accuracy=0.7777777777777778weights:[[-0.124118431.58977588

-2.51807154][-0.15944514-1.37544398

1.30346546][-0.602361 -0.25827461

-0.82541316][1.89967374-1.23574585

-0.84713896]]October15,

202435

/

35張敏《深度學(xué)習(xí)入門(mén)

基于

Python

的實(shí)現(xiàn)》(吳喜之

張敏)有隱藏層的神經(jīng)網(wǎng)絡(luò)張敏October15,

2024October15,

20241

/

14張敏一個(gè)隱藏層的神經(jīng)網(wǎng)絡(luò)October15,

20242

/

14張敏圖1由輸入層

(4

個(gè)節(jié)點(diǎn))、一個(gè)隱藏層

(5

個(gè)節(jié)點(diǎn))

及輸出層(1

個(gè)節(jié)點(diǎn))組成.

圖中最上面的是輸入層

(input

layer),

中間是隱藏層

(hidden

layer),

最下面是輸出層

(output

layer).I1H1H2H3H4H5OI2I3I4October15,

20243

/

14張敏符號(hào)定義記

L

為總層數(shù)

(包括隱藏層和輸出層),

而每一層節(jié)點(diǎn)數(shù)為

n?

(?

=

1,

2,

.

.

.

,

L),

對(duì)于圖1的模型,n1=4,n2=5,n3=

1.數(shù)據(jù)自變量

X

N

×

K

維,

因變量

y

N

×

M

維,

對(duì)于圖1的模型,

K

=

4,

M

=1.記激活函數(shù)為

σ(),

為了方便,

假定各個(gè)節(jié)點(diǎn)使用同樣的激活函數(shù).( )(i)

(i?1)

(i?1)

(1)

(L)記第

i

(i

>

1)

層節(jié)點(diǎn)的輸出為

H =

σ

H W ,

而定義

H =

X,

H =

y?,

對(duì)于圖1的模型,

L

=

3,

y?

=

H(3).記

Z(i)

=

H(i?1)W(i?1)

(i

>

1),

因此,

上面的

H(i)

=

σ

(H(i?1)W(i?1))

=

σ

(Z(i))

.記權(quán)重矩陣排序從形成第一個(gè)隱藏層

(第

2

層)

的權(quán)重

W(1)

開(kāi)始,

記為

{W(i)},

最后一個(gè)權(quán)重為{W(L?1)}.

在需要時(shí)

(比如當(dāng)

{X}

有常數(shù)項(xiàng)時(shí)),

各個(gè)權(quán)重可以包括也稱(chēng)為偏差

(bias)

的截距項(xiàng).W(i)

的維數(shù)為

ni

×

ni+1.

這里的

ni

ni+1

為該層和下一層的節(jié)點(diǎn)數(shù).

對(duì)于圖1的模型,

W(1)的維數(shù)為

4

×

5,

W(2)

的維數(shù)為

5

×

1.October15,

20244

/

14張敏I1H1I2I3I4I1H2I2I3I4I1H3I2I3I4I1H4I2I3I4I1H5I2I3I4H1OH2H3H4H5圖

2:

有一個(gè)隱藏層的神經(jīng)網(wǎng)絡(luò)為若干簡(jiǎn)單神經(jīng)網(wǎng)絡(luò)的組合October15,

20245

/

14張敏前向傳播從輸入層到隱藏層的傳播:H(2)

=

σ

(Z(2))

=

σ

(H(1)W(1))

=

σ

(XW(1))

.從隱藏層到輸出層的傳播:y?

=

H(3)

=

σ

(Z(3))

=

σ

(H(2)W(2))

.因此,

從輸入層到輸出層的前向傳播為:y?

=

H

=

σ

Z(3) (3)(2) (2)( ) ( )=

σ

H

W

=

σ

σ

Z(2)(2)W =

σ

σ[ ( )

] [ ((1.1)October15,

20246

/

14張敏反向傳播這里需要一個(gè)損失函數(shù),

假定為平方損失,

C(y,

y?)

=

∥y

?

y?∥2.

回顧對(duì)作為復(fù)合函數(shù)的損失函數(shù)對(duì)

W(2)

W(1)

分別做偏導(dǎo)數(shù)的鏈原理,

我們得到損失函數(shù)對(duì)各個(gè)階段權(quán)重的導(dǎo)數(shù)

(梯度)(下面符號(hào)中的

σ˙(Z)

=

?σ(Z)/?Z):?2

=(2)=?C(y,

y?)

?C(y,

y?)?W?y??σ

Z(3)( )?Z(3)?H W(2) (2)?W(2)=

?2(H(2))?

[(y

?

y?)

σ˙(Z(3))]

;(1.2)?1

=?C(y,

y?)?W(1)=?C(y,

y?)?y??Z(3)?σ

Z ?σ

Z(3) (2)( ) ( )?Z(2)W(2)?XW(1)?W(1)=

?2X?({[(y?

y](3) (2)

??)

σ˙

(Z

)

(W

)

σ˙

Z(2)} ( )).(1.3)并據(jù)此進(jìn)行權(quán)重修正:(2)new(2)old2W =

W ?α?

;(1)new(1)old1W =

W ?α?

.(1.4)October15,

20247

/

14張敏多個(gè)隱藏層的神經(jīng)網(wǎng)絡(luò)October15,

20248

/

14張敏多個(gè)隱藏層的神經(jīng)網(wǎng)絡(luò)和只有一個(gè)隱藏層的神經(jīng)網(wǎng)絡(luò)從本質(zhì)上沒(méi)有什么區(qū)別,

下面的公式使用前一節(jié)的符號(hào)系統(tǒng).

我們還是考慮完全的神經(jīng)網(wǎng)絡(luò),

而且假定每層使用相同的激活函數(shù)(雖然不同層可能用不同的激活函數(shù)).根據(jù)前面一節(jié)的符號(hào)系統(tǒng),

如果有

L

層,

這包括了輸入及輸出層,

那么隱藏層的層數(shù)為

L

?

2,

和前面一樣,

H(1)

=

X,H(L)=

y?.October15,

20249

/

14張敏前向傳播前向傳播公式為:H(i)

=

σ(i)

(Z(i))

=

σ(i)

(H(i?1)W(i?1))

,

i

=

2,

3,

.

.

.

,

L.(2.1)October15,

202410

/

14張敏反向傳播記損失函數(shù)為

C(y?)

(根據(jù)式

(2.1),

作為復(fù)合函數(shù),

它也是W(i)

(i

=

L

?

1,

L

?

2,

.

.

.

,

1)

的函數(shù));

記第

i

(i

=

2,

3,

.

.

.

,

L)

的激活函數(shù)為

σ(i)(Z(i)).

使用下面的偏導(dǎo)數(shù)記號(hào):C˙

=

?C(y?);(i)σ˙

=?y??σ(i)(Z(i))?Z(i).(2.2)關(guān)于公式中矩陣的維數(shù),

如前面的記號(hào)

n?

(?

=

1,

2,

.

.

.

,

L)

為各層的節(jié)點(diǎn)數(shù)目,

則有:N×K

N×K

N×M=

X ;

HL

= y?N×MN×ni

N×nini×ni+1 N×ni?1

ni?1×niH1 ;

H(i)

; W(i);Z(i)=H(i?1)W(i?1)

;C˙N×M

N×ni;σ˙(i)

.(2.3)October15,

202411

/

14張敏通過(guò)

PyTorch

實(shí)現(xiàn)神經(jīng)網(wǎng)絡(luò)初等計(jì)算October15,

202412

/

14張敏PyTorch

NumPy

的相似性在

PyTorch

(在

import

torch之后),

可找到和

NumPy(在

import

numpy

as

np之后)

的許多相似之處,

下面是幾個(gè)矩陣運(yùn)算例子.

這里假定下面的

torch對(duì)象為

tensor,而

numpy的對(duì)象為

np.array.產(chǎn)生標(biāo)準(zhǔn)正態(tài)隨機(jī)數(shù)組:

PyTorch

用代碼

torch.randn(2,3),

NumPy

用代碼np.random.randn(2,3).矩陣相乘:

PyTorch

torch.tensor矩陣

A1和

B1矩陣相乘為

A1.mm(B1)或者A1

@

B1,

NumPy

np.array矩陣

A和

B相乘為

A.dot(B).矩陣的轉(zhuǎn)置:

torch.tensor矩陣

A1的轉(zhuǎn)置為

A1.t(),

np.array矩陣

A的轉(zhuǎn)置為

A.T.逐個(gè)元素的冪:

torch.tensor矩陣

A1的

a次冪為

A1.pow(a),

而np.array矩陣A的

a次冪為

A**a.在

PyTorch

中關(guān)于元素對(duì)元素相乘

(“*”)、張量

(數(shù)組)維度

(“.shape”)

等大量代碼幾乎和

NumPy

毫無(wú)區(qū)別.October15,

202413

/

14張敏PyTorch

作為深度學(xué)習(xí)軟件的獨(dú)特性利用

PyTorch

自帶的激活函數(shù)自定義有

autograd

功能的激活函數(shù)October15,

202414

/

14張敏《深度學(xué)習(xí)入門(mén)

基于

Python

的實(shí)現(xiàn)》(吳喜之

張敏)神經(jīng)網(wǎng)絡(luò)的

PyTorch

逐步深化張敏October15,

2024October15,

20241

/

41張敏簡(jiǎn)單的人造數(shù)據(jù)回歸October15,

20242

/

41張敏Example

1(cosdf.csv)

該數(shù)據(jù)為一段加了隨機(jī)干擾的余弦曲線(xiàn).

自變量為在區(qū)間

[?6,

6]

包含

1000

個(gè)數(shù)目的等距數(shù)列,

另外還包含了一列常數(shù)

1,

因變量為自變量的余弦加上標(biāo)準(zhǔn)正態(tài)的干擾.

讀入該數(shù)據(jù)并轉(zhuǎn)換成

tensor形式的代碼為

(由于我們的程序基于矩陣運(yùn)算,

因此張量都定義成兩維的):importpandasaspdimportnumpyas

npdf=pd.read_csv('cosdf.csv',

sep=',',header=None)x=np.array(df.iloc[:,:-1])y=np.array(df.iloc[:,-1])x=torch.from_numpy(x).type(torch.FloatTensor)y=torch.from_numpy(y.reshape(-1,1)).type(torch.FloatTensor)October15,

20243

/

41張敏import

torchfromtorchimportautograd,nnlrelu=

nn.LeakyReLU()dtype=

torch.floatdevice=

torch.device("cpu")N,

D_in=x.shape

#N是樣本量,D_in

是自變量維數(shù)H1=200

#第1個(gè)隱藏層節(jié)點(diǎn)個(gè)數(shù)H2=100

#第2個(gè)隱藏層節(jié)點(diǎn)個(gè)數(shù)D_out=1

#因變量的維數(shù)w1

=torch.randn(D_in,H1,device=device,dtype=dtype,

requires_grad=True)w2

=torch.randn(H1,H2,device=device,dtype=dtype,

requires_grad=True)w3

=torch.randn(H2,D_out,device=device,dtype=dtype,requires_grad=True)learning_rate=

1e-7fortin

range(10000):y_pred=lrelu(torch.sigmoid(x.mm(w1)).mm(w2)).mm(w3)loss=(y_pred-

y).pow(2).sum()loss.backward()with

torch.no_grad():w1

-=learning_rate*w1.gradw2

-=learning_rate*w2.gradw3

-=learning_rate*

w3.grad#

更新權(quán)重后手工把梯度置0w1.grad.zero_()w2.grad.zero_()w3.grad.zero_()October15,

20244

/

41張敏得到的結(jié)果可以和原來(lái)的數(shù)據(jù)點(diǎn)出圖來(lái)

(見(jiàn)圖1).圖

1:

例1的原數(shù)據(jù)散點(diǎn)圖及擬合曲線(xiàn)圖October15,

20245

/

41張敏若干改進(jìn)的余地前向傳播必須寫(xiě)出

lrelu(torch.sigmoid(x.mm(w1)).mm(w2)).mm(w3)這樣的公式.

這種“線(xiàn)性組合

?

激活函數(shù)

?

線(xiàn)性組合

?

激活函數(shù)

?

線(xiàn)性組合”的模型能不能以更加方便及可以再使用的方式表示呢?必須逐個(gè)定義線(xiàn)性組合部分的權(quán)重函數(shù),

并且在每次訓(xùn)練之后逐個(gè)更新,

這能不能簡(jiǎn)化一些呢?損失函數(shù)也是以公式形式給出,

有沒(méi)有更加方便的方式來(lái)給出各種損失函數(shù)呢?在權(quán)重標(biāo)明

requires_grad=True省了我們?yōu)榉聪騻鞑ビ?jì)算偏導(dǎo)數(shù)的部分,

但在更新權(quán)重時(shí)顯然采取了梯度下降法.

能不能用更好的方法

(比如優(yōu)于梯度下降法的改進(jìn)型)

來(lái)做優(yōu)化呢?

能不能更加精確地調(diào)整這些優(yōu)化方法呢?October15,

20246

/

41張敏改進(jìn)

PyTorch

神經(jīng)網(wǎng)絡(luò)模型改進(jìn)模型描述改進(jìn)損失函數(shù)的確定確定優(yōu)化方法改進(jìn)的程序自定義模型October15,

20247

/

41張敏MNIST

手寫(xiě)數(shù)字?jǐn)?shù)據(jù)神經(jīng)網(wǎng)絡(luò)案例October15,

20248

/

41張敏Example

2下面提供

3

種形式數(shù)據(jù)文件

(5

個(gè)文件),

除了第一個(gè)

(第一行)

之外分別為

2

個(gè)文件

(第三行)一組和

4

個(gè)文件一組

(最后兩行):mnist.pklMNIST_images.csv,

MNIST_labels.csvtrain-images-idx3-ubyte.gz,train-labels-idx1-ubyte.gzt10k-images-idx3-ubyte.gz,

t10k-labels-idx1-ubyte.gzMNIST

數(shù)據(jù)庫(kù)a為包含了手寫(xiě)數(shù)字?jǐn)?shù)據(jù)的一個(gè)大型庫(kù),

被廣泛用于訓(xùn)練各種圖像處理系統(tǒng).

它是通過(guò)重新混合

NIST

原始數(shù)據(jù)集的樣本而創(chuàng)建的,

對(duì)來(lái)自

NIST

的黑白圖像進(jìn)行了標(biāo)準(zhǔn)化處理,

以適合

28

×

28

像素的邊界框,

并進(jìn)行抗鋸齒處理,

從而引入了灰度等級(jí).

MNIST

手寫(xiě)數(shù)字?jǐn)?shù)據(jù)庫(kù)包含

60000

張訓(xùn)練圖像和

10000

張測(cè)試圖像.

該數(shù)據(jù)有很多下載方式,

也有很多不同形式的數(shù)據(jù)文件.

數(shù)據(jù)中的每個(gè)觀(guān)測(cè)值的自變量都有28

×

28

=

784

個(gè)值,

代表各個(gè)像素的深淺,

每個(gè)觀(guān)測(cè)值的因變量

(label)

為該觀(guān)測(cè)值相應(yīng)的真實(shí)數(shù)字.

人們的目的就是要建模來(lái)通過(guò)自變量預(yù)測(cè)因變量的值,

因此這是分類(lèi)問(wèn)題.aModifiedNationalInstituteof

StandardsandTechnology

database.October15,

20249

/

41張敏數(shù)據(jù)可以直接從網(wǎng)上下載1.

當(dāng)然,

也可以從本地?cái)?shù)據(jù)集讀取,

比如:對(duì)

mnist.pkl,可用下面代碼得到已經(jīng)分成訓(xùn)練集和測(cè)試集

(分別為自變量和因變量)

4

個(gè)數(shù)據(jù)集:import

picklewithopen("mnist.pkl",'rb')as

f:((x_train,y_train),(x_valid,y_valid),_)=pickle.load(f,encoding="latin-1")如果直接從

csv

文件讀取,

則可以用下面的代碼得到

4

個(gè)數(shù)據(jù)集(這里訓(xùn)練集和測(cè)試集是隨機(jī)分的):importpandasaspddf_label=pd.read_csv('MNIST_labels.csv',header=None)df_features=pd.read_csv('MNIST_images.csv',

header=None)fromsklearn.model_selectionimporttrain_test_splitX_train,X_cv,y_train,y_cv=

train_test_split(df_features,df_label,test_size=1/6,random_state=

1010)1可下載該數(shù)據(jù)的網(wǎng)頁(yè)包括/exdb/mnist/,

/data/mnist/,/ngbolin/mnist-dataset-digit-recognizer等.October15,

202410

/

41張敏熟悉圖像數(shù)據(jù)圖

2:

60

個(gè)手寫(xiě)數(shù)字October15,

202411

/

41張敏對(duì)數(shù)據(jù)進(jìn)行包裝建立一般的神經(jīng)網(wǎng)絡(luò)分類(lèi)模型對(duì)測(cè)試集做交叉驗(yàn)證October15,

202412

/

41張敏輸出的精確度

(對(duì)角線(xiàn)計(jì)數(shù)總和所占比例)

及混淆矩陣為:ModelAccuracy=

0.9687Confusionmatrix

=[[

966 0 601110133][ 0

1049 43000260][ 2 2

9666213260][ 1 1 1298711204111][ 0 5 20957141112][ 3 1 8123860132103][ 1 0 1012960020][ 2 7 62300

1057013][ 2 3 58343 29727][ 4 2 042031 104913]]October15,

202413

/

41張敏卷積神經(jīng)網(wǎng)絡(luò)October15,

202414

/

41張敏卷積神經(jīng)網(wǎng)絡(luò)

(convolutional

neural

network,

CNN

ConvNet)在

2010

年之后變得非常流行,

因?yàn)樗谝曈X(jué)數(shù)據(jù)上的表現(xiàn)優(yōu)于任何其他網(wǎng)絡(luò)體系結(jié)構(gòu),

但是

CNN

背后的概念并不是新概念.

實(shí)際上,

它很大程度上是受到人類(lèi)視覺(jué)系統(tǒng)的啟發(fā).

它在一些領(lǐng)域的應(yīng)用比較突出,

比如:

面部識(shí)別系統(tǒng),

文檔的分析和解析,

智能城市

(比如監(jiān)控探頭數(shù)據(jù)的使用),

個(gè)性化推薦系統(tǒng)等.October15,

202415

/

41張敏卷積卷積(convolution)

也稱(chēng)為褶積,

其實(shí)并不復(fù)雜,

最簡(jiǎn)單的例子就是大家熟知的

“3

點(diǎn)移動(dòng)平均”

“5

點(diǎn)移動(dòng)平均”

一類(lèi)的運(yùn)算.

當(dāng)然,

所謂平均可能是某種加權(quán)平均.October15,

202416

/

41張敏一維卷積:

3

點(diǎn)移動(dòng)平均的例子如果有一串

10

個(gè)數(shù)目x

=

(x1,

x2,

.

.

.

,

x10)

=

(0,

5,

13,

18,

12,

8,

5,

14,

15,

14),

我們準(zhǔn)備做

“3

點(diǎn)移動(dòng)平均”(每次移動(dòng)一項(xiàng)),

權(quán)重

(這里稱(chēng)為卷積核或核)

y=

(y?1,

y0,

y1)

=

(0.5,

1,

0.5).

由于

y

3

個(gè)值,

因此對(duì)于

x

的平均只能有

10

?

3

+

1

=

8

次,

得到

8

個(gè)值.October15,

202417

/

41張敏計(jì)算過(guò)程如下:第

1

個(gè)值

(以

x

2

個(gè)位置為中心,

記為

c(2)):? ?1∑i=?1c(2)

=

y

(x

,

x

,

x

)

=

(0.5,

1,

0.5)

(0,

5,

13)=

11.5

(= y

x2

3

4 i

3+1∑i=?1i

3?i

= yx

i).第

2

個(gè)值

(以

x

3

個(gè)位置為中心,

記為

c(3)):? ?1∑i=?1c(3)

=

y

(x

,

x

,

x

)

=

(0.5,

1,

0.5)

(5,

13,

18)=

24.5

(= y

x1

2

3 i

2+1∑i=?1i

2?i

= yx

i).其余以此類(lèi)推.

8

個(gè)值

(以

x

9

個(gè)位置為中心,

記為

c(9)):? ?1∑i=?1c(9)=y(x,x,x

)=(0.5,1,0.5)(14,15,14)=29

(= y

x8

9

10 i

9+1∑i=?1i

9?i

= yx

i).因此,

我們有關(guān)于

c(a)(通常記卷積為

c(a)

=(x

?

y)(a))的公式:∞∑c(a)

=

(x

?

y)(a)

=

ya?i∞∑ ∑i

a?

ixi

= yx

i

= y

xj.i=?∞ i=?∞ i+j=a注意上面用的求和運(yùn)算符的上下限為

(?∞,

∞),這是一般卷積定義的表述,

對(duì)有限序列的例子沒(méi)有影響,

因?yàn)閥i

=

0,

?i

∈/

[?1,

0,

1]

以及

xi

=

0,

?i

∈/

[1,

2,

.

.

.

,

10].

表1、圖3和圖4為這個(gè)例子的數(shù)值和圖形描述.October15,

202418

/

41張敏Table

1:

一維卷積的例子a12345678910xa0513181285141514(x?

y)(a)11.524.530.52516.5162429.0October15,

202419

/

41張敏圖

3:

一維卷積的形成October15,

202420

/

41張敏圖

4:

3

點(diǎn)移動(dòng)平均的一維卷積結(jié)果圖October15,

202421

/

41張敏二維卷積的例子對(duì)于高維情況,

前面卷積定義形式不變,

僅僅把變?cè)紤]為向量即可,

比如在

2

維情況,—

—c(a,a)=(x?y)(a,a

)

= y

x1 21 2 1 2 i,ja?i,a

?j.i j二維卷積實(shí)際上多用于圖像處理.

以彩色圖像為例,

數(shù)據(jù)維數(shù)為h

×

w

×

d,

這里

h

w

分別代表豎直和水平方向的像素個(gè)數(shù),

d

通常為

2,代表紅綠藍(lán)

3

種顏色,

數(shù)據(jù)矩陣每個(gè)值為某顏色像素的強(qiáng)度.

一般神經(jīng)網(wǎng)絡(luò)是把這些矩陣?yán)背?/p>

3

個(gè)長(zhǎng)度為

h

×

w

的向量,

然后再進(jìn)行完全連接,這種做法計(jì)算量很大,

并且權(quán)重有很多的重復(fù).

前面例2數(shù)據(jù)本身代表一個(gè)圖片的每一行數(shù)據(jù)有

784

個(gè)值,

這就是從

28

×

28

的矩陣?yán)倍傻?October15,

202422

/

41張敏CNN

的作用是將圖像縮小為更易于處理的形式,

而不會(huì)丟失對(duì)獲得良好預(yù)測(cè)至關(guān)重要的特征.

在設(shè)計(jì)一個(gè)不僅擅長(zhǎng)學(xué)習(xí)特征而且可擴(kuò)展到海量數(shù)據(jù)集的體系結(jié)構(gòu)時(shí),

這是很重要的.下面給出一個(gè)把

2

維矩陣

(h

×

w)

數(shù)據(jù)

m

(可考慮成圖像的某個(gè)顏色層)通過(guò)在卷積層和一個(gè)

kh

×

kw

核矩陣或核(kernel),

也稱(chēng)為過(guò)濾器

(filter)

矩陣

k

做卷積的簡(jiǎn)單示意.October15,

202423

/

41張敏下面的輸入矩陣

m

5

×

5

矩陣,

過(guò)濾矩陣

k

3

×

3

矩陣.然后把矩陣

k

和矩陣

m

的每個(gè)

3

×

3

子矩陣做內(nèi)積

(元素乘元素再求和)得到一個(gè)

(h

?

kh

+

1)

×

(w

?

kw

+

1)

=

3

×

3

的結(jié)果矩陣.

這是步長(zhǎng)

(stride)

1

的過(guò)程,

如果是每隔一個(gè)做一次,

則步長(zhǎng)為

2.

m

?

k

= 6

1

3

4825

36215

08

1

8

0

?

057610125341883586

1

0

1 1530

1110

=

2319

19

October15,

202424

/

41張敏1.

卷積核的選擇

00

0identity:010

;00

0

1

16

Gaussian

plur

(aproximation):

2

12

142

;12

1Boxblur

(normalized):19

11

1111

;11

1

0 ?1 00 ?1 0

sharpen:

?1 5 ?1

;

Edge

detection

(三種):

0?1

0

1

1 0

?1 0 1 0 ?1?1

?11 0 , 1?6

1

, ?1 4 ?1

.0 1 0 ?1?1

?1October15,

202425

/

41張敏2.

填充有時(shí)需要填充

(padding),

過(guò)濾器可能無(wú)法完全滿(mǎn)足輸入圖像的維數(shù).

有兩個(gè)選擇:用零填充圖片

(零填充)

以使其適合,

稱(chēng)為同等填充(same

padding).刪除圖像中和過(guò)濾器不適合的部分,

僅保留圖像的有效部分,

稱(chēng)為有效填充

(valid

padding).圖5是用上面

7

種卷積核對(duì)一個(gè)從彩色圖片

(FC.jpg)

轉(zhuǎn)換來(lái)的黑白圖片

(見(jiàn)圖5左上圖)

做卷積

(并做了填充)

的示例,

次序是從第一行左數(shù)第

2

個(gè)直到右下角的

7

個(gè)圖.October15,

202426

/

41張敏圖

5:

不同過(guò)濾器對(duì)一個(gè)黑白圖片卷積的效果October15,

202427

/

41張敏3.

過(guò)濾在卷積之后,

需要過(guò)濾掉負(fù)值,

使用非線(xiàn)性函數(shù)ReLU(Rectified

Linear

Unit)

作為激活函數(shù)來(lái)去掉負(fù)值

(使負(fù)值等于

0):

(x)

=

max(0,

x).

當(dāng)然,

也可以用

tanh

1/(1

+

e?x)(logistic

函數(shù))等各種

S

型函數(shù).October15,

202428

/

41張敏池化層在處理圖像時(shí)的池化

(pooling)

就是把小塊區(qū)域的數(shù)據(jù)匯總,以減少數(shù)據(jù)量.

池化有幾種類(lèi)型.

比如:

最大池化

(maxpooling)

取小區(qū)域的最大值,

平均池化

(average

pooling)

取小區(qū)域的平均值,

總和池化

(sum

pooling)

取小區(qū)域的和.

下面是一個(gè)把剛才

5

×

4

數(shù)據(jù)陣

m

9

個(gè)

3

×

3

子矩陣化成

1

個(gè)3

×

3

池化矩陣的例子

(步長(zhǎng)為

1):October15,

202429

/

41張敏

m

=

6

4825

36215

08

1

8

0

?1576

38358

6

=

8

888

888

88

(max

pooling);

≈ 4.114.224.44

2.78

4.784.89

5.67

3.44 (average

pooling);4.89

3840

25= 3743

314451

44

(sum

pooling).October15,

202430

/

41張敏卷積神經(jīng)網(wǎng)絡(luò)的構(gòu)造一個(gè)為分類(lèi)而構(gòu)造的

CNN

的構(gòu)成可以示意如下:特征學(xué)習(xí)輸入

?

卷.

+relu+

池化

+

·

·

·

..+-

卷積

+relu+

池化

+

·

·、·

?

.拉這表明:

在經(jīng)過(guò)卷積池化等步驟后,

維數(shù)降低很多,

然后拉直矩陣成向量并傳入進(jìn)行完全連接的

(使用激活函數(shù)

softmax)分類(lèi)多層神經(jīng)網(wǎng)絡(luò).實(shí)際上,

卷積神經(jīng)網(wǎng)絡(luò)有很多種構(gòu)成,

比如,

LeNet,

AlexNet,VGGNet,

GoogLeNet,

ResNet,

ZFNet,

等等.October15,

202431

/

41張敏MNIST

手寫(xiě)數(shù)字?jǐn)?shù)據(jù)

(續(xù)): CNNOctober15,

202432

/

41張敏整理數(shù)據(jù)import

picklewithopen("mnist.pkl",'rb')as

f:((x_train,y_train),(x_valid,y_valid),_)=pickle.load(f,encoding="latin-1")import

torchx_train,y_train,x_valid,y_valid=

map(torch.tensor,(x_train,y_train,x_valid,

y_valid))x_train=x_train.reshape(50000,1,28,28)x_valid=x_valid.reshape(10000,1,28,28)batch_size_train=

64batch_size_test=

1000#Pytorchtrainandtest

setstrain=torch.utils.data.TensorDataset(x_train,y_train)test=torch.utils.data.TensorDataset(x_valid,

y_valid)train_loader=torch.utils.data.DataLoader(train,batch_size=

batch_size_train,shuffle=False)test_loader=torch.utils.data.DataLoader(test,batch_size=

batch_size_test,shuffle=False)October15,

202433

/

41張敏為模型擬合做準(zhǔn)備為要用的

lambda

函數(shù)做

PyTorch

包裝:class

Lambda(nn.Module):def

init

(self,func):super().

init

()self.func=

funcdefforward(self,x):return

self.func(x)October15,

202434

/

41張敏確定前向傳播

CNN

模型:fromtorchimportoptimmodel=

nn.Sequential(nn.Conv2d(1,16,kernel_size=3,stride=2,padding=1),nn.ReLU(),nn.Conv2d(16,16,kernel_size=3,stride=2,padding=1),nn.ReLU(),nn.Conv2d(16,10,kernel_size=3,stride=2,padding=1),nn.ReLU(),nn.AdaptiveAvgPool2d(1),Lambda(lambdax:x.view(x.size(0),

-1)),)October15,

202435

/

41張敏擬合及交叉驗(yàn)證最終擬合代碼和輸出為:0

0.195202277600765221

0.17164783701300622

0.156519725918769843

0.150830556452274334

0.1480826847255235

0.142191998660564426

0.135652282834053037

0.130659142136573798

0.1275297760963449

0.12674583941698075October15,

202436

/

41張敏CIFAR-10

數(shù)據(jù)圖像

CNN

案例October15,

202437

/

41張敏數(shù)據(jù)及載入Example

3CIFAR-10

是一個(gè)經(jīng)典的圖像識(shí)別問(wèn)題,

包括

60000

32

×

32

像素的RGB

圖像

(50000

幅屬于訓(xùn)練集;

10000

幅屬于測(cè)試集).

這些圖像共包括10

類(lèi)內(nèi)容:

plane(飛機(jī)),

car(汽車(chē)),

bird(鳥(niǎo)),

cat(貓),

deer(鹿),

dog(狗),

frog

(青蛙),

horse

(馬),

ship

(船),

truck

(卡車(chē)).

這里將用

PyTorch

給出的

CNN

網(wǎng)絡(luò)模型來(lái)擬合.

本例直接使用

PyTorch

的代碼載入文件,

但也可以用這里給出的數(shù)據(jù)文件

(在文件夾

cifar-10-batches-py中的文件:data_batch_1,data_batch_2,data_batch_3,data_batch_4,data_batch_5,

test_batch).

可以用下面的代碼把數(shù)據(jù)以

dict

形式讀入:October15,

202438

/

41張敏defunpickle(file):import

picklewithopen(file,'rb')as

fo:dict=pickle.load(fo,encoding='bytes')return

dictw=[]foriin

range(5):w.append(unpickle('cifar-10-batches-py/data_batch_'+str(i+1)))w.append(unpickle('cifar-10-batches-py/test_batch'))d=

{}fori,kinenumerate(w[0].keys()):if

i==0:d[k]=tuple(d[k]fordin

w)if

i!=0:d[k]=np.concatenate(list(d[k]fordin

w))x_train=d[b'data'].reshape(60000,3,32,32)[:50000]y_train=d[b'labels'][:50000].astype(int)x_test=d[b'da

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論