Advertisement
Guest User

Untitled

a guest
Jan 18th, 2019
79
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 3.60 KB | None | 0 0
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5. using System.Threading.Tasks;
  6.  
  7. namespace Prognose2Lab
  8. {
  9.     class Program
  10.     {
  11.         static double[] x = new double[10];//вход
  12.         static double[] t = new double[10];//обучающая выборка
  13.         static double[] y = new double[10];//текущий ответ
  14.         static double[,] w = new double[10, 10];//синапсы первого слоя
  15.         static double[] v = new double[10];//синапсы второго слоя
  16.         static double[] delta = new double[10];
  17.         static double a = 1.6;//нижняя граница
  18.         static double b = 4.0;//верхняя граница
  19.         static double eta = 0.5;//скорость обучения
  20.         static double MinError = 0.001;//минимальная суммарная ошибка сети
  21.         static int MaxEra = 100;//максимальное число эпох обучения
  22.         static int CountEra = 0;//эпоха обучения
  23.         static double MinDeltaError = 0.0005;//минимальное улучшение ошибки
  24.         static double EraError = 1;//Ошибка эпохи
  25.         static double PrevError = 0;//Ошибка предыдущей эпохи
  26.  
  27.         static void Main(string[] args)
  28.         {
  29.             var random = new Random();
  30.             for (int i = 0; i < w.GetLength(0); i++)
  31.             {
  32.                 v[i] = random.Next(10) - 5;
  33.                 v[i] /= 10;
  34.                 for (int j = 0; j < w.GetLength(1); j++)
  35.                 {
  36.                     w[i, j] = random.Next(10) - 5;
  37.                     w[i, j] /= 10;
  38.                 }
  39.             }
  40.             for (int i = 0; i < x.GetLength(0); i++)
  41.             {
  42.                 x[i] = a + i * (b - a) / (x.GetLength(0) - 1);
  43.                 t[i] = 3 * x[i] * x[i] + Math.Tan(x[i]);
  44.                 Console.WriteLine($"t[{i}]={t[i]}");
  45.             }
  46.             while ((EraError > MinError) && (CountEra < MaxEra)) //обучение
  47.             {
  48.                 EraError = 0;
  49.                 CountEra++;
  50.                 for (int i = 0; i < w.GetLength(0); i++)//заполнение t
  51.                 {
  52.                     var sum = 0d;
  53.                     for (int j = 0; j < w.GetLength(1); j++)
  54.                     {
  55.                         sum += x[j] * w[i, j];
  56.                     }
  57.                     y[i] = sum * v[i];
  58.                     EraError += 0.5 * (t[i] - y[i]) * (t[i] - y[i]);
  59.                 }
  60.                 for (int i = 0; i < w.GetLength(0); i++)//коррекция синапсов
  61.                 {
  62.                     delta[i] = y[i] * (1.0 - y[i]) * (t[i] - y[i]);
  63.                     Console.WriteLine($"delta[{i}]={delta[i]}");
  64.                     v[i] -= eta * delta[i] * y[i];
  65.                     for (int j = 0; j < w.GetLength(1); j++)
  66.                     {
  67.                         w[i, j] -= eta * delta[i] * v[i] * y[i] * (1 - y[i]) * x[j];
  68.                     }
  69.                 }
  70.                 Console.WriteLine($"эра={CountEra}");
  71.                 if ((EraError - PrevError) < MinDeltaError)
  72.                 {
  73.                     break;
  74.                 }
  75.                 Console.WriteLine($"ошибка эры={EraError}");
  76.                 PrevError = EraError;
  77.             }
  78.             /*var answer = 0d;
  79.             for (int i = 0; i < w.GetLength(0); i++)
  80.             {
  81.                 answer+= x[i] * w[4, i];
  82.             }
  83.             Console.WriteLine($"check4={answer*v[4]}");*/
  84.             Console.ReadLine();
  85.         }
  86.     }
  87. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement