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 | } |