1、C# BP程序using System;using System.Collections.Generic;using System.Linq;using System.IO;using System.Text;using System.Data;namespace NN_HYL class NN int k = 100,Tk=30,jj=0; int Ni = 4, No = 1,time=10000,Nh; double, W1, W2, deltaW1, deltaW2, betaO, betaH, Ohidden, Ooutput; double thrH, thrO, deltathr
2、H, deltathrO; / p; double r, eps, a, P; public NN() Nh = 3; r = 2.5; eps = 0.01; a = 1; W1 = new doubleNi, Nh; W2 = new doubleNh, No; deltaW1 = new doubleNi, Nh; deltaW2 = new doubleNh, No; betaO = new doublek, No; betaH = new doublek, Nh; Ohidden = new doublek, Nh; Ooutput = new doublek, No; thrH =
3、 new doubleNh; thrO = new doubleNo; deltathrH = new doubleNh; deltathrO = new doubleNo; /p = new doublek; protected ListList m_XExamples; /输入训练样本 protected ListList m_YExamples; /输出训练样本 public bool XY() /初始化样本,输入初始化为1,输出初始化为0 m_XExamples = new ListList(); m_YExamples = new ListList(); for (int i = 0
4、; i k; i+) List row = new List(); for (int j = 0; j Ni; j+) row.Add(1.0); m_XExamples.Add(row); List row1 = new List(); for (int j = 0; j No; j+) row1.Add(0.0); m_YExamples.Add(row1); return true; public bool Get_XExamValue(int examIndex, int index, ref double a) if (examIndex k) return false; if (i
5、ndex Ni) return false; a = m_XExamplesexamIndex - 1index - 1; return true; /设置输入样本值 public bool Set_XExamValue(int examIndex, int index, double examValue) if (examIndex k) return false; if (index Ni) return false; m_XExamplesexamIndex - 1index - 1 = examValue; return true; /获得输出样本 public bool Get_YE
6、xamValue(int examIndex, int index, ref double a) if (examIndex k) return false; if (index No) return false; a = m_YExamplesexamIndex - 1index - 1; return true; /设置输出样本值 public bool Set_YExamValue(int examIndex, int index, double examValue) if (examIndex k) return false; if (index No) return false; m
7、_YExamplesexamIndex - 1index - 1 = examValue; return true; protected ListList m_TXExamples; /输入测试样本 protected ListList m_TYExamples; /输出测试样本 public bool TXY() /初始化样本,输入初始化为1,输出初始化为0 m_TXExamples = new ListList(); m_TYExamples = new ListList(); for (int i = 0; i Tk; i+) List row = new List(); for (in
8、t j = 0; j Ni; j+) row.Add(1.0); m_TXExamples.Add(row); List row1 = new List(); for (int j = 0; j No; j+) row1.Add(0.0); m_TYExamples.Add(row1); return true; public bool Get_TXExamValue(int examIndex, int index, ref double a) if (examIndex Tk) return false; if (index Ni) return false; a = m_TXExampl
9、esexamIndex - 1index - 1; return true; /设置输入样本值 public bool Set_TXExamValue(int examIndex, int index, double examValue) if (examIndex k) return false; if (index Ni) return false; m_TXExamplesexamIndex - 1index - 1 = examValue; return true; public bool Init() int i, j; Random rd = new Random(); for (
10、i = 0; i Ni; i+) for (j = 0; j Nh; j+) W1i, j = rd.NextDouble()-0.5;/% 12 / 10.0 - 1.2; for (i = 0; i Nh; i+) for (j = 0; j No; j+) W2i, j = rd.NextDouble()-0.5;/ % 12 / 10.0 - 1.2; for (i = 0; i Nh; i+) thrHi = rd.NextDouble()-0.5;/ % 12 / 10.0 - 1.2; for (i = 0; i No; i+) thrOi = rd.NextDouble()-0
11、.5;/ % 12 / 10.0 - 1.2; return true; double sigmoid(double x) return 1.0 / (1.0 + Math.Exp(-a * x); double sum1(int k, int h, int i) double t = 0; int j; switch (h) case 1: for (j = 0; j Ni; j+) t += W1j, i * m_XExampleskj; t -= thrHi; break; case 2: for (j = 0; j Nh; j+) t += W2j, i * Ohiddenk, j;
12、t -= thrOi; break; default: break; return t; double sum2(int k, int h, int i) double t = 0; for (int j = 0; j No; j+) t += W2i, j * Ooutputk, j * (1.0 - Ooutputk, j) * betaOk, j; return t; void forward(int k) double errorsum = 0; for (int i = 0; i Nh; i+) Ohiddenk, i = sigmoid(sum1(k, 1, i); for (in
13、t i = 0; i No; i+) Ooutputk, i = sigmoid(sum1(k, 2, i); if (m_YExampleski != 0) P = Math.Abs(m_YExampleski - Ooutputk, i) / m_YExampleski); errorsum += P; else P = Math.Abs(m_YExampleski - Ooutputk, i); errorsum += P; P = errorsum/No; void backward(int k) int i, j; for (i = 0; i No; i+) betaOk, i =
14、m_YExampleski - Ooutputk, i; for (i = 0; i Nh; i+) betaHk, i = sum2(k, 1, i); for (i = 0; i Nh; i+) for (j = 0; j No; j+) deltaW2i, j = r * Ohiddenk, i * Ooutputk, j * (1 - Ooutputk, j) * betaOk, j; for (i = 0; i No; i+) deltathrOi = -r * Ooutputk, i * (1 - Ooutputk, i) * betaOk, i; for (i = 0; i Ni
15、; i+) for (j = 0; j Nh; j+) deltaW1i, j = r * m_XExampleski * Ohiddenk, j * (1 - Ohiddenk, j) * betaHk, j; for (i = 0; i Nh; i+) deltathrHi = -r * Ohiddenk, i * (1 - Ohiddenk, i) * betaHk, i; ; for (i = 0; i Nh; i+) for (j = 0; j No; j+) W2i, j += deltaW2i, j; for (i = 0; i Ni; i+) for (j = 0; j Nh;
16、 j+) W1i, j += deltaW1i, j; for (i = 0; i No; i+) thrOi += deltathrOi; for (i = 0; i Nh; i+) thrHi += deltathrHi; public bool Train() do jj+; for (int i = 0; i eps & jj time); return true; public bool shuchu() /* /写文本 FileStream fs = new FileStream(最后输出节点的值.txt, FileMode.Create); StreamWriter sw = n
17、ew StreamWriter(fs); for (int i = 0; i k; i+) for (int j = 0; j No;j+ ) sw.WriteLine(0,-201,-202,-20, i+1,j + 1, Ooutputi, j); sw.Close(); fs.Close(); /* /写文本 FileStream fss = new FileStream(误差值.txt, FileMode.Create); StreamWriter sww = new StreamWriter(fss); sww.WriteLine(0,-20 1,-20, P, jj); sww.C
18、lose(); fss.Close(); /* /写文本 FileStream fffs = new FileStream(最终输入节点与隐层节点的权值.txt, FileMode.Create); StreamWriter sssw = new StreamWriter(fffs); for (int i = 0; i Ni; i+) for (int j = 0; j Nh; j+) sssw.WriteLine(0,-201,-202,-20, i + 1, j + 1, W1i, j); sssw.Close(); fffs.Close(); /* /写文本 FileStream ff
19、s = new FileStream(最终隐层节点与输出节点的权值.txt, FileMode.Create); StreamWriter ssw = new StreamWriter(ffs); for (int i = 0; i Nh; i+) for (int j = 0; j No; j+) ssw.WriteLine(0,-201,-202,-20, i + 1, j + 1, W2i, j); ssw.Close(); ffs.Close(); /* /写文本 FileStream ffss = new FileStream(最终隐含层阈值.txt, FileMode.Create
20、); StreamWriter ssww = new StreamWriter(ffss); for (int i = 0; i Nh; i+) ssww.WriteLine(0,-20, thrHi); ssww.Close(); ffss.Close(); ssw.Close(); ffs.Close(); /* /写文本 FileStream ff = new FileStream(最终输出层阈值.txt, FileMode.Create); StreamWriter ss = new StreamWriter(ff); for (int i = 0; i No; i+) ss.Writ
21、eLine(0,-20, thrOi); ss.Close(); ff.Close(); return true; double sum12(double ti, int h, int i) double t = 0; int j; switch (h) case 1: for (j = 0; j Ni; j+) t += W1j, i * tij; t -= thrHi; break; case 2: for (j = 0; j Nh; j+) t += W2j, i * Ohidden0, j; t -= thrOi; break; default: break; return t; pu
22、blic bool Test() double t = new doubleNi; for (int kk = 0; kk Tk; kk+) /double O = new doubleNo; t0 = m_TXExampleskk0; t1 = m_TXExampleskk1; t2 = m_TXExampleskk2; t3 = m_TXExampleskk3; for (int i = 0; i Nh; i+) Ohidden0, i = sigmoid(sum12(t, 1, i); for (int i = 0; i No; i+) Ooutput0, i = sigmoid(sum
23、12(t, 2, i); m_TYExampleskki = Ooutput0, i; / Oi = Ooutput0, i; /* /写文本 FileStream ff = new FileStream(TEST_0ut.txt, FileMode.Create); StreamWriter ss = new StreamWriter(ff); for (int j = 0; j Tk;j+ ) for (int i = 0; i No; i+) ss.WriteLine(0,-20, m_TYExamplesji); ss.Close(); ff.Close(); return true;
24、 using System;using System.Collections.Generic;using System.Linq;using System.IO;using System.Text;using System.Data;namespace NN_HYL class Program static void Main(string args) NN net = new NN(); net.XY(); int kk = 100, Tk=30,aa = 5, In = 4; StreamReader T_file = new StreamReader(test.txt);/读取训练文件的
25、名字 for (int i = 1; i = kk; i+) string inSample = T_file.ReadLine(); if (inSample != null) string str = System.Text.RegularExpressions.Regex.Split(inSample, +); for (int j = 1; j = aa; j+) double temp = double.Parse(strj - 1); if (j = In) net.Set_XExamValue(i, j, temp); else net.Set_YExamValue(i, j - In, temp); net.TXY(); StreamReader TT_file = new StreamReader(ce.txt);/读取测试文件的名字 for (int i = 1; i =
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1