去评论
dz插件网

从零开始:用Python搭建神经网络

Crystαl
2024/08/17 19:08:21




Python閮ㄨ惤(python.freelycode.com)缁勭粐缈昏瘧锛岀姝㈣浆杞斤紝娆㈣繋杞彂銆


鍦ㄨ繖绡囧崥瀹㈤噷锛屾垜浠皢浠庨浂寮濮嬫惌寤轰竴涓笁灞傜殑绁炵粡缃戠粶銆傛垜浠笉浼氬鐢ㄥ埌鐨勬暟瀛﹀師鐞嗕竴涓璧樿堪锛屼絾鎴戜繚璇佷綘鍙互鐩磋鍦颁簡瑙e埌鎴戜滑鍦ㄥ仛浠涔堛傚彟澶栵紝浣犱篃鍙互閫氳繃鏂囩珷鍐呯殑閾炬帴鏉ヨ幏鍙栨洿璇︾粏鐨勪俊鎭
杩欏効鎴戝氨鍋囧畾浣犲凡缁忕啛鎮夊熀纭鐨勫井绉垎鍜屾満鍣ㄥ涔犵殑涓浜涙蹇碉紝姣斿鍒嗙被鍜岃鑼冨寲锛屾渶濂借繕鑳芥噦寰椾竴浜涗紭鍖栫缁忕綉缁滅殑鎶鏈紝姣斿姊害涓嬮檷娉曘傚綋鐒讹紝鍗充究浣犲浠ヤ笂鎻愬埌鐨勮繖浜涢兘涓嶆槸寰堜簡瑙o紝鎴戠浉淇′綘杩樻槸鑳戒粠杩欑瘒鏂囩珷鎵惧埌涔愬瓙鐨;-)
閭d粠澶存潵鍋氬埌搴曟湁浠涔堟剰涔夛紵鎴戞兂锛屽嵆渚挎槸浠ュ悗浣跨敤绁炵粡缃戠粶搴撴潵鍋氬紑鍙戯紝姣斿PyBrain锛屼竴娆★紙鐢氳嚦澶氭锛変粠澶村紑濮嬫惌寤虹綉缁滅殑缁忓巻浠嶇劧鍙互浣滀负鏋佸叾瀹濊吹鐨勭粌涔犵粡楠屻傚畠鑳藉甯姪浣犳洿濂藉湴浜嗚В绁炵粡缃戠粶鐨勮繍浣滄満鍒躲傝岃繖涔熸槸璁捐楂樻晥鐨勬ā鍨嬪繀缁忎箣璺
鏈枃鎵灞曠ず鐨勫疄渚嬩唬鐮佽拷姹傜畝鍗曟槗鎳傦紝鍥犳鍦ㄦ晥鐜囦笂浼氭墦鎶樻墸銆傚湪鎴戠殑涓嬩竴绡囨帹鏂囦腑锛屾垜灏嗗睍绀哄浣曢氳繃Theano鏉ュ疄鐜颁竴涓珮鏁堢巼鐨勭缁忕綉缁溿

鐢熸垚鏁版嵁闆

璁╂垜浠粠鐢熸垚鎵闇瑕佺殑鏁版嵁闆嗗紑濮嬪惂銆傚垢杩愮殑鏄紝scikit-learn鎻愪緵浜嗕竴浜涘緢鏈夌敤鐨勬暟鎹泦鐢熸垚鍣紝璁╂垜浠笉蹇呬负涔嬪啀閫犺疆瀛愶紝鎴戜滑鍏堣瘯璇make_moons





