Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- class MenuState extends FlxState
- {
- private var inputParams:Array<Array<Int>> = [[0, 0], [0, 1], [1, 0], [1, 1]];
- private var rightAnswers:Array<Int> = [0, 1, 1, 0];
- private var echo:Int = 100000;
- private var weightSave:Array<Float>;
- private var errorMSE:Float = 1;
- override public function create():Void
- {
- super.create();
- //start
- var weight:Array<Float> = new Array<Float>();
- //Начинаем новую эпоху обучения
- for (i in 0...echo){
- //iteration
- //weight generation
- //Заново генерируем случайный массив весов
- var weight:Array<Float> = new Array<Float>();
- for (j in 0...6){
- weight[j] = Math.random()*10 - 5;
- }
- //Обнуляем временную ошубку
- var errorFinal:Float = 0;
- //Проводим итерацию, проверяем результат на входные данные с текущими весами
- //и сравниваем их с идеальными результатами
- for (h in 0...inputParams.length - 1){
- var h1Input:Float = inputParams[h][0] * weight[0] + inputParams[h][1] * weight[2];
- var h1Output:Float = sigma(h1Input);
- var h2Input:Float = inputParams[h][0] * weight[1] + inputParams[h][1] * weight[3];
- var h2Output:Float = sigma(h2Input);
- var oInput:Float = h1Output * weight[4] + h1Output * weight[5];
- var oOutput:Float = sigma(oInput);
- errorFinal += Math.pow(rightAnswers[h] - oOutput, 2);
- }
- //Окончательынй расчет ошибки по всем четырем итерациям
- errorFinal = errorFinal / 4;
- //Если ошибка среди прочих итераций минимальна
- //то запоминаем массив весов
- if (errorFinal < errorMSE){
- errorMSE = errorFinal;
- weightSave = weight;
- }
- }
- //test neuro system
- trace("Error min: " + errorMSE);
- trace("Weight :" + weightSave);
- trace(goTest(0, 0));
- trace(goTest(0, 1));
- trace(goTest(1, 0));
- trace(goTest(1, 1));
- }
- private function goTest(num1:Int, num2:Int):Float {
- var h1Input:Float = num1 * weightSave[0] + num2 * weightSave[2];
- var h1Ouput:Float = sigma(h1Input);
- var h2Input:Float = num1 * weightSave[1] + num2 * weightSave[3];
- var h2Ouput:Float = sigma(h2Input);
- var oInput:Float = h1Ouput * weightSave[4] + h2Ouput * weightSave[5];
- var oOutput:Float = sigma(oInput);
- return oOutput;
- }
- private function sigma(innerNum:Float):Float {
- return 1 / (1 + Math.exp(-innerNum));
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement