免费观看又色又爽又黄的小说免费_美女福利视频国产片_亚洲欧美精品_美国一级大黄大色毛片

spl中如何實(shí)現(xiàn)手寫(xiě)數(shù)字識(shí)別-創(chuàng)新互聯(lián)

這篇文章給大家分享的是有關(guān)spl中如何實(shí)現(xiàn)手寫(xiě)數(shù)字識(shí)別的內(nèi)容。小編覺(jué)得挺實(shí)用的,因此分享給大家做個(gè)參考,一起跟隨小編過(guò)來(lái)看看吧。

成都創(chuàng)新互聯(lián)公司專注于馬邊彝族網(wǎng)站建設(shè)服務(wù)及定制,我們擁有豐富的企業(yè)做網(wǎng)站經(jīng)驗(yàn)。 熱誠(chéng)為您提供馬邊彝族營(yíng)銷型網(wǎng)站建設(shè),馬邊彝族網(wǎng)站制作、馬邊彝族網(wǎng)頁(yè)設(shè)計(jì)、馬邊彝族網(wǎng)站官網(wǎng)定制、小程序設(shè)計(jì)服務(wù),打造馬邊彝族網(wǎng)絡(luò)公司原創(chuàng)品牌,更為您提供馬邊彝族網(wǎng)站排名全網(wǎng)營(yíng)銷落地服務(wù)。

識(shí)別手寫(xiě)的阿拉伯?dāng)?shù)字,對(duì)于人類來(lái)說(shuō)十分簡(jiǎn)單,但是對(duì)于程序來(lái)說(shuō)還是有些復(fù)雜的。

spl中如何實(shí)現(xiàn)手寫(xiě)數(shù)字識(shí)別

不過(guò)隨著機(jī)器學(xué)習(xí)技術(shù)的普及,使用10幾行代碼,實(shí)現(xiàn)一個(gè)能夠識(shí)別手寫(xiě)數(shù)字的程序,并不是一件難事。這是因?yàn)橛刑嗟臋C(jī)器學(xué)習(xí)模型可以拿來(lái)直接用,比如tensorflow、caffe,在python下都有現(xiàn)成的安裝包,寫(xiě)一個(gè)識(shí)別數(shù)字的程序,10幾行代碼足夠了。

然而我想做的,是不借助任何第三方的庫(kù),從零開(kāi)始,完全自己實(shí)現(xiàn)一個(gè)這樣的程序。之所以這么做,是因?yàn)樽约簞?dòng)手實(shí)現(xiàn),才能深入了解機(jī)器學(xué)習(xí)的原理。

1 模型實(shí)現(xiàn)

1.1 原理

熟悉神經(jīng)網(wǎng)絡(luò)回歸算法的,可以略過(guò)這一節(jié)了。

學(xué)習(xí)了一些基本概念,決定使用回歸算法。首先下載了著名的MNIST數(shù)據(jù)集,這個(gè)數(shù)據(jù)集有60000個(gè)訓(xùn)練樣本,和10000個(gè)測(cè)試樣本。每個(gè)數(shù)字圖片都是28*28的灰度圖片,所以輸入可以認(rèn)為是一個(gè)28*28的矩陣,也可以認(rèn)為是一個(gè)28*28=784個(gè)像素值。

這里定義一個(gè)模型用于判斷一個(gè)圖片數(shù)字,每個(gè)模型包括每個(gè)輸入的權(quán)重,加一個(gè)截距,最后再做個(gè)歸一。模型的表達(dá)式:

Out5= sigmoid(X0*W0+ X1*W1+……X783*W783+bias)

X0到X783是784個(gè)輸入,W0到W783是784個(gè)權(quán)重,bias是一個(gè)常量。sigmoid函數(shù)可以將較大范圍的數(shù)擠壓到(0,1)區(qū)間內(nèi),也就是歸一。

例如我們用這一組權(quán)重和bias來(lái)判斷數(shù)字5,期望當(dāng)圖片是5時(shí)輸出是1,當(dāng)不是5時(shí)輸出是0。然后訓(xùn)練的過(guò)程就是根據(jù)每個(gè)樣本的輸入,計(jì)算Out5的值和正確值(0或1)的差距,然后根據(jù)這個(gè)差距,調(diào)整權(quán)重和bias。轉(zhuǎn)換一下公式,就是在努力使得(Out5-正確值)接近于0,即所謂損失最小。

同理,10個(gè)數(shù)字就要有10套模型,每個(gè)判斷不同的數(shù)字。訓(xùn)練好以后,一個(gè)圖片來(lái)了,用這10套模型進(jìn)行計(jì)算,哪個(gè)模型計(jì)算的結(jié)果更接近于1,就認(rèn)為這個(gè)圖片是哪個(gè)數(shù)字。

1.2 訓(xùn)練

