Advertisement
Guest User

Untitled

a guest
Oct 17th, 2016
180
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Haxe 2.60 KB | None | 0 0
  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.  
  18.         //Начинаем новую эпоху обучения
  19.         for (i in 0...echo){
  20.             //iteration
  21.             //weight generation
  22.             //Заново генерируем случайный массив весов
  23.             var weight:Array<Float> = new Array<Float>();
  24.             for (j in 0...6){
  25.                 weight[j] = Math.random()*10 - 5;
  26.             }
  27.            
  28.             //Обнуляем временную ошубку
  29.             var errorFinal:Float = 0;
  30.            
  31.             //Проводим итерацию, проверяем результат на входные данные с текущими весами
  32.             //и сравниваем их с идеальными результатами
  33.             for (h in 0...inputParams.length - 1){
  34.                 var h1Input:Float = inputParams[h][0] * weight[0] + inputParams[h][1] * weight[2];
  35.                 var h1Output:Float = sigma(h1Input);
  36.                
  37.                 var h2Input:Float = inputParams[h][0] * weight[1] + inputParams[h][1] * weight[3];
  38.                 var h2Output:Float = sigma(h2Input);
  39.                
  40.                 var oInput:Float = h1Output * weight[4] + h1Output * weight[5];
  41.                 var oOutput:Float = sigma(oInput);
  42.                
  43.                 errorFinal += Math.pow(rightAnswers[h] - oOutput, 2);
  44.             }
  45.            
  46.             //Окончательынй расчет ошибки по всем четырем итерациям
  47.             errorFinal = errorFinal / 4;
  48.            
  49.             //Если ошибка среди прочих итераций минимальна
  50.             //то запоминаем массив весов
  51.             if (errorFinal < errorMSE){
  52.                 errorMSE = errorFinal;
  53.                 weightSave = weight;
  54.             }
  55.         }
  56.        
  57.         //test neuro system
  58.         trace("Error min: " + errorMSE);
  59.         trace("Weight :" + weightSave);
  60.         trace(goTest(0, 0));
  61.         trace(goTest(0, 1));
  62.         trace(goTest(1, 0));
  63.         trace(goTest(1, 1));
  64.     }
  65.    
  66.     private function goTest(num1:Int, num2:Int):Float {
  67.         var h1Input:Float = num1 * weightSave[0] +  num2 * weightSave[2];
  68.         var h1Ouput:Float = sigma(h1Input);
  69.        
  70.         var h2Input:Float = num1 * weightSave[1] +  num2 * weightSave[3];
  71.         var h2Ouput:Float = sigma(h2Input);
  72.        
  73.         var oInput:Float = h1Ouput * weightSave[4] + h2Ouput * weightSave[5];
  74.         var oOutput:Float = sigma(oInput);
  75.        
  76.         return oOutput;
  77.     }
  78.    
  79.     private function sigma(innerNum:Float):Float    {
  80.         return 1 / (1 + Math.exp(-innerNum));
  81.     }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement