版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
神經(jīng)網(wǎng)絡(luò)9.1基本原理人工神經(jīng)網(wǎng)絡(luò)是在生物學(xué)中神經(jīng)網(wǎng)絡(luò)的啟發(fā)下誕生了的。在生命科學(xué)中,神經(jīng)網(wǎng)絡(luò)是指動物大腦中一系列相互連接的神經(jīng)元。信號通過神經(jīng)元的軸突經(jīng)過突觸傳遞到其他神經(jīng)元的樹突上,這就是神經(jīng)元之間的接口。當(dāng)外界總的信號輸入超過了一定的閾值,神經(jīng)元則會沿著軸突傳遞信號。神經(jīng)元就可以通過接口相互影響,共同發(fā)揮作用。神經(jīng)元神經(jīng)元是人工神經(jīng)網(wǎng)絡(luò)中的基本組成單位,在結(jié)構(gòu)上受到了神經(jīng)生物學(xué)中動物大腦神經(jīng)元的啟示。單個神經(jīng)元的功能非常簡單,只是把輸入信號加權(quán)求和,再把結(jié)果傳遞給一個激活函數(shù)。一般地,激活函數(shù)會選擇性地抑制住一部分神經(jīng)元。典型的激活函數(shù)通常是非線性的。多個神經(jīng)元相互連接就組成了一個神經(jīng)網(wǎng)絡(luò)。通過選擇神經(jīng)元的數(shù)量、結(jié)合方式,以及激活函數(shù)的形式,用戶可以構(gòu)造不同結(jié)構(gòu)的神經(jīng)網(wǎng)絡(luò)。ReLU函數(shù)x
<-
seq
(-1,1,0.1)
#設(shè)置xrelu
<-
function
(x)
ifelse
(x
>
0,
x,
0)
#定義ReLU函數(shù)plot
(x,
relu(x),
type
=
"l")
#畫出函數(shù)text
(0.6,
0.4,
"ReLU
(x)")
#添加文字說明多層感知器模型多層感知器一般由至少三層神經(jīng)元組成,除了輸入層與輸出層之外,還至少包括一個被稱為隱層的中間層。一般在多層感知器中使用全連接模式,也就是相鄰層中的神經(jīng)元節(jié)點(diǎn)互相連接。在相鄰層的兩個神經(jīng)元ni和nj之間傳輸信號時,使用權(quán)重wij來定量表示這種連接關(guān)系。因?yàn)闄?quán)重wij的大小是可以調(diào)節(jié)的,如果使用非線性激活函數(shù),多層感知器可以逼近一些極其復(fù)雜的多變量函數(shù)。輸入層隱層輸出層反向傳播算法前向傳播:在神經(jīng)網(wǎng)絡(luò)中,信號從輸入層到輸出層逐層傳播。如果連接每一層的權(quán)重都是已知的,根據(jù)輸入信號就可以計(jì)算出輸出信號。當(dāng)權(quán)重未知時,需要根據(jù)輸入和輸出來估計(jì)權(quán)重,使得神經(jīng)網(wǎng)絡(luò)能刻畫出輸入和輸出之間的映射。反饋機(jī)制:猜測一組權(quán)重作為初始值,前向傳播信號計(jì)算出理論輸出,再根據(jù)理論值與實(shí)際值的偏差,來修正權(quán)重。偏差估計(jì)反向傳播:偏差信號從輸出層到輸入層逐層反向傳遞。把第i層的第j個神經(jīng)元的偏差記作。使用梯度下降法更新對權(quán)重參數(shù)的估計(jì)。因?yàn)橹挥休敵鰧拥钠梢灾苯佑?jì)算出來,在其他層中需要先得到估計(jì)偏差,才能用于修訂參數(shù)。把下一層的偏差傳遞給上一層,用于偏差估計(jì)簡化:梯度估計(jì)使用梯度下降的方法來求權(quán)重,需要首先得出梯度方向,也就是偏差對權(quán)重的偏導(dǎo)。把第i層的第j個神經(jīng)元的偏差記作。
,。鏈?zhǔn)角髮?dǎo):選擇步長,算法說明學(xué)習(xí)因子η對于算法的性能非常重要。因?yàn)樯窠?jīng)網(wǎng)絡(luò)中的優(yōu)化目標(biāo)函數(shù)不一定為凸,梯度下降法只能保證收斂到局部最優(yōu),不能保證全局最優(yōu)。對于一般的應(yīng)用而言,局部最優(yōu)實(shí)際上已經(jīng)能夠具有實(shí)用性。R語言中的神經(jīng)網(wǎng)絡(luò)包包
名說
明nnet支持單隱層的前饋神經(jīng)網(wǎng)絡(luò),可用于多項(xiàng)式對數(shù)線性模型neuralnet使用反向傳播算法訓(xùn)練神經(jīng)網(wǎng)絡(luò)h2o包含支持H2O的R腳本功能RSNNS斯圖加特神經(jīng)網(wǎng)絡(luò)模擬器的接口
tensorflowTensorFlow的接口deepnetR語言深度學(xué)習(xí)包darch支持深度架構(gòu)和受限玻爾茲曼機(jī)的R語言包rnn實(shí)現(xiàn)循環(huán)神經(jīng)網(wǎng)絡(luò)的包MXNetR支持靈活高效GPU計(jì)算和深度學(xué)習(xí)的R語言包kerasKeras的R語言接口內(nèi)容導(dǎo)航CONTENTS感知器模型基本原理深度神經(jīng)網(wǎng)絡(luò)9.19.29.39.2感知器模型人工神經(jīng)網(wǎng)絡(luò)一般都使用有監(jiān)督的學(xué)習(xí)。在神經(jīng)網(wǎng)絡(luò)中,通過學(xué)習(xí)來調(diào)整每個神經(jīng)元節(jié)點(diǎn)對輸入信號與偏移量加權(quán)時使用的權(quán)值。類似于其他有監(jiān)督學(xué)習(xí)的方法,訓(xùn)練神經(jīng)網(wǎng)絡(luò)的目標(biāo)就是通過參數(shù)的選擇使模型成為一個可以正確地把輸入數(shù)據(jù)轉(zhuǎn)化為預(yù)期輸出結(jié)果的映射??梢詰?yīng)用多層感知器模型,應(yīng)用神經(jīng)網(wǎng)絡(luò)解決非線性回歸與分類等有監(jiān)督學(xué)習(xí)中的問題neuralnet包R語言中的neuralnet包支持神經(jīng)網(wǎng)絡(luò)的基本操作。安裝與下載:install.packages
("neuralnet")library
("neuralnet")主要的神經(jīng)網(wǎng)絡(luò)建模函數(shù)為:neuralnet(formula,data,hidden=1,threshold=0.01,stepmax=1e+05,rep=1,startweights=NULL,learningrate.limit=NULL,learningrate.factor=list(minus=0.5,plus=1.2),learningrate=NULL,lifesign="none",lifesign.step=1000,algorithm="rprop+",err.fct="sse",act.fct="logistic",linear.output=TRUE,exclude=NULL,constant.weights=NULL,likelihood=FALSE)
名
稱說
明formula對需要擬合的模型形式的符號性描述data包含formula中所指定變量的數(shù)據(jù)框hidden一個整型數(shù)向量,表示每一個隱層中神經(jīng)元的個數(shù)threshold數(shù)值型停止條件,誤差函數(shù)偏導(dǎo)數(shù)的閾值stepmax訓(xùn)練神經(jīng)網(wǎng)絡(luò)的最大步長,如果到達(dá)了這個最大值,則停止訓(xùn)練rep神經(jīng)網(wǎng)絡(luò)訓(xùn)練的最大迭代次數(shù)startweights包含權(quán)重初始值的向量algorithm包含用于神經(jīng)網(wǎng)絡(luò)計(jì)算的算法名稱的字符串,可選:backprop、rprop+、rprop–、sag或slr。backprop指反向傳播算法act.fct代表可微的激活函數(shù)名稱的字符串,logistic和tanh分別表示Logistic函數(shù)和雙曲正切函數(shù)err.fct字符串,表示用于計(jì)算誤差的可微函數(shù),可選sse和ce,分別代表誤差的平方和,以及交叉熵函數(shù)返回神經(jīng)網(wǎng)絡(luò)對象函數(shù)的返回值是一個nn類的對象,其屬性如右表所示。
名
稱說
明call與調(diào)用函數(shù)形式相匹配err.fct實(shí)際使用的誤差函數(shù)act.fct實(shí)際使用的激活函數(shù)datadata參數(shù)net.result包含神經(jīng)網(wǎng)絡(luò)每一次迭代的結(jié)果列表weights包含神經(jīng)網(wǎng)絡(luò)每一次迭代所擬合權(quán)重的向量應(yīng)用:非線性回歸#生成1~100之間的50個均勻分布的隨機(jī)數(shù)作為訓(xùn)練輸入traininginput
<-
as.data.frame
(runif
(50,
min=1,
max=100))trainingoutput
<-
log
(traininginput)
#按列綁定輸入輸出構(gòu)成訓(xùn)練集trainingdata
<-
cbind
(traininginput,trainingoutput)#設(shè)定訓(xùn)練數(shù)據(jù)的屬性名colnames
(trainingdata)
<-
c
("Input","Output")先看一個使用神經(jīng)網(wǎng)絡(luò)實(shí)現(xiàn)簡單非線性函數(shù)擬合的例子。首先,用均勻概率分布生成一些整數(shù),并對它們求對數(shù)值。然后,再用神經(jīng)網(wǎng)絡(luò)做出擬合與預(yù)測。設(shè)計(jì)網(wǎng)絡(luò)結(jié)構(gòu)#網(wǎng)絡(luò)包含輸入層+隱層+輸出層,隱層帶有10個神經(jīng)元#指定損失函數(shù)閾值threshold=0.01net.log
<-
neuralnet
(Output~Input,
trainingdata,
hidden=10,
threshold=0.01)print
(net.log)多層感知器,由輸入層、輸出層,以及一個隱層構(gòu)成。隱層的節(jié)點(diǎn)數(shù)量設(shè)為10。函數(shù)中并沒有指定激活函數(shù),使用的是默認(rèn)形式Sigmoid??梢允褂胣et.log$act.fct來查看函數(shù)形式。泛型函數(shù)plot調(diào)用plot
(net.log)可以畫出網(wǎng)絡(luò)結(jié)構(gòu)。雖然形式簡陋,圖中標(biāo)出了訓(xùn)練后學(xué)習(xí)到的參數(shù)。測試神經(jīng)網(wǎng)絡(luò)#生成測試數(shù)據(jù)檢驗(yàn)神經(jīng)網(wǎng)絡(luò)的預(yù)測性能testdata
<-
as.data.frame
((1:10)^2)#輸入測試數(shù)據(jù),讓訓(xùn)練好的神經(jīng)網(wǎng)絡(luò)完成運(yùn)算net.results<-compute(net.log,testdata)
#用更好的形式顯示結(jié)果,分別列出測試輸入、實(shí)際值、預(yù)測值niceoutput
<-
cbind
(testdata,
log(testdata),
as.data.frame
(net.results$net.result))colnames(niceoutput)
<-
c
("Input","Expected
Output","Neural
Net
Output")生成一組數(shù)據(jù)用于檢驗(yàn)神經(jīng)網(wǎng)絡(luò)的效果。打印niceoutput,比較實(shí)際值與預(yù)測值,看一看偏差是否可以接受。應(yīng)用:分類class.ind
<-
function(cl)
#輸入cl是一個表示分類結(jié)果的向量
{
n
<-
length
(cl)
cl
<-
as.factor
(cl)
#把cl轉(zhuǎn)換為因子型
x
<-
matrix
(0,
n,
length(levels(cl)))#生成值為0的初始矩陣
x[(1:n)
+
n*(unclass(cl)-1)]
<-
1
#匹配樣本及類別
dimnames(x)
<-
list(names(cl),
levels(cl))
#設(shè)置每一列的名稱
x
#返回處理好的矩陣
}在神經(jīng)元中使用的都是數(shù)值型變量。首先需要把分類結(jié)果表示成數(shù)值作為訓(xùn)練集的期望輸出。編寫函數(shù),把輸入的類別向量轉(zhuǎn)換成值為0或1的矩陣,如果元素值為1則表示那一行樣本對應(yīng)的類別為元素所在的列。輸入數(shù)據(jù)的規(guī)范化處理normalize
<-
function(x)
#設(shè)計(jì)規(guī)范化函數(shù)normalize(){
num
<-
x
-
min(x)
denom
<-
max(x)
-
min(x)
return
(num/denom)}#規(guī)范化數(shù)據(jù)集iris_norm
<-
as.data.frame(lapply(iris[1:4],
normalize))不同的變量可能有不同的取值范圍,這些取值范圍之間存在非常大的差異。在對數(shù)據(jù)進(jìn)行預(yù)處理時,編寫的函數(shù)normalize()完成數(shù)據(jù)規(guī)范化工作。把數(shù)據(jù)統(tǒng)一為0~1之間的實(shí)數(shù)值。劃分訓(xùn)練集與測試集set.seed
(1)index
<-
sample(nrow(iris),
nrow(iris)*0.7)iristrain
<-
iris_norm[index,]iristest
<-
iris_norm[-index,]#把測試集的分類結(jié)果用作class.ind
()的輸入iristrain.label
<-
iris
[index,5]iristest.label
<-
iris
[-index,5]target
<-
class.ind
(iristrain.label)iris.train
<-
cbind
(iristrain,
target)按照70%對30%的比例把數(shù)據(jù)集分為訓(xùn)練集與測試集兩個部分。使用sample()函數(shù)進(jìn)行抽樣。調(diào)用class.ind()函數(shù)把鳶尾花品種轉(zhuǎn)換成二值矩陣。再與花瓣、花萼的長寬數(shù)據(jù)一起組成新的測試數(shù)據(jù)集。設(shè)計(jì)網(wǎng)絡(luò)結(jié)構(gòu)net.iris
<-
neuralnet( setosa
+
versicolor
+
virginica
~
Sepal.Length
+
Sepal.Width
+
Petal.Length
+
Petal.Width,
#輸入/輸出關(guān)系公式 data=iris.train,
#訓(xùn)練集 hidden=4
#1個隱層,含有4個神經(jīng)元)plot(net.iris)
#畫出神經(jīng)網(wǎng)絡(luò)
三層感知器模型:輸入層四個長寬測量值,隱層使用四個神經(jīng)元,在輸出層則是三個品種所對應(yīng)的輸出值。輸出(1,0,0)表示setosa品種。期望神經(jīng)網(wǎng)絡(luò)能夠用softmax方法在三個輸出值中選擇最大值來表示樣本所屬的品種。Softmax方法#得到網(wǎng)絡(luò)中訓(xùn)練集的輸出train.outputs
<-
as.data.frame
(net.iris$net.result)#得到每行中最大值所在列cid
<-
apply
(train.outputs,
1,
which.max)#使用品種名稱替換最大值results
<-
c
('setosa',
'versicolor',
'virginica')[cid]選擇最大值作為類別輸出。調(diào)用table
(results,
iristrain.label)生成混淆矩陣檢驗(yàn)分類效果。再使用compute對測試集檢驗(yàn)神經(jīng)網(wǎng)絡(luò)的泛化能力。內(nèi)容導(dǎo)航CONTENTS感知器模型基本原理深度神經(jīng)網(wǎng)絡(luò)9.19.29.39.3深度神經(jīng)網(wǎng)絡(luò)深度學(xué)習(xí)是近年來受到廣泛關(guān)注的一個研究領(lǐng)域,在自然語言處理、計(jì)算機(jī)視覺、人機(jī)對弈等應(yīng)用中取得了巨大的成功。目前存在很多不同的深度學(xué)習(xí)神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu)(多于1個隱層),包括自編碼器、卷積神經(jīng)網(wǎng)絡(luò)、循環(huán)神經(jīng)網(wǎng)絡(luò)、長短時記憶網(wǎng)絡(luò)、受限玻爾茲曼網(wǎng)絡(luò)、深度信念網(wǎng)絡(luò)等。R語言迅速地跟蹤了深度學(xué)習(xí)的進(jìn)展,引入了支持深度學(xué)習(xí)的各種包?,F(xiàn)在,用戶能夠使用非常簡潔的形式,在R語言中實(shí)現(xiàn)大多數(shù)深度學(xué)習(xí)神經(jīng)網(wǎng)絡(luò)。深度神經(jīng)網(wǎng)絡(luò)的形式名稱及縮寫類型學(xué)習(xí)方式輸入變量特
點(diǎn)自編碼器(AE)生成式無監(jiān)督多種適用于特征提取與降維輸入層與輸出層神經(jīng)元數(shù)量相等用輸出重建輸入信號,無標(biāo)簽數(shù)據(jù)卷積神經(jīng)網(wǎng)絡(luò)(CNN)判別式有監(jiān)督二維數(shù)據(jù)卷積層占用計(jì)算時間最多與一般深度神經(jīng)網(wǎng)絡(luò)相比連接數(shù)量較少對于視覺應(yīng)用需要大量訓(xùn)練數(shù)據(jù)長短時記憶網(wǎng)絡(luò)(LSTM)判別式有監(jiān)督順序、時間序列、長時間依賴數(shù)據(jù)對有較大時間延遲的數(shù)據(jù)性能優(yōu)越通過邏輯門保護(hù)對內(nèi)存的訪問循環(huán)神經(jīng)網(wǎng)絡(luò)(RNN)判別式有監(jiān)督順序,時間序列通過內(nèi)存處理數(shù)據(jù)序列適用于在物聯(lián)網(wǎng)等有時間依賴關(guān)系數(shù)據(jù)的情況受限玻爾茲曼機(jī)(RBM)生成式有監(jiān)督無監(jiān)督多種適用于特征提取、降維和分類,訓(xùn)練過程開銷大深度信念網(wǎng)絡(luò)(DBN)生成式無監(jiān)督有監(jiān)督多種適用于層次式的特征發(fā)現(xiàn),逐層貪婪地訓(xùn)練網(wǎng)絡(luò)變分自編碼器(VAE)生成式半監(jiān)督多種一種特殊的自編碼器;適用于稀疏性的標(biāo)簽數(shù)據(jù)對抗神經(jīng)網(wǎng)絡(luò)(GAN)混合式半監(jiān)督多種適用于有噪聲的數(shù)據(jù);由兩個網(wǎng)絡(luò)構(gòu)成:一個為生成式,另一個為判別式MXNetR包c(diǎn)ran
<-
getOption
("repos")cran["dmlc"]
<-
"/apache-mxnet/R/CRAN/"options
(repos
=
cran)install.packages
("mxnet")
深度學(xué)習(xí)使用的包會包含更多的內(nèi)容和更復(fù)雜的依賴關(guān)系,所以一般需要較長的安裝時間。很多深度學(xué)習(xí)包都會帶有支持GPU多線程運(yùn)算的版本,需要更復(fù)雜的安裝過程。前饋神經(jīng)網(wǎng)絡(luò)mx.model.FeedForward.create(symbol,x,y=NULL,ctx=NULL,
begin.round=1,num.round=10,optimizer="sgd",
initializer=mx.init.uniform(0.01),eval.data=NULL,
eval.metric=NULL,epoch.end.callback=NULL,
batch.end.callback=NULL,array.batch.size=128,
array.layout="auto",kvstore="local",verbose=TRUE,
arg.params=NULL,aux.params=NULL,s=NULL,
s=NULL,fixed.param=NULL,allow.extra.params=FALSE,
...)
在MXNetR包中,用戶對神經(jīng)網(wǎng)絡(luò)的結(jié)構(gòu)和訓(xùn)練方式擁有更多的控制。mx.model.FeedForward.create()函數(shù)可用于構(gòu)造前饋神經(jīng)網(wǎng)絡(luò),也就是一般的多層感知器。函數(shù)需要額外參數(shù):輸出激活函數(shù)、迭代次數(shù)、學(xué)習(xí)因子、動量和設(shè)備類型等。前饋神經(jīng)網(wǎng)絡(luò)的參數(shù)參
數(shù)
名說
明symbol神經(jīng)網(wǎng)絡(luò)的符號式配置y標(biāo)簽數(shù)組x訓(xùn)練數(shù)據(jù)num.round訓(xùn)練模型使用的迭代次數(shù)optimizer表示優(yōu)化算法的字符串,默認(rèn)值為sgd,即隨機(jī)梯度下降initializer參數(shù)初始化方案epoch.end.callback迭代結(jié)束時的回調(diào)函數(shù)batch.end.callback小批量迭代結(jié)束時的回調(diào)函數(shù)array.layout批量布局,可選項(xiàng)auto、colmajor、rowmajoreval.metric可選的函數(shù),用于結(jié)果的評價回歸應(yīng)用:波士頓房價library
(mlbench)library
(mxnet)data
(BostonHousing,
package="mlbench")
#使用波士頓房價數(shù)據(jù)集train.ind
<-
seq
(1,
506,
3)
#劃分訓(xùn)練集,使用三分之一的數(shù)據(jù)train.x
<-
data.matrix
(BostonHousing[train.ind,
-14])train.y
<-
BostonHousing[train.ind,
14]
#訓(xùn)練集預(yù)期輸出test.x
<-
data.matrix(BostonHousing[-train.ind,
-14])test.y
<-
BostonHousing[-train.ind,
14]
#測試集預(yù)期輸出值
使用深度神經(jīng)網(wǎng)絡(luò)完成回歸任務(wù),預(yù)測波士頓房價。準(zhǔn)備數(shù)據(jù)集,劃分訓(xùn)練集和測試集。符號定義#定義輸入數(shù)據(jù)data
<-
mx.symbol.Variable("data")#定義一個全連接隱層#data:
輸入數(shù)據(jù)來源#num_hidden:
本隱層的神經(jīng)元個數(shù)fc1
<-
mx.symbol.FullyConnected
(data,
num_hidden=1)#使用線性回歸函數(shù)定義輸出lro
<-
mx.symbol.LinearRegressionOutput
(fc1)
符號在MXNet中扮演重要角色??梢造`活地使用符號體系建立起一個復(fù)雜的前饋神經(jīng)網(wǎng)絡(luò)。在符號設(shè)置時需要考慮到層與層之間節(jié)點(diǎn)的連接、激活函數(shù)的形式、丟棄比例等種種因素。設(shè)計(jì)神經(jīng)網(wǎng)絡(luò)mx.set.seed(0)
#使用MXNetR專用的隨機(jī)種子生成方式model
<-
mx.model.FeedForward.create
(lro,
X=train.x,
y=train.y,ctx=mx.cpu(),
#在CPU上訓(xùn)練num.round=50,
#允許迭代次數(shù)為50次array.batch.size=20,
#批量大小為20learning.rate=2e-6,
#學(xué)習(xí)因子momentum=0.9,
#動量eval.metric=mx.metric.rmse)
#用均方差根作為度量目標(biāo)線性回歸函數(shù)以誤差的平方為優(yōu)化目標(biāo)。把輸入層連接到輸出層。調(diào)用函數(shù)mx.model.FeedForward.create(),設(shè)置參數(shù)把網(wǎng)絡(luò)構(gòu)造出來。訓(xùn)練完成后可以進(jìn)行預(yù)測,preds<-predict(model,test.x)分類應(yīng)用:MNIST手寫體數(shù)字識別require(mxnet)
#加載所需的包train
<-
read.csv('data/train.csv',
header=TRUE)test
<-
read.csv('data/test.csv',
header=TRUE)train
<-
data.matrix(train)
#轉(zhuǎn)換成矩陣test
<-
data.matrix(test)train.x
<-
train[,-1]
#訓(xùn)練集的輸入與輸出train.y
<-
train[,1]
Kaggle維護(hù)的用于各種機(jī)器學(xué)習(xí)算法在圖形識別中的競賽的數(shù)據(jù)集。在數(shù)據(jù)集里,每一個數(shù)字用一個28×28像素的圖像表示。/c/digit-recognizer/data上可以看到有名為train.csv和test.csv的兩個文件。注冊并下載。數(shù)據(jù)預(yù)處理train.x
<-
t(train.x/255)test
<-
t(test/255)
>
table(train.y)
#統(tǒng)計(jì)需識別數(shù)字的頻數(shù)train.y0
1
2
3
4
5
6
7
8
9
4132
4684
4177
4351
4072
3795
4137
4401
4063
4188
因?yàn)閳D像使用灰度值,取值范圍在0~255之間,可以很容易地把數(shù)據(jù)歸一化。MXNet接受以列為主的格式,所以對矩陣進(jìn)行轉(zhuǎn)置操作??梢越y(tǒng)計(jì)出樣本中不同數(shù)字的分布。符號定義data
<-
mx.symbol.Variable("data")#輸入層數(shù)據(jù)data#第一層隱層:全連接,輸入數(shù)據(jù)data,激活函數(shù)ReLUfc1
<-
mx.symbol.FullyConnected(data,
name="fc1",
num_hidden=128)act1
<-
mx.symbol.Activation(fc1,
name="relu1",
act_type="relu")#第二層隱層:全連接,輸入數(shù)據(jù)act1,激活函數(shù)ReLUfc2
<-
mx.symbol.FullyConnected(act1,
name="fc2",
num_hidden=64)act2
<-
mx.symbol.Activation(fc2,
name="relu2",
act_type="relu")#輸出層:全連接,輸入數(shù)據(jù)act2,輸出函數(shù)softmaxfc3
<-
mx.symbol.FullyConnected(act2,
name="fc3",
num_hidden=10)softmax
<-
mx.symbol.SoftmaxOutput(fc3,
name="sm")
神經(jīng)網(wǎng)絡(luò)包含4層:輸入、隱層1、隱層2、輸出。層與層之間采用全連接方式,符號表示了依賴關(guān)系。可以設(shè)置各層的節(jié)點(diǎn)數(shù),還可以使用不同的激活函數(shù)。用softmax實(shí)現(xiàn)分類。訓(xùn)練神經(jīng)網(wǎng)絡(luò)devices
<-
mx.cpu()mx.set.seed(1000)model
<-
mx.model.FeedForward.create(softmax,
X=train.x,
y=train.y,ctx=devices,
num.round=10,
array.batch.size=100,learning.rate=0.07,
momentum=0.9,
eval.metric=mx.metric.accuracy,initializer=mx.init.uniform(0.07),epoch.end.callback=mx.callback.log.train.metric(100))使用CPU實(shí)現(xiàn)訓(xùn)練過程。在MXNet中,使用特殊的隨機(jī)種子生成函數(shù)mx.set.seed()來控制訓(xùn)練中的隨機(jī)過程。預(yù)測>
preds
<-
predict
(model,
test)>
pred.label
<-
max.col(t(preds))
-
1>
table(pred.label)pred.label
0
1
2
3
4
5
6
7
8
9
2826
3162
2802
2825
2713
2488
2736
2801
2807
2840
訓(xùn)練完成時可以達(dá)到非常好的精度。預(yù)測與其他模型類似,直接調(diào)用函數(shù)predict()即可。輸出是一個10列的矩陣,元素值表示了相應(yīng)數(shù)字的分類概率。使用函數(shù)max.col()
找到取值最大的那一列,就是手寫體的數(shù)字值。使用MXNet解決問題的步驟(1)數(shù)據(jù)預(yù)處理階段:設(shè)置訓(xùn)練集和測試集,對數(shù)據(jù)集進(jìn)行預(yù)處理。(2)結(jié)構(gòu)設(shè)計(jì)階段:使用符號體系建立每一層的結(jié)構(gòu)并設(shè)置層與層之間的數(shù)據(jù)依賴關(guān)系。(3)硬件分配:指定訓(xùn)練時所使用的設(shè)備。(4)訓(xùn)練階段:使用輸出符號、訓(xùn)練集、訓(xùn)練設(shè)備和其他訓(xùn)練選項(xiàng)作為參數(shù)創(chuàng)建神經(jīng)網(wǎng)絡(luò),按照選擇的控制參數(shù)完成訓(xùn)練。(5)測試階段:使用測試集預(yù)測,并評價網(wǎng)絡(luò)性能。keras包keras是Keras的R語言接口。允許在CPU或GPU上以無縫切換的方式運(yùn)行同樣的代碼。提供用戶友好的API,易于快速開發(fā)深度學(xué)習(xí)原型。支持卷積神經(jīng)網(wǎng)絡(luò)(針對計(jì)算機(jī)視覺應(yīng)用)、循環(huán)網(wǎng)絡(luò)(針對時間序列處理應(yīng)用)以及兩者的組合。支持任意形式的網(wǎng)絡(luò)架構(gòu),包括多輸入/多輸出模型、層與層共享、模型共享等,這實(shí)際意味著Keras適合于構(gòu)建幾乎任何深度學(xué)習(xí)模型,無論是存儲網(wǎng)絡(luò)還是神經(jīng)圖靈機(jī)。能夠在很多后端技術(shù)上運(yùn)行,包括TensorFlow、CNTK或Theano。下載與安裝install.packages
("keras")library
(keras)install_keras
()
安裝好keras包之后,還需要完成很多相互依賴的其他設(shè)置。數(shù)據(jù)集準(zhǔn)備library
(keras)
#加載keras包mnist
<-
dataset_mnist
()
#加載MNIST數(shù)據(jù)集x_train
<-
mnist$train$x
#訓(xùn)練集輸入y_train
<-
mnist$train$y
#訓(xùn)練集輸出x_test
<-
mnist$test$x
#測試集輸入y_test<-mnist$test$y
#測試集輸出
Keras提供了數(shù)據(jù)集。分布處理好訓(xùn)練集和測試集。x的類型是一個灰度值的三維數(shù)組(像素灰度值、寬度和高度)。y是一個整數(shù)型的向量,由整數(shù)0~9組成。調(diào)整維度與歸一化#調(diào)整形狀dim(x_train)
<-
c(nrow(x_train),
784)dim(x_test)
<-
c(nrow(x_test),
784)#歸一化x_train
<-
x_train
/
255x_test
<-
x_test
/
255
把三維數(shù)組轉(zhuǎn)化為矩陣。按照圖像的寬度和高度把圖像轉(zhuǎn)變?yōu)橐?,?8×28像素的圖像拉平成長度784的向量。然后實(shí)現(xiàn)歸一化。類別矩陣y_train
<-
to_categorical
(y_train,
10)y_test
<-
to_categorical
(y_test,
10)
直接調(diào)用to_categorical()函數(shù)就能把類別數(shù)據(jù)轉(zhuǎn)換成二值的分類矩陣。多層感知器設(shè)計(jì)model
<-
keras_model_sequential()
#初始化順序模型model
%>%
#
稠密層1,神經(jīng)元數(shù)256個,激活函數(shù)ReLU,
#
輸入一維向量,隨機(jī)舍棄40%神經(jīng)元節(jié)點(diǎn)
layer_dense(units
=
256,
activation
=
"relu",
input_shape
=
c(784))
%>%
layer_dropout(rate
=
0.4)
%>%
#稠密層2,神經(jīng)元數(shù)128個,激活函數(shù)ReLU,隨機(jī)舍棄30%神經(jīng)元節(jié)點(diǎn)
layer_dense(units
=
128,
activation
=
"relu")
%>%
layer_dropout(rate
=
0.3)
%>%
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 文庫發(fā)布:飛機(jī)介紹
- 2026上半年云南事業(yè)單位聯(lián)考云南大理大學(xué)招聘參考考試題庫及答案解析
- 2026福建兆佳貿(mào)易有限公司招聘項(xiàng)目制工作人員補(bǔ)充備考考試試題及答案解析
- 2026北京積水潭醫(yī)院聊城醫(yī)院博士研究生引進(jìn)22人考試參考試題及答案解析
- 普外科引流管護(hù)理的跨學(xué)科合作模式
- 2026年安徽潁濱市政工程有限公司公開招聘4名備考考試題庫及答案解析
- 2026湖南長沙市長郡芙蓉中學(xué)春季物理學(xué)科教師招聘備考考試題庫及答案解析
- 2026浙江寧波市升力同創(chuàng)科技咨詢服務(wù)有限公司招聘1人考試備考題庫及答案解析
- 2026湖北省奕派科技高級管理崗位招聘筆試參考題庫及答案解析
- 樂山修路施工方案(3篇)
- 2025年秋八年級全一冊信息科技期末測試卷(三套含答案)
- 2026年及未來5年市場數(shù)據(jù)中國海水淡化設(shè)備市場發(fā)展前景預(yù)測及投資戰(zhàn)略咨詢報告
- 2026年青島職業(yè)技術(shù)學(xué)院單招職業(yè)技能考試題庫含答案詳解
- 制造總監(jiān)年終總結(jié)
- 仇永鋒一針鎮(zhèn)痛課件
- 露天礦物開采輔助工技術(shù)考核試卷及答案
- 利潤分成增加合同范本
- DB45∕T 2177-2020 糖料甘蔗入廠規(guī)程
- 幕墻施工安全管理培訓(xùn)課件
- 員工考勤記錄表模板(2024Excel版)
- 數(shù)據(jù)拷貝保密協(xié)議書模板
評論
0/150
提交評論