按照上面的思路,使用集算器的SPL(結(jié)構(gòu)化處理語(yǔ)言)來(lái)編碼實(shí)現(xiàn):


A

B

C

1

=file("train-imgs.btx").cursor@bi()



2

>x=[],wei=[],bia=[],v=0.0625,cnt=0



3

for 10

>wei.insert(0,[to(28*28).(0)]),

bia.insert(0,0.01)


4

for 50000

>label=A1.fetch(1)(1)


5


>y=to(10).(0), y(label+1)=1,x=[]


6


>x.insert(0,A1.fetch(28*28))

>x=x.(~/255)

7


=wei.(~**x).(~.sum()) ++ bia


8


=B7.(1/(1+exp(-~)))


9


=(B8--y)**(B8.(1-~))**B8


10


for 10

>wei(B10)=wei(B10)--x.(~*v*B9(B10)),

bia(B10)=bia(B10) - v*B9(B10)

11

>file("MNIST模型.btx").export@b(wei),file("MNIST模型.btx").export@ba(bia)

不用再找了,訓(xùn)練模型的所有代碼都在這里了,沒(méi)有用到任何第三方庫(kù),下面解析一下:

A1,用游標(biāo)導(dǎo)入MNIST訓(xùn)練樣本,這個(gè)是我轉(zhuǎn)換過(guò)的格式,可以被集算器直接訪問(wèn);

A2,定義變量:輸入x,權(quán)重wei,訓(xùn)練速度v,等;

A3,B3,初始化10組模型(每組是784個(gè)權(quán)重+1個(gè)bias);

A4,循環(huán)取5萬(wàn)個(gè)樣本進(jìn)行訓(xùn)練,10模型同時(shí)訓(xùn)練;

B4,取出來(lái)label,即這個(gè)圖片是幾;

B5,計(jì)算正確的10個(gè)輸出,保存到變量y;

B6,取出來(lái)這個(gè)圖片的28*28個(gè)像素點(diǎn)作為輸入,C6把每個(gè)輸入除以255,這是為了歸一化;

B7,計(jì)算X0*W0+ X1*W1+……X783*W783+bias

B8,計(jì)算sigmoid(B7)

B9,計(jì)算B8的偏導(dǎo),或者叫梯度;

B10,C10,根據(jù)B9的值,循環(huán)調(diào)整10個(gè)模型的參數(shù);

A11,訓(xùn)練完畢,把模型保存到文件。

1.3 測(cè)試

測(cè)試一下這個(gè)模型的成功率吧,用 SPL 寫(xiě)了一個(gè)測(cè)試程序:


A

B

C

1

=file("MNIST模型.btx").cursor@bi()

=[0,1,2,3,4,5,6,7,8,9]


2

>wei=A1.fetch(10),bia=A1.fetch(10)



3

>cnt=0



4

=file("test-imgs.btx").cursor@bi()



5

for 10000

>label=A4.fetch(1)(1)


6


>x=[]


7


>x.insert(0,A4.fetch(28*28))

>x=x.(~/255)

8


=wei.(~**x).(~.sum()) ++ bia


9


=B8.(round(1/(1+exp(-~)), 2))


10


=B9.pmax()


11


if label==B1(B10)

>cnt=cnt+1

12

=A1.close()



13

=output(cnt/100)



運(yùn)行測(cè)試,正確率達(dá)到了91.1%,我對(duì)這個(gè)結(jié)果是很滿意的,畢竟這只是一個(gè)單層模型,我用TensorFlow的單層模型得到的正確率也是91%多一點(diǎn)。下面解析一下代碼:

A1,導(dǎo)入模型文件;

A2,把模型提取到變量里;

A3,計(jì)數(shù)器初始化(用于計(jì)算成功率);

A4,導(dǎo)入MNIST測(cè)試樣本,這個(gè)文件格式是我轉(zhuǎn)換過(guò)的;

A5,循環(huán)取1萬(wàn)個(gè)樣本進(jìn)行測(cè)試;

B5,取出來(lái)label;

B6,清空輸入;

B7,取出來(lái)這個(gè)圖片的28*28個(gè)像素點(diǎn)作為輸入,每個(gè)輸入除以255,這是為了歸一化;

B8,計(jì)算X0*W0+ X1*W1+……X783*W783+bias

B9,計(jì)算sigmoid(B7)

B10,得到大值,即最可能的那個(gè)數(shù)字;

B11,判斷正確測(cè)計(jì)數(shù)器加一;

A12,A13,測(cè)試結(jié)束,關(guān)閉文件,輸出正確率。

1.4 優(yōu)化

這里要說(shuō)的優(yōu)化并不是繼續(xù)提高正確率,而是提升訓(xùn)練的速度。想提高正確率的同學(xué)可以嘗試一下這幾個(gè)手段:

1.      加一個(gè)卷積層;

