




已閱讀5頁,還剩3頁未讀, 繼續(xù)免費(fèi)閱讀
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
BP神經(jīng)網(wǎng)絡(luò)實現(xiàn)(Java代碼)神經(jīng)網(wǎng)絡(luò)的原理雖然理解起來不難,但是要是想實現(xiàn)它,還是需要做一些工作的,并且有很多細(xì)節(jié)性的東西需要注意。通過參閱各種相關(guān)資料,以及參考網(wǎng)絡(luò)上已有的資源,自己寫了一個含有一個隱含層,且只能有一個輸出單元的簡單的BP網(wǎng)絡(luò),經(jīng)過測試,達(dá)到了預(yù)期的效果。需要說明的是,神經(jīng)網(wǎng)絡(luò)的每個輸入都在0,1中,輸出也在0,1中,在使用神經(jīng)網(wǎng)絡(luò)解決實際問題的時候,還需要對實際問題的輸入輸出進(jìn)行歸一化處理。另外,盡量不要使得神經(jīng)網(wǎng)絡(luò)的輸入或輸出接近于0或1,這樣會影響擬合效果。我用正弦函數(shù)進(jìn)行了一次測試,效果如圖所示:以下是相關(guān)的代碼:1.神經(jīng)網(wǎng)絡(luò)代碼javaview plaincopy1. packagepkg1;2. 3. importjava.util.Scanner;4. 5. /*6. *7. */8. publicclassTestNeuro9. 10. privateintINPUT_DIM=1;11. privateintHIDDEN_DIM=20;12. privatedoubleLEARNING_RATE=0.05;13. doubleinput_hidden_weights=newdoubleINPUT_DIMHIDDEN_DIM;14. doublehidden_output_weights=newdoubleHIDDEN_DIM;15. doublehidden_thresholds=newdoubleHIDDEN_DIM;16. doubleoutput_threshold;17. 18. publicstaticvoidmain(Stringargs)19. Scannerin=newScanner(System.in);20. TestNeuroneuro=newTestNeuro(1,5);21. neuro.initialize();22. for(inti=0;i10000;i+)23. doubleinput=newdouble1;24. input0=Math.random();25. doubleexpectedOutput=input0*input0;26. /System.out.println(input:+input0+ttexpectedOutput:+expectedOutput);27. /System.out.println(predictbeforetraining:+neuro.predict(input);28. neuro.trainOnce(input,expectedOutput);29. /System.out.println(predictaftertraining:+neuro.predict(input);30. /in.next();31. 32. while(true)33. /neuro.printLinks();34. doubleinput=newdouble1;35. input0=in.nextDouble();36. doubleexpectedOutput=in.nextDouble();37. System.out.println(predictbeforetraining:+neuro.predict(input);38. neuro.trainOnce(input,expectedOutput);39. System.out.println(predictaftertraining:+neuro.predict(input);40. 41. 42. 43. 44. publicTestNeuro(intinput_dimension,inthidden_dimension)45. this.INPUT_DIM=input_dimension;46. this.HIDDEN_DIM=hidden_dimension;47. this.initialize();48. 49. 50. 51. /*52. *打印出本神經(jīng)元網(wǎng)絡(luò)各層之間的連接權(quán)重,以及各個神經(jīng)元上的閾值的信息。53. */54. voidprint()55. System.out.println(隱含層閾值:);56. for(inti=0;iHIDDEN_DIM;i+)57. System.out.print(hidden_thresholdsi+);58. System.out.println();59. System.out.println(輸出層閾值:);60. System.out.println(output_threshold);61. 62. System.out.println(連接權(quán)重:*);63. System.out.println(輸入層與隱含層的連接);64. for(inti=0;iINPUT_DIM;i+)65. for(intj=0;jHIDDEN_DIM;j+)66. System.out.print(input_hidden_weightsij+);67. System.out.println();68. 69. System.out.println(隱含層到輸出層的連接);70. for(inti=0;iHIDDEN_DIM;i+)71. System.out.print(hidden_output_weightsi+);72. System.out.println();73. System.out.println(*);74. 75. 76. /*77. *初始化,對所有的權(quán)值產(chǎn)生一個(0,1)之間的隨機(jī)double型值78. */79. voidinitialize()80. 81. /輸入層到隱含層的連接權(quán)重82. for(inti=0;iINPUT_DIM;i+)83. for(intj=0;jHIDDEN_DIM;j+)84. input_hidden_weightsij=Math.random();85. 86. 87. /隱含層到輸出層的連接權(quán)重88. for(inti=0;iHIDDEN_DIM;i+)89. hidden_output_weightsi=Math.random();90. 91. /隱含層的閾值92. for(inti=0;iHIDDEN_DIM;i+)93. hidden_thresholdsi=Math.random();94. 95. /輸出層的閾值96. output_threshold=Math.random();97. 98. 99. /*100. *激勵函數(shù)101. *paramx102. *return103. */104. doublefunction(doublex)105. return1/(1+Math.pow(Math.E,-x);106. 107. 108. /*109. *給定一個輸入,進(jìn)行預(yù)測110. *paraminput111. *return112. */113. doublepredict(doubleinput)114. doublehiddenValues=newdoubleHIDDEN_DIM;115. for(inti=0;ihiddenValues.length;i+)116. doublesum=0;117. for(intj=0;jinput.length;j+)118. sum+=inputj*input_hidden_weightsji;119. 120. sum+=hidden_thresholdsi;/再加上本神經(jīng)元的閾值121. hiddenValuesi=function(sum);122. 123. 124. 125. doublesum=0;126. for(inti=0;iHIDDEN_DIM;i+)127. sum+=hiddenValuesi*hidden_output_weightsi;128. 129. sum+=output_threshold;/輸出層神經(jīng)元的閾值130. returnfunction(sum);131. 132. 133. /*134. *進(jìn)行一次訓(xùn)練135. *paraminput136. *paramexpectedOutput137. */138. voidtrainOnce(doubleinput,doubleexpectedOutput)139. doublehiddenValues=newdoubleHIDDEN_DIM;140. doublehiddenParams=newdoubleHIDDEN_DIM;141. 142. for(inti=0;ihiddenValues.length;i+)143. doublesum=0;144. for(intj=0;jinput.length;j+)145. sum+=inputj*input_hidden_weightsji;146. 147. sum+=hidden_thresholdsi;/148. hiddenValuesi=function(sum);149. hiddenParamsi=sum;150. 151. 152. doublesum=0;153. for(inti=0;iHIDDEN_DIM;i+)154. sum+=hiddenValuesi*hidden_output_weightsi;155. 156. sum+=output_threshold;/157. doubleoutputValue=function(sum);158. doubleoutputParam=sum;159. /System.out.println(實際輸出);160. 161. /*162. *調(diào)整權(quán)值和閾值163. */164. 165. for(inti=0;iinput.length;i+)166. doublefactor=(expectedOutput-outputValue)*outputValue*(1-outputValue)*LEARNING_RATE*inputi;167. for(intj=0;jHIDDEN_DIM;j+)168. doubledelta=factor*hidden_output_weightsj*hiddenValuesj*(1-hiddenValuesj);169. /System.out.println(輸入層到隱含層連接的權(quán)重調(diào)整:delta=+delta+ttweight=+input_hidden_weightsij);170. input_hidden_weightsij+=delta;171. 172. 173. doublefactor=(expectedOutput-outputValue)*outputValue*(1-outputValue)*LEARNING_RATE;174. for(inti=0;ihidden_thresholds.length;i+)175. doubledelta=factor*hidden_output_weightsi*hiddenValuesi*(1-hiddenValuesi);176. hidden_thresholdsi+=delta;177. 178. 179. /System.out.println(hidden_output_weights:+hidden_output_weights.length);180. for(inti=0;i0.1)191. /System.out.println(input0+tt+outputValue+tt+expectedOutput);192. 193. 194. 195. 196. 197. 198. 2.測試代碼javaview plaincopy1. packagepkg1;2. 3. importjava.awt.Graphics;4. importjava.util.Scanner;5. 6. importjavax.swing.JFrame;7. 8. publicclassDisplayNeuroextendsjavax.swing.JPanel9. 10. publicstaticfinalintSIDE_LENGTH=200;11. 12. TestNeuroneuro;/=newTestNeuro();13. /*14. *paramargs15. */16. publicstaticvoidmain(Stringargs)17. /TODOAuto-generatedmethodstub18. DisplayNeurodn=newDisplayNeuro();19. JFramejFrame=newJFrame();20. jFrame.setBounds(100,100,300,300);21. jFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);22. jFrame.add(dn);23. jFrame.setVisible(true);24. 25. TestNeuroneuro=newTestNeuro(1,20);26. dn.neuro=neuro;27. Scannerin=newScanner(System.in);28. dn.repaint();29. for(inti=0;i100000000;i+)30. doubleinput=newdouble1;31. input0=Math.random()/2+0.25;32. doubleexpectedOutput=(Math.sin(3.14*(input0-0.25)*2*4)+1)/8*3+0.125;33. /System.out.println(input:+input0+ttexpectedOutpu
溫馨提示
- 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 氣候變化應(yīng)對技術(shù)-洞察闡釋
- 拓展“10+1”框架下的東盟基礎(chǔ)設(shè)施建設(shè)市場
- 公司正版軟件管理制度
- 公司法里基本管理制度
- 中越北部灣海洋生物多樣性保護(hù)合作法律機(jī)制研究
- 2025企業(yè)合同管理規(guī)范模板:合同管理制度實施條例
- 2025醫(yī)療設(shè)備購銷合同模板
- 050310JAVA程序設(shè)計課程-單選題專項
- 河北省石家莊市2023?2024學(xué)年高二下冊數(shù)學(xué)期末考試數(shù)學(xué)試卷附解析
- 2025年中考語文(長沙用)課件:復(fù)習(xí)任務(wù)群5 語言的連貫、得體
- 2025年遼寧黑龍江吉林內(nèi)蒙古高考物理試卷真題(含答案詳解)
- 2025高考全國二卷語文真題
- 2025年動物科學(xué)與技術(shù)應(yīng)用考試卷及答案
- 天津市2024-2025學(xué)年七年級語文下學(xué)期期末模擬試題(含答案)
- 2025年甘肅亞盛實業(yè)(集團(tuán))股份有限公司招聘筆試參考題庫含答案解析
- 地域文化(專)-終結(jié)性考試-國開(SC)-參考資料
- 19S406建筑排水管道安裝-塑料管道
- CB/T 3766-1996排氣管鋼法蘭及墊片
- 國家開放大學(xué)《環(huán)境資源法》形考作業(yè)參考答案
- 《政治學(xué)原理(二)》課程教學(xué)大綱
- 飛錘支架夾具設(shè)計
評論
0/150
提交評論