鐢熸垚浜嗕袱绫绘暟鎹泦锛屽垎鍒敤绾㈢偣鍜岃摑鐐硅〃绀恒備綘鍙互鎶婅摑鐐规兂璞℃垚鐢锋х梾浜猴紝绾㈢偣鎯宠薄鎴愬コ鎬х梾浜猴紝鎶妜杞村拰y杞存兂璞℃垚鑽墿娌荤枟鍓傞噺銆
鎴戜滑甯屾湜閫氳繃璁粌浣垮緱鏈哄櫒瀛︿範鍒嗙被鍣ㄨ兘澶熷湪缁欏畾鐨剎杞磞杞村潗鏍囦笂棰勬祴姝g‘鐨勫垎绫绘儏鍐点傛垜浠棤娉曠敤鐩寸嚎灏辨妸鏁版嵁鍒掑垎锛屽彲瑙佽繖浜涙暟鎹牱鏈憟闈炵嚎鎬с傞偅涔堬紝闄ら潪浣犳墜鍔ㄦ瀯閫犻潪绾挎у姛鑳斤紙渚嬪澶氶」寮忥級锛屽惁鍒欙紝璇稿閫昏緫鍥炲綊锛Logistic Regression锛夎繖绫荤嚎鎬у垎绫诲櫒灏嗘棤娉曢傜敤浜庤繖涓渚嬨
浜嬪疄涓婏紝杩欎篃姝f槸绁炵粡缃戠粶鐨勪竴澶т富瑕佷紭鍔裤傜缁忕綉缁滅殑闅愯棌灞備細涓轰綘鍘诲涔犵壒寰侊紝鎵浠ヤ綘涓嶉渶瑕佷负鏋勯犵壒寰佽繖浠朵簨鍘绘搷蹇冦

閫昏緫鍥炲綊

涓轰簡璇佹槑锛堝涔犵壒寰侊級杩欑偣锛岃鎴戜滑鏉ヨ缁冧竴涓昏緫鍥炲綊鍒嗙被鍣ㄥ惂銆備互x杞达紝y杞寸殑鍊间负杈撳叆锛屽畠灏嗚緭鍑洪娴嬬殑绫伙紙0鎴1锛夈備负浜嗙畝鍗曡捣瑙侊紝杩欏効鎴戜滑灏嗙洿鎺ヤ娇鐢scikit-learn閲岄潰鐨勯昏緫鍥炲綊鍒嗙被鍣ㄣ





鍥捐〃鍚戞垜浠睍绀轰簡閫昏緫鍥炲綊鍒嗙被鍣ㄧ粡杩囧涔犳渶缁堝緱鍒扮殑鍐崇瓥杈圭晫銆傚敖绠″畠灏藉彲鑳藉湴灏嗘暟鎹尯鍒嗕负涓ょ被锛屽嵈涓嶈兘鎹曡幏鍒版暟鎹憟鈥滄湀浜舰鐘垛濈殑鐗规с

璁粌涓涓缁忕綉缁

鐜板湪锛屾垜浠惌寤虹敱涓涓緭鍏ュ眰锛屼竴涓殣钘忓眰锛屼竴涓緭鍑哄眰缁勬垚鐨勪笁灞傜缁忕綉缁溿傝緭鍏ュ眰涓殑鑺傜偣鏁扮敱鏁版嵁鐨勭淮搴︽潵鍐冲畾锛屼篃灏辨槸2涓傜浉搴旂殑锛岃緭鍑哄眰鐨勮妭鐐规暟鍒欐槸鐢辩被鐨勬暟閲忔潵鍐冲畾锛屼篃鏄2涓傦紙鍥犱负鎴戜滑鍙湁涓涓娴0鍜1鐨勮緭鍑鸿妭鐐癸紝鎵浠ユ垜浠彧鏈変袱绫昏緭鍑猴紝瀹為檯涓紝涓や釜杈撳嚭鑺傜偣灏嗘洿鏄撲簬鍦ㄥ悗鏈熻繘琛屾墿灞曚粠鑰岃幏寰楁洿澶氱被鍒殑杈撳嚭锛夈備互x锛寉鍧愭爣浣滀负杈撳叆锛岃緭鍑虹殑鍒欐槸涓ょ姒傜巼锛屼竴绉嶆槸0锛堜唬琛ㄥコ锛夛紝鍙︿竴绉嶆槸1锛堜唬琛ㄧ敺锛夈傜粨鏋滃涓嬶細