2.      學(xué)習(xí)速度不要用固定值,而是隨著訓(xùn)練次數(shù)遞減;

3.      權(quán)重的初始值不要使用全零,使用正態(tài)分布;

我認(rèn)為單純追求正確率的意義不大,因?yàn)镸NIST數(shù)據(jù)集有些圖片本身就有問(wèn)題,即使人工也不一定能知道寫(xiě)的是數(shù)字幾。我用集算器顯示了幾張出錯(cuò)的圖片,都是書(shū)寫(xiě)十分不規(guī)范的,下面這個(gè)圖片很難看出來(lái)是2。

spl中如何實(shí)現(xiàn)手寫(xiě)數(shù)字識(shí)別

下面說(shuō)重點(diǎn),要提高訓(xùn)練速度,可以使用并行或集群。使用SPL語(yǔ)言實(shí)現(xiàn)并行很簡(jiǎn)單,只要使用fork關(guān)鍵字,把上面的代碼稍加處理就可以了。


A

B

C

D

1

=file("train-imgs.btx").cursor@bi()




2

>x=[],wei=[],bia=[],v=0.0625,cnt=0

>mode=to(0,9)



3


>wei=to(28*28).(0)



4

fork mode

=A1.cursor()



5


for 50000

>label=B4.fetch(1)(1)

>y=1,x=[]

6



if label!=A4

>y=0

7



>x.insert(0,B4.fetch(28*28))

>x=x.(~/255)

8



=(wei**x).sum() + bia


9



=1/(1+exp(-C8))


10



=(C9-y)*((1-C9))*C9


11



>wei=wei--x.(~*v*C10),

bia=bia- v*C10


12


return wei,bia



13

=movefile(file("MNIST模型.btx"))


14

for 10

>file("MNIST模型.btx").export@ba([A4(A15)(1)])

15

for 10

>file("MNIST模型.btx").export@ba([A4(A16)(2)])

使用了并行之后,訓(xùn)練的時(shí)間減少差不多一半,而代碼并沒(méi)有做太多修改。

2 為什么是 SPL 語(yǔ)言?

使用SPL語(yǔ)言在初期可能會(huì)有點(diǎn)不適應(yīng),用得多了會(huì)覺(jué)得越來(lái)越方便:

1.      支持集合運(yùn)算,比如例子里用到的784個(gè)輸入和784個(gè)權(quán)重的乘法,直接寫(xiě)一個(gè)**就可以了,如果使用Java或者C,還要自己實(shí)現(xiàn)。

2.      數(shù)據(jù)的輸入輸出很方便,可以方便地對(duì)文件讀寫(xiě)。

3.      調(diào)試太方便了,所有變量都直觀可見(jiàn),這一點(diǎn)比python要好用。

4.      可以單步計(jì)算,有了改動(dòng)不用從頭重來(lái),Java和C做不到這一點(diǎn),python雖然可以但也不方便,集算器只要點(diǎn)中相應(yīng)格執(zhí)行就可以了。

5.      實(shí)現(xiàn)并行和集群很方便,不需要太多的開(kāi)發(fā)工作量。

6.      支持調(diào)用和被調(diào)用。集算器可以調(diào)用第三方j(luò)ava庫(kù),Java也可以調(diào)用集算器的代碼,例如上面的代碼就可以被Java調(diào)用,實(shí)現(xiàn)一個(gè)自動(dòng)填驗(yàn)證碼的功能。

這樣的編程語(yǔ)言,用在數(shù)學(xué)計(jì)算上,實(shí)在是最合適不過(guò)了。

感謝各位的閱讀!關(guān)于“spl中如何實(shí)現(xiàn)手寫(xiě)數(shù)字識(shí)別”這篇文章就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,讓大家可以學(xué)到更多知識(shí),如果覺(jué)得文章不錯(cuò),可以把它分享出去讓更多的人看到吧!

另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)scvps.cn,海內(nèi)外云服務(wù)器15元起步,三天無(wú)理由+7*72小時(shí)售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國(guó)服務(wù)器、虛擬主機(jī)、免備案服務(wù)器”等云主機(jī)租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡(jiǎn)單易用、服務(wù)可用性高、性價(jià)比高”等特點(diǎn)與優(yōu)勢(shì),專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場(chǎng)景需求。

標(biāo)題名稱:spl中如何實(shí)現(xiàn)手寫(xiě)數(shù)字識(shí)別-創(chuàng)新互聯(lián)
分享路徑:http://m.newbst.com/article48/dchhhp.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供微信小程序手機(jī)網(wǎng)站建設(shè)品牌網(wǎng)站建設(shè)、App開(kāi)發(fā)、企業(yè)網(wǎng)站制作、網(wǎng)頁(yè)設(shè)計(jì)公司

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

成都seo排名網(wǎng)站優(yōu)化