SHOW:
|
|
- or go back to the newest paste.
1 | class MenuState extends FlxState | |
2 | { | |
3 | ||
4 | private var inputParams:Array<Array<Int>> = [[0, 0], [0, 1], [1, 0], [1, 1]]; | |
5 | private var rightAnswers:Array<Int> = [0, 1, 1, 0]; | |
6 | ||
7 | private var echo:Int = 100000; | |
8 | private var weightSave:Array<Float>; | |
9 | private var errorMSE:Float = 1; | |
10 | ||
11 | override public function create():Void | |
12 | { | |
13 | super.create(); | |
14 | ||
15 | //start | |
16 | var weight:Array<Float> = new Array<Float>(); | |
17 | for (j in 0...6){ | |
18 | weight[j] = Math.random()*10 - 5; | |
19 | } | |
20 | - | //iteration |
20 | + | |
21 | - | //weight generation |
21 | + | |
22 | - | //Заново генерируем случайный массив весов |
22 | + | |
23 | - | var weight:Array<Float> = new Array<Float>(); |
23 | + | |
24 | //Обнуляем временную ошубку | |
25 | var errorFinal:Float = 0; | |
26 | ||
27 | //Проводим итерацию, проверяем результат на входные данные с текущими весами | |
28 | //и сравниваем их с идеальными результатами | |
29 | for (h in 0...inputParams.length - 1){ | |
30 | var h1Input:Float = inputParams[h][0] * weight[0] + inputParams[h][1] * weight[2]; | |
31 | var h1Output:Float = sigma(h1Input); | |
32 | ||
33 | var h2Input:Float = inputParams[h][0] * weight[1] + inputParams[h][1] * weight[3]; | |
34 | var h2Output:Float = sigma(h2Input); | |
35 | ||
36 | var oInput:Float = h1Output * weight[4] + h1Output * weight[5]; | |
37 | var oOutput:Float = sigma(oInput); | |
38 | ||
39 | errorFinal += Math.pow(rightAnswers[h] - oOutput, 2); | |
40 | } | |
41 | ||
42 | //Окончательынй расчет ошибки по всем четырем итерациям | |
43 | errorFinal = errorFinal / 4; | |
44 | ||
45 | } | |
46 | ||
47 | //test neuro system | |
48 | trace("Error min: " + errorMSE); | |
49 | - | //Если ошибка среди прочих итераций минимальна |
49 | + | |
50 | - | //то запоминаем массив весов |
50 | + | |
51 | - | if (errorFinal < errorMSE){ |
51 | + | |
52 | - | errorMSE = errorFinal; |
52 | + | |
53 | - | weightSave = weight; |
53 | + | |
54 | } | |
55 | ||
56 | private function goTest(num1:Int, num2:Int):Float { | |
57 | var h1Input:Float = num1 * weightSave[0] + num2 * weightSave[2]; | |
58 | var h1Ouput:Float = sigma(h1Input); | |
59 | ||
60 | var h2Input:Float = num1 * weightSave[1] + num2 * weightSave[3]; | |
61 | var h2Ouput:Float = sigma(h2Input); | |
62 | ||
63 | var oInput:Float = h1Ouput * weightSave[4] + h2Ouput * weightSave[5]; | |
64 | var oOutput:Float = sigma(oInput); | |
65 | ||
66 | return oOutput; | |
67 | } | |
68 | ||
69 | private function sigma(innerNum:Float):Float { | |
70 | return 1 / (1 + Math.exp(-innerNum)); | |
71 | } |