鎴戜滑鍙互閫夋嫨闅愯棌灞傜殑缁村害銆傛斁杩涘幓鐨勮妭鐐硅秺澶氾紝瀹炵幇鐨勫姛鑳藉氨鍙互瓒婂鏉傘備絾鏄淮搴﹁繃楂樹篃鏄細鏈変唬浠风殑銆傞鍏堬紝鏇村鐨勯娴嬩互鍙婂涔犵綉缁滃弬鏁版剰鍛崇潃鏇撮珮鐨勮绠楀己搴︼紝鏇村鐨勫弬鏁颁篃浼氬甫鏉ヨ繃鎷熷悎鐨勯闄┿
閭d箞璇ュ浣曞垽鏂殣钘忓眰鐨勮妯″憿锛熷敖绠℃讳細鏈夎澶氶氱敤鎬у緢濂界殑寮曞鍜屾帹鑽愶紝浣嗛棶棰樼殑宸紓鎬т篃涓嶈琚拷瑙嗐傚湪鎴戠湅鏉ワ紝閫夋嫨瑙勬ā杩欎欢浜嬬粷涓嶄粎浠呮槸闂ㄧ瀛︼紝瀹冩洿鍍忔槸涓闂ㄨ壓鏈傞氳繃寰呬細鍎跨殑婕旂ず锛屾垜浠彲浠ョ湅鍒伴殣钘忓眰閲岀殑鑺傜偣鏁版槸鎬庝箞褰卞搷鎴戜滑鐨勮緭鍑虹殑銆
鍙﹀锛屾垜浠繕闇瑕佷负闅愯棌灞傞夋嫨婵娲诲嚱鏁帮紙activation function锛夈傛縺娲诲嚱鏁颁細灏嗚緭鍏ヨ浆鍖栨垚杈撳嚭銆傞潪绾挎х殑婵娲诲嚱鏁板彲浠ュ府鍔╂垜浠鐞嗛潪绾挎х殑鍋囪銆傞氬父閫夌敤鐨勬縺娲诲嚱鏁版湁tanh, the sigmoid function, ReLUs銆傚湪杩欓噷鎴戜滑灏嗕娇鐢╰anh杩欐牱涓涓傜敤鎬у緢濂藉湴鍑芥暟銆傝繖浜涘嚱鏁版湁涓涓紭鐐癸紝灏辨槸閫氳繃鍘熷鐨勫嚱鏁板间究鍙互璁$畻鍑哄畠浠殑瀵兼暟銆備緥濡倀anh鐨勫鏁板氨鏄1-tanh2x銆傝繖璁╂垜浠彲浠ュ湪鎺ㄧ畻鍑簍anh鈦涓娆″悗灏遍噸澶嶅埄鐢ㄨ繖涓緱鍒板鏁板笺
閴翠簬鎴戜滑甯屾湜鎴戜滑鐨勭綉缁滆緭鍑虹殑鍊间负姒傜巼锛屾墍浠ユ垜浠皢浣跨敤softmax浣滀负杈撳嚭灞傜殑婵娲诲嚱鏁帮紝杩欎釜鍑芥暟鍙互灏嗗師濮嬬殑鏁板艰浆鍖栦负姒傜巼銆傚鏋滀綘寰堢啛鎮夐昏緫鍥炲綊鍑芥暟锛屼綘鍙互鎶婂畠褰撳仛鏄昏緫鍥炲綊鐨勪竴鑸舰寮忋

鎴戜滑鐨勭綉缁滄槸濡備綍鍋氬嚭棰勬祴鐨勫憿锛

