Project Code Start{"clazzes":[{"name":"Main","src":"NeuronalesNetz netz;\nVector[] trainingX,trainingY;\n\nvoid main( ) {\n JavaApp.setWatchedObject(this);\n netz=new NeuronalesNetz(new int[]{1,2,2});\n // netz.gewichte[0].set(1, 1, 10);\n // netz.gewichte[0].set(2, 1, -10);\n // netz.biasse[0].set(1, -5);\n // netz.biasse[0].set(2, 5);\n //netz.randomize();\n Random rand=new Random(100);\n trainingX=new Vector[100];\n trainingY=new Vector[trainingX.length];\n for (int i = 0; i < trainingX.length; i++) {\n double x=rand.nextDouble();\n trainingX[i]=new Vector(1);\n trainingX[i].set(1, x);\n trainingY[i]=new Vector(2);\n if(x>=0.6){\n trainingY[i].set(1, 1);\n trainingY[i].set(2,0);\n }else{\n trainingY[i].set(1, 0);\n trainingY[i].set(2,1);\n }\n }\n\n System.out.println( \"Es wird ein neuronales Netz trainiert, das erkennen kann, ob eine Zahl größer oder kleiner als 0.6 ist.\" );\n System.out.println( \"Weiter mit beliebiger Taste\" );\n System.in.read();\n System.out.println( \"Netz wird trainiert (das dauert einen Moment)\" );\n Thread.sleep(1000);\n \n netz=training();\n\n System.out.println( );\n System.out.println( \"Training abgeschlossen\" );\n System.out.println( );\n \n String[] antworten=new String[]{\"größer-gleich als 0.6\",\"kleiner als 0.6\"};\n while(true){\n System.out.println( \"Welche Zahl zwischen 0 und 1 soll geprüft werden?\" );\n System.out.print( \"Eingabe: \" );\n double a0=Double.parseDouble(System.console().readLine());\n netz.setInput(new int[]{a0});\n netz.berechnen();\n double[] out=netz.getOutput();\n System.out.println( \"Ich denke: \"+a0+\" ist \"+antworten[maxIndex(out)] );\n System.out.println( out );\n System.out.println( );\n }\n}\n\nint maxIndex(double[] werte){\n double max=werte[0];\n int index=0;\n for(int i=1;i
max){\n max=werte[i];\n index=i;\n }\n }\n return index;\n}\n\nNeuronalesNetz training(){\n NeuronalesNetz bestesNetz=new NeuronalesNetz(netz.getAnzahlNeuronen());\n double besteKosten=bestesNetz.berechneKosten(trainingX, trainingY);\n NeuronalesNetz testNetz=new NeuronalesNetz(netz.getAnzahlNeuronen());\n for(int i=0;i<10;i++){\n testNetz.randomize();\n testNetz.gradientenverfahren(trainingX, trainingY, 0.1, 100); \n double testKosten=testNetz.berechneKosten(trainingX, trainingY);\n if (testKosten
{\n return 1 / ( 1 + Math.exp( -x ) );\n } ) );\n }\n }\n \n double berechneKosten( Vector[ ] trainingX, Vector[ ] trainingY ) {\n double c = 0;\n for ( int m = 0; m < trainingX.length; m++ ) {\n Vector x = trainingX[ m ];\n Vector y = trainingY[ m ];\n neuronen[ 0 ].setFromVector( x );\n berechnen( );\n Vector aN = neuronen[ N ];\n int nN = aN.getSize( );\n Vector diff = aN.sub( y );\n c += diff.scalarProduct( diff );\n }\n return c;\n }\n \n void setToZero( ) {\n for ( int i = 0; i < N; i++ ) {\n gewichte[ i ].setToZero( );\n biasse[ i ].setToZero( );\n }\n }\n\n void gradientenverfahren(Vector[ ] trainingX, Vector[ ] trainingY, double lernrate, int maxSchritte){\n\n double kostenAlt=berechneKosten(trainingX, trainingY);\n NeuronalesNetz gradient=new NeuronalesNetz(getAnzahlNeuronen());\n for (int i = 0; i < maxSchritte; i++) {\n berechneGradient(gradient, trainingX, trainingY);\n //gradient.print(\"Gradient\");\n \n for ( int k = 0; k < N; k++ ) {\n gradient.gewichte[ k ].setFromMatrix( gewichte[ k ].add(gradient.gewichte[k].scale(-lernrate)) );\n gradient.biasse[ k ].setFromVector( biasse[ k ].add(gradient.biasse[k].scale(-lernrate)) );\n }\n double kostenNeu=gradient.berechneKosten(trainingX, trainingY);\n if(kostenNeu>=kostenAlt){\n return;\n }\n set(gradient);\n //print(\"Neues Netz\");\n }\n }\n\n void print(String intro){\n System.out.println( intro );\n for(int k=0;k
= 0; k-- ) {\n Matrix dW = gradient.gewichte[ k ];\n Vector dB = gradient.biasse[ k ];\n int nkplus1 = neuronen[ k + 1 ].getSize( );\n int nk = neuronen[ k ].getSize( );\n Vector a = neuronen[ k ];\n \n Vector ableitungSigmoid = z[ k ].applyFunction( ( t ) -> {\n double e = Math.exp( -t );\n return e / ( ( 1 + e ) * ( 1 + e ) );\n } );\n \n Vector dCda;\n if ( k == N - 1 ) {\n dCda = neuronen[ N ].sub( y ).scale( 2 );\n } else {\n Matrix W = gewichte[ k+1 ];\n int nkplus2=neuronen[k+2].getSize();\n dCda = new Vector( nkplus1 );\n for ( int i = 1; i <= nkplus1; i++ ) {\n double s = 0;\n for ( int l = 1; l <= nkplus2; l++ ) {\n s += ableitungSigmoidAlt.get( l ) * W.get( l, i ) * dCdaAlt.get( l );\n }\n dCda.set( i, s );\n }\n }\n \n for ( int i = 1; i <= nkplus1; i++ ) {\n for ( int j = 1; j <= nk; j++ ) {\n double dCdw = ableitungSigmoid.get( i ) * a.get( j ) * dCda.get( i );\n dCdw += dW.get( i, j );\n dW.set( i, j, dCdw );\n }\n double dCdb = ableitungSigmoid.get( i ) * dCda.get( i );\n dCdb += dB.get( i );\n dB.set( i, dCdb );\n //System.out.println( \"dB m=\"+m+\", k=\" + k + \", \" + dB.get( i ) );\n }\n dCdaAlt = dCda;\n ableitungSigmoidAlt=ableitungSigmoid;\n }\n }\n \n }\n}","isHidden":false}],"database":"","databaseInitCode":"","css":"","assets":false,"name":"NeuronalesNetz","description":"","theme_color":"black","background_color":"black","icon":null,"urls":["./"],"date":"2025-03-19T01:09:27.867Z","javaappVersion":"8.2.2"}Project Code Stop