이 기사에서는 Java 구현을 기반으로 한 간단한 인공 신경망 알고리즘에 대해 설명합니다. 다음과 같이 참조에 대해 공유하십시오.
내가 그린 알고리즘 다이어그램을 살펴 보겠습니다.
2. 데이터 범주
import java.util.arrays; public class data {double [] 벡터; INT 부문; int 유형; public double [] getVector () {return 벡터; } public void setVector (double [] vector) {this.vector = 벡터; } public int getDimention () {return division; } public void setDimention (int division) {this.dimention = division; } public int gettype () {return type; } public void settype (int type) {this.type = type; } public data (double [] 벡터, int dimentation, int type) {super (); this.vector = 벡터; this.dimentation = dimentation; this.type = 유형; } public data () {} @override public string toString () {return "data [vector =" + arrays.tostring (vector) + ", dimension =" + dimentation + ", type =" + type + "]; }}3. 간단한 인공 신경망
패키지 CN.EDU.HBUT.CHENJIE; import java.util.arraylist; import java.util.list; import java.util.random; import org.jfree.chart.chartfactory; import org.jfree.chart.chart.chart.chart.chartframe; import org.jfree.chart.jfreechart; org.jfree.data.xy.defaultxydataset; import org.jfree.ui.refineryutilities; public class ann2 {private double eta; // 학습 속도 개인 int n_iter; // weight vector w [] 훈련 시간 <dataet private double w0 = 0;] 가중치; // 길이가 훈련 데이터 차원 +1 인 무게 벡터,이 경우 데이터는 2 차원이므로 길이는 3 개인 int testsum = 0; // 총 테스트 데이터 개인 int error = 0; // 오류 수 defaultxydataset xydataset = new defaultxydataset (); / *** 차트에 동일한 유형의 데이터 추가* @param 유형 유형* @param A 모든 데이터의 첫 번째 구성 요소* @param b 모든 데이터의 두 번째 구성 요소*/ public void add (문자열 유형, double [] a, double [] b) {double [] [] data = new double [2] [a.length]; for (int i = 0; i <a.length; i ++) {data [0] [i] = a [i]; 데이터 [1] [i] = b [i]; } xydataset.addseries (유형, 데이터); } / *** draw* / public void draw () {jfreechart jfreechart = ChartFactory.createscatterPlot ( "연습", "x1", "x2", xydataset); ChartFrame Frame = 새로운 차트 프레임 ( "교육 데이터", JFREECHART); frame.pack (); 정유 공장 .Centerframeonscreen (프레임); frame.setVisible (true); } public static void main (string [] args) {Ann2 Ann2 = new Ann2 (0.001,100); // 인공 신경망 목록 구성 <data> 연습 = new arraylist <data> (); // 훈련 세트 구성 // 1,000 훈련 데이터를 수동으로 시뮬레이션합니다. 무작위의(); double x1 = rd.nextDouble (); // 랜덤 생성 하나의 구성 요소를 생성합니다. 하나의 구성 요소 double x2 = rd.nextDouble (); random 다른 구성 요소 생성 더블 생성 Double [] da = {x1, x2}; // 데이터 벡터 데이터 생성 d = 새로운 데이터 (da, 2, x2> x1+0.5? 1 : -1); // add trainuct inter (d); sum1 = 0; // 레코드 유형 1 int sum2 = 0; // (int i = 0; i <연습 .size (); i ++)에 대한 Type-1 훈련 레코드 번호 기록. else if (연습 (i) .getType () == -1) sum2 ++; } double [] x1 = 새로운 더블 [sum1]; 이중 [] y1 = 새로운 이중 [sum1]; double [] x2 = 새로운 이중 [sum2]; double [] y2 = 새로운 이중 [sum2]; int index1 = 0; int index2 = 0; for (int i = 0; i <운동장 (); i ++) {if (연습 (i) .getType () == 1) {x1 [index1] = aciving.get (i) .vector [0]; y1 [index1 ++] = 연습 (i) .vector [1]; } else if (연습 (i) .getType () ==-1) {x2 [index2] = 연습 (i) .vector [0]; y2 [index2 ++] = 연습 (i) .vector [1]; }} ann2.add ( "1", x1, y1); ann2.add ( "-1", x2, y2); Ann2.Draw (); ann2.input (연습); // 인공 신경망에 세트를 입력하십시오. ann2.fit (); // ann2.showweigths (); // 무게 벡터를 표시 // (int i = 0; i <00000; i ++) {random rd = new random (); double x1_ = rd.nextDouble (); double x2_ = rd.nextDouble (); double [] da = {x1_, x2_}; 데이터 테스트 = 새로운 데이터 (DA, 2, X2_> X1_+0.5? 1 : -1); ann2.predict (test); // test} system.out.println ( " + ann2.error +"비트 오류, 오류율이있는 "총 테스트" + ann2.testsum + "비트 데이터 :" + ann2.error * 1.0 /ann2.testsum * 100 + "%"); } / ** * * @param eta 학습 속도 * @param n_iter 웨이트 구성 요소 학습 시간 * / public ann2 (Double Eta, int n_iter) {this.eta = eta; this.n_iter = n_iter; }/*** 인공 신경망에 세트를 입력하십시오* @param 운동*/개인 void 입력 (목록 <data> 연습) {this. this. this. exercise = 연습; // 훈련 세트를 저장합니다. i = 1; i weights.lengths. = 연습 (j) .type; // y int calculate_result = calculateresult (연습 .get (j)); // y 'double delta0 = eta * (real_result -calculate_result); 연습 (j) .getDivision (); // ΔW = η*(y-y ')*x weights [k +1] += 델타; // w = w+Δw}}} private int calculateresult (데이터 데이터) {double z = w0 * x0; for (int i = 0; i <data.dimention; i ++) z+= data.vector [i] * 가중치 [i+1]; //z=w0x0+w1x1+...+wmxm // 활성화 함수 인 경우 (z> = 0) 반환 1; 그렇지 않으면 -1; } private void showweigths () {for (double w : weights) system.out.println (w); } private void predict (데이터 데이터) {int type = calculateresult (data); if (type == data.getType ()) {//system.out.println("precaution right "); } else {//system.out.println("precaution error "); 오류 ++; } testsum ++; }}실행 결과 :
-0.2200000000000000017-0.44168439828154530.442444202054685 A total of 10,000 data were tested, with 17 errors, error rate: 0.16999999999999999999999999999999999998%
Java 알고리즘에 대한 자세한 내용은이 사이트에 관심이있는 독자들이 주제를 볼 수 있습니다. "Java 데이터 구조 및 알고리즘 자습서", "Java Operation Dom Node Tips 요약", "Java 파일 및 디렉토리 작동 팁 요약"및 "Java Cache Operation Tips의 요약"을 볼 수 있습니다.
이 기사가 모든 사람의 Java 프로그래밍에 도움이되기를 바랍니다.