绁炵粡缃戠粶閫氳繃鍓嶅悜浼犳挱鍋氬嚭棰勬祴銆傚墠鍚戜紶鎾粎浠呮槸鍋氫簡涓鍫嗙煩闃典箻娉曞苟浣跨敤浜嗘垜浠箣鍓嶅畾涔夌殑婵娲诲嚱鏁般傚鏋滆缃戠粶鐨勮緭鍏鏄簩缁寸殑锛岄偅涔堟垜浠彲浠ラ氳繃浠ヤ笅鏂规硶鏉ヨ绠楀叾棰勬祴鍊





zi鏄i灞傜殑杈撳叆锛宎i鏄灞傚簲鐢ㄦ縺娲诲嚱鏁板悗鐨勮緭鍑篿锛學i,bi鏄渶瑕佹垜浠氳繃璁粌鏁版嵁鏉ヨ幏鍙栫殑绁炵粡缃戠粶鍙傛暟锛屼綘鍙互鎶婂畠浠綋浣滃湪缃戠粶鐨勫眰涓庡眰涔嬮棿鐢ㄤ簬杞寲鏁版嵁鐨勭煩闃点傝繖浜涚煩闃电殑缁村害鍙互閫氳繃涓婇潰鐨勭煩闃典箻娉曠湅鍑烘潵銆傚鏋滄垜浠湪闅愯棌灞備笂浣跨敤500涓妭鐐癸紝閭d箞灏辨湁

,

,

,

銆傚彲浠ョ湅鍑猴紝闅愯棌灞傜殑瑙勬ā涓庡彲浠ョ敤鍦ㄩ殣钘忓眰鐨勮妭鐐规暟鏄憟姝g浉鍏崇殑銆

鐮旂┒鍙傛暟

鐮旂┒鍙傛暟鏄负浜嗘壘鍒拌兘澶熶娇鎴戜滑鐨勮缁冩暟鎹泦閿欒鐜囨渶灏忓寲鐨勫弬鏁帮紙

锛夈備絾璇ュ浣曞畾涔夐敊璇憿锛熸垜浠湪杩欓噷浼氱敤鎹熷け鍑芥暟锛loss function锛夋潵妫娴嬮敊璇傞氬父瀵箂oftmax鐨勮緭鍑猴紝鎴戜滑浼氶夋嫨鏄庣‘鐨勪氦鍙夌喌鎹熷け锛cross-entropy loss锛夛紙鎴栬呭彨璐熷鏁颁技鐒讹級銆傚鏋滄垜浠湁 N涓缁冪ず渚嬶紝C涓被鍒紝閭d箞棰勬祴

鐩稿浜庣湡瀹炵殑鏈夋爣绛炬暟鎹殑鎹熷け鍒欏彲浠ラ氳繃濡備笅鏂规硶鏉ヨ绠楄幏寰:



杩欎釜鍏紡鐪嬭捣鏉ュ緢澶嶆潅锛屽畠鐨勫姛鑳藉氨鏄鎴戜滑鐨勮缁冪ず渚嬭繘琛屾眰鍜岋紝骞跺姞涓婇娴嬪奸敊璇犳垚鐨勬崯澶便傛墍浠ワ紝鏍囩鍊

涓庨娴嬪

