第53章 大功告成
不過,在跑代碼之前,還要對(duì)數(shù)據(jù)進(jìn)行預(yù)處理。
江寒先從報(bào)名信息表中,將性別信息仍然“健在”的行挑出來,只保留序號(hào)、姓名和性別,另存為label.xls。
這些記錄一共9527條,大約占三萬多條數(shù)據(jù)總數(shù)的30%。
它們對(duì)應(yīng)著9527張真彩色照片。
24位真彩色的圖片,每個(gè)像素點(diǎn)在內(nèi)存里,要占用3個(gè)字節(jié)的存儲(chǔ)單元。
每張照片有210×120個(gè)像素,這樣讀入一張照片,需要的內(nèi)存空間就是210×120×3=75600個(gè)Byte。
9527條數(shù)據(jù),共需要9527×75600=720241200B≈686.88M≈0.7G!
這個(gè)內(nèi)存開銷,還是比較容易接受的。
但是,“感知機(jī)”的算法,需要進(jìn)行大量浮點(diǎn)乘法運(yùn)算。
對(duì)每個(gè)像素的每個(gè)RGB分量都算一遍?
沒那個(gè)必要,也太浪費(fèi)時(shí)間。
所以,聰明的做法,是先把照片數(shù)據(jù)“壓縮”一下。
江寒給“感知機(jī)”的代碼,添加了一個(gè)LoadData函數(shù),用來讀取和處理照片數(shù)據(jù)。
在這個(gè)函數(shù)里,先定義一個(gè)二維的整形數(shù)組Feature。
然后從label.xls中讀出序號(hào)、姓名信息,按照剛才建立的索引表,找到對(duì)應(yīng)的照片文件。
下一步,將照片讀取到內(nèi)存中,讀取的同時(shí),將每個(gè)像素二值化。
具體做法是:色彩濃度在閾值以上的像素,取值為1,低于閾值就讓它為0。
這樣一來,原本的真彩色照片,就被轉(zhuǎn)換成了黑白輪廓圖。
然后,再將輪廓圖中的0或者1的取值,按照從左到右、從上到下的順序,重新編排成一行數(shù)據(jù),存放到數(shù)組Feature中。
Feature中的每一行,都存儲(chǔ)了一張照片的二值化信息。
一共9527張照片,就需要9527行。
全部照片處理完畢后,就得到了一個(gè)巨大的二維數(shù)組Feature。
它有25200列、9527行。
接下來,定義一個(gè)擁有9527個(gè)整形元素的一維數(shù)組Label。
從label.xls中讀入性別信息,男生設(shè)為1,女生設(shè)為0,存放在數(shù)組Label中。
Feature加上對(duì)應(yīng)的Label,就構(gòu)成了訓(xùn)練數(shù)據(jù)集。
訓(xùn)練“感知機(jī)”時(shí),將一行行Feature代入公式中,進(jìn)行加權(quán)和運(yùn)算,其結(jié)果再通過sign函數(shù),轉(zhuǎn)換為0或1,然后和對(duì)應(yīng)的Label值對(duì)照。
如果不相符,就調(diào)整權(quán)重和偏置,然后重新計(jì)算。
當(dāng)每一個(gè)Feature代入公式后,都能計(jì)算出正確的Label時(shí),就得到了一組權(quán)重和偏置。
也就是說,構(gòu)建出了一個(gè)可用的數(shù)學(xué)模型。
依據(jù)這個(gè)模型,計(jì)算機(jī)就可以讀入任何一張同尺寸、類型的照片,對(duì)其二值化的數(shù)據(jù)代入模型中運(yùn)算,并根據(jù)運(yùn)算結(jié)果判斷分類歸屬。
這就是典型的機(jī)器學(xué)習(xí)過程,計(jì)算機(jī)從數(shù)據(jù)中自己“學(xué)”到了某種規(guī)律。
即使這種規(guī)律,人類并不一定完全理解,也不見得能用數(shù)學(xué)語言解釋清楚……
剩下的就比較簡單了。
接下來,江寒又添加了幾個(gè)函數(shù),用來輸出運(yùn)算結(jié)果、觀察運(yùn)行情況等。
最后,從頭調(diào)試了一遍,確認(rèn)沒啥bug后,將代碼重新編譯,然后運(yùn)行了起來。
屏幕上有一些數(shù)字,表示當(dāng)前正在處理的數(shù)據(jù),和訓(xùn)練進(jìn)度的百分比。
十分鐘后,后一個(gè)數(shù)字才剛剛達(dá)到1.3%。
這表示,完整訓(xùn)練一遍,大約需要13個(gè)小時(shí)……
之所以這么慢,主要是江寒的程序,比較追求穩(wěn)定性,以及調(diào)試的方便、快捷,并沒特別講究執(zhí)行效率。
當(dāng)然,即使他用心優(yōu)化,估計(jì)也需要8個(gè)小時(shí)以上,才能完成訓(xùn)練。
雖然有點(diǎn)慢,但其實(shí)沒什么關(guān)系,訓(xùn)練過程并不需要人工干預(yù),掛機(jī)等著就行。
第二天早晨,江寒起床后,先看了下訓(xùn)練進(jìn)度,還差了大約13%才能完成,就先去班級(jí)上課。
中午吃完飯回來,訓(xùn)練終于結(jié)束了。
而存放權(quán)重和偏置參數(shù)的Weight數(shù)組,也以內(nèi)存映像的方式,保存在了一個(gè)二進(jìn)制文件中。
接下來就簡單了。
重建一個(gè)一模一樣的感知機(jī)模型,加載上這個(gè)權(quán)重文件,就可以用它來判斷剩余照片的性別了。
江寒重新改寫代碼,然后運(yùn)行。
這次十分迅速,只用了不到20分鐘,就將兩萬一千來張照片,全部處理完畢。
這就是“感知機(jī)”,或者說“人工神經(jīng)網(wǎng)絡(luò)”的特點(diǎn)。
訓(xùn)練起來特別耗時(shí),一旦訓(xùn)練完成,工作起來非常快捷。
至于正確率,江寒初步估計(jì),大大超過99%,21000條未經(jīng)訓(xùn)練的數(shù)據(jù)里,判斷出錯(cuò)的,絕不超過10人。
比人類肉眼的識(shí)別率低不到哪里去。
事實(shí)上,“感知機(jī)”或者說“人工神經(jīng)網(wǎng)絡(luò)”的錯(cuò)誤率,跟訓(xùn)練數(shù)據(jù)、測試數(shù)據(jù)的質(zhì)量有很大關(guān)系。
如果比較規(guī)范,達(dá)到100%的識(shí)別率都不算稀奇。
可惜實(shí)際運(yùn)用中,總有個(gè)別實(shí)例,奇葩得超乎想象。
有的時(shí)候,人類都幾乎無法識(shí)別!
根據(jù)老高的說法,這區(qū)區(qū)幾個(gè)錯(cuò)誤的,可以在把名單下達(dá)到各校后,根據(jù)反饋修改一下就行。
如果沒有這個(gè)托底,就沒法使用“感知機(jī)”,因?yàn)闆]辦法判斷,哪些人被誤分類了……
得到了全部照片的性別數(shù)據(jù)后,江寒將其粘貼到了《報(bào)名信息表》中。
大功告成后,江寒沒急著找高老師復(fù)命。
這么快就搞定,老高肯定會(huì)十分震驚,然后追問前因后果。
“感知機(jī)”解釋起來太費(fèi)勁,而且也沒那么高大上,還用不著見人就推銷。
關(guān)鍵老高一個(gè)人貢獻(xiàn)的那點(diǎn)震驚值,江寒現(xiàn)在已經(jīng)有點(diǎn)看不上眼了。
休息了一會(huì)兒后,江寒就拿著《noip通關(guān)寶典》,回班級(jí)繼續(xù)刷題。
※※※※※
“杠上開”是一個(gè)營銷號(hào)主。
什么是營銷號(hào)?
百科上說,一般是指組織機(jī)構(gòu)或者個(gè)人對(duì)外宣傳散發(fā)信息所用的賬號(hào),具有目的性,一般是用來宣傳產(chǎn)品或服務(wù)的。
狹義上說,就是純粹以賺錢為目的,專門在各大視頻站上傳垃圾內(nèi)容的人。
內(nèi)容粗制濫造?那是基本操作;
虛假宣傳和科普?那是日常作業(yè);
動(dòng)不動(dòng)危言聳聽、各種震驚?這根本就不算事兒。
沒事兒當(dāng)當(dāng)水軍,引導(dǎo)引導(dǎo)輿論,才是他們的主要業(yè)務(wù)。
反正很多事情,很多人既不了解,也不具備判別能力,還不是哪邊人多信哪邊……
你說網(wǎng)友們義憤填膺?
上面都不管,網(wǎng)友算老幾,錢到手才是真的。
為什么網(wǎng)站不整治?
一個(gè)是很難區(qū)分,容易誤傷正常的up主;
再一個(gè),網(wǎng)站跟流量什么仇、什么怨……
“杠上開”就是這樣一個(gè)營銷號(hào),每天出沒于各個(gè)視頻站,P站算是他最重要的基本盤。
他最常做的,就是接受客戶的委托,然后不擇手段地完成任務(wù)。
視頻網(wǎng)站給的那點(diǎn)補(bǔ)貼,他根本沒放在眼里,客戶的賞金才是大頭。
今天,他做完“作業(yè)”,上傳完幾個(gè)視頻,然后隨便在P站逛了一會(huì)兒。
忽然,一個(gè)點(diǎn)擊、投幣超高的視頻,躍入了眼簾。
本月熱門?
“杠上開”來了點(diǎn)興趣。
仔細(xì)一看標(biāo)題,頓時(shí)有點(diǎn)無語。
《舊光驅(qū)改造寫字機(jī)器人》……真夠夸張的,你怎么不改造成航母呢?
不過,好奇之下,他還是點(diǎn)開了視頻,看了一眼。
結(jié)果,一看之下,他瞬間就驚呆了。
臥槽,還真是個(gè)高手,這動(dòng)手能力有點(diǎn)逆天了。
本著一個(gè)營銷號(hào)的職業(yè)精神,“杠上開”感到了一種久違的使命感。
必須做點(diǎn)什么。
沒錯(cuò),這么有創(chuàng)意的視頻,不盜上一把,他簡直渾身藍(lán)瘦!
不過,簡單的重發(fā)是不行的,網(wǎng)站的審核員職位,也不是白設(shè)置的。
所以,還需要用點(diǎn)技巧,稍微加工、處理一下……