鐩稿樊瓒婂ぇ锛屾崯澶卞氨瓒婂ぇ銆傞氳繃瀵绘壘闄嶄綆閿欒鐜囩殑鍙傛暟锛屾垜浠彲浠ュ疄鐜版渶澶т技鐒躲
鎴戜滑鍙互浣跨敤姊害涓嬮檷娉曟潵鎵惧埌杩欎簺鍙傛暟锛岃繖閲岋紝鎴戜細浣跨敤涓绉嶆渶鏅亶鐨勬柟娉曪細鎵归噺姊害涓嬮檷娉曘傝繖绉嶆柟娉曠殑瀛︿範閫熺巼鏄浐瀹氱殑銆傚畠鐨勮鍖栫増渚嬪SGD锛堥殢鏈烘搴︿笅闄stochastic gradient descent锛夋垨鑰呮渶灏忔壒閲忔搴︿笅闄嶏紙minibatch gradient descent锛夐氬父鍦ㄥ疄闄呬娇鐢ㄤ腑浼氭湁鏇村ソ鐨勬晥鏋溿傛墍浠ワ紝濡傛灉鎮ㄧ湡鐨勬兂瑕佸涔犳垨鑰呬娇鐢紝閭d箞璇烽夋嫨杩欎簺鏂规硶锛屾渶濂借繕瑕佽兘澶熷疄鐜伴愭笎琛板噺瀛︿範閫熺巼銆
浣滀负杈撳叆锛屾搴︿笅闄嶆硶闇瑕佸悇鍙傛暟瀵瑰簲鎹熷け鍑芥暟鐨勬搴︼紙瀵兼暟鐨勫弬鏁帮級








銆備负浜嗚绠楄繖浜涙搴︼紝鎴戜滑浣跨敤钁楀悕鐨勫悗鍚戜紶鎾畻娉曘傝繖绉嶆柟娉曞湪閫氳繃杈撳嚭璁$畻姊害鏂归潰鏁堢巼寰堥珮銆傛偍鍙互閫氳繃杩欎簺閾炬帴锛堥摼鎺1锛岄摼鎺2锛夋潵浜嗚В瀹冿紝鍦ㄨ繖閲屾垜灏变笉璇︾粏浠嬬粛瀹冪殑鍘熺悊浜嗐
閫氳繃鍚庡悜浼犳挱鍏紡锛屾垜浠壘鍒颁簡涓嬮潰杩欎簺鏁版嵁锛



瀹炵幇

鎺ヤ笅鏉ユ垜浠氨瑕佸疄鐜拌繖涓笁灞傜殑绁炵粡缃戠粶浜嗐傞鍏堬紝鎴戜滑闇瑕佸畾涔変竴浜涘鐢ㄤ簬姊害涓嬮檷娉曠殑鍙橀噺鍜屽弬鏁般



棣栧厛锛屾垜浠厛瀹炵幇涔嬪墠瀹氫箟鐨勬崯澶卞嚱鏁帮紝杩欏皢鐢ㄦ潵璇勪及鎴戜滑鐨勬ā鍨嬨



鎴戜滑杩樿瀹炵幇涓涓敤浜庤绠楄緭鍑虹殑杈呭姪鍑芥暟銆傚畠浼氶氳繃瀹氫箟濂界殑鍓嶅悜浼犳挱鏂规硶鏉ヨ繑鍥炴嫢鏈夋渶澶ф鐜囩殑绫诲埆銆



鏈鍚庢槸璁粌绁炵粡缃戠粶鐨勫嚱鏁般傚畠浼氫娇鐢ㄦ垜浠箣鍓嶆壘鍒扮殑鍚庡悜浼犳挱瀵兼暟鏉ヨ繘琛屾壒閲忔搴︿笅闄嶈繍绠椼





涓涓殣钘忓眰瑙勬ā涓3鐨勭綉缁

璁╂垜浠湅鐪嬭缁冧竴涓殣钘忓眰瑙勬ā涓3鐨勭綉缁滀細鍙戠敓浠涔堛





鍠攡杩欑湅璧锋潵鐩稿綋涓嶉敊銆傛垜浠殑绁炵粡缃戠粶鑳藉鎴愬姛鍦版壘鍒板尯鍒嗕笉鍚岀被鍒殑鍐崇瓥杈圭晫浜嗐

鍙樻洿闅愯棌灞傝妯

鍦ㄥ垰鍒氱殑绀轰緥涓紝鎴戜滑閫夋嫨浜嗕竴涓殣钘忓眰瑙勬ā涓3鐨勭綉缁滐紝鐜板湪鎴戜滑鏉ョ湅鐪嬩笉鍚岃妯$殑闅愯棌灞備細甯︽潵浠涔堟牱鐨勬晥鏋溿





鎴戜滑鍙互鐪嬪埌锛屼綆缁村害鐨勯殣钘忓眰寰堝ソ鍦版姄浣忎簡鏁版嵁鐨勬暣浣撹秼鍔裤傞珮缁村害鐨勯殣钘忓眰鍒欐樉鐜板嚭杩囨嫙鍚堢殑鐘舵併傜浉瀵逛簬鏁翠綋鎬ч傚簲锛屽畠浠洿鍊惧悜浜庣簿纭褰曞悇涓偣銆傚鏋滄垜浠鍦ㄤ竴涓垎鏁g殑鏁版嵁闆嗕笂杩涜娴嬭瘯锛堜綘涔熷簲璇ヨ繖涔堝仛锛夛紝閭d箞闅愯棌灞傝妯¤緝灏忕殑妯″瀷浼氬洜涓烘洿濂界殑閫氱敤鎬т粠鑰岃幏寰楁洿濂界殑琛ㄧ幇銆傝櫧鐒舵垜浠彲浠ラ氳繃寮哄寲瑙勮寖鍖栨潵鎶垫秷杩囨嫙鍚堬紝浣嗛夋嫨姝g‘鐨勯殣钘忓眰瑙勬ā鐩稿鏉ヨ浼氭洿鈥滅粡娴庡疄鎯犫濅竴鐐广

灏忕粌涔

杩欏効鏈変簺鍙互甯姪浣犳洿杩涗竴姝ョ悊瑙d唬鐮佺殑骞茶揣锛
1.    鐢ㄦ渶灏忔壒閲忔搴︿笅闄嶆硶鏇挎崲姊害涓嬮檷娉曟潵璁粌缃戠粶锛岃繖浼氬府鍔╀綘鐨勬ā鍨嬪湪瀹炴垬涓幏寰楁洿濂界殑琛ㄧ幇銆
2.    鎴戜滑浣跨敤鐨勬槸鍥哄畾瀛︿範閫熺巼鏉ヨ繘琛屾搴︿笅闄嶃傝瘯鐫鍘诲疄鐜板涔犻熺巼閫愭琛板噺鐨勬柟娉曘
3.    鏈枃涓紝鎴戜滑鐢╰anh浣滀负婵娲诲嚱鏁般傝瘯璇曞叾浠栫殑婵娲诲嚱鏁帮紙鏈変簺鎴戜滑涔嬪墠宸茬粡鎻愬埌杩囷級銆傝浣忥紝鏀瑰彉婵娲诲嚱鏁颁篃灏辨剰鍛崇潃鏀瑰彉浜嗗悗鍚戜紶鎾鏁般
4.    灏嗙綉缁滀粠涓や釜绫诲埆鎷撳睍鍒颁笁涓被鍒傛偍灏嗛渶瑕佷负姝ゅ噯澶囦竴涓悎閫傜殑鏁版嵁闆嗐
5.    灏嗙綉缁滄嫇灞曞埌鍥涘眰锛屽涓嶅悓灞傜殑瑙勬ā杩涜娴嬭瘯銆傚鍔犳柊鐨勯殣钘忓眰鎰忓懗鐫浣犵殑鍓嶅悜浼犳挱鍜屽悗鍚戜紶鎾唬鐮侀兘闇瑕佽皟鏁淬
鎵鏈夌殑浠g爜閮藉彲浠ュ湪Github鐨刬Python notebook涓婃壘鍒般傛杩庢偍鎻愬嚭闂鎴栬呭弽棣:-)

鑻辨枃鍘熸枃锛歨ttp://www.wildml.com/2015/09/implementing-a-neural-network-from-scratch/
璇戣咃細娴风嵀鍏堢敓






浜嗚В閲庣嫍锛岃鐐瑰嚮闃呰鍘熸枃