Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- using System;
- using System.Collections.Generic;
- using System.Linq;
- using System.Text;
- using System.Threading.Tasks;
- namespace Prognose2Lab
- {
- class Program
- {
- static double[] x = new double[10];//вход
- static double[] t = new double[10];//обучающая выборка
- static double[] y = new double[10];//текущий ответ
- static double[,] w = new double[10, 10];//синапсы первого слоя
- static double[] v = new double[10];//синапсы второго слоя
- static double[] delta = new double[10];
- static double a = 1.6;//нижняя граница
- static double b = 4.0;//верхняя граница
- static double eta = 0.5;//скорость обучения
- static double MinError = 0.001;//минимальная суммарная ошибка сети
- static int MaxEra = 100;//максимальное число эпох обучения
- static int CountEra = 0;//эпоха обучения
- static double MinDeltaError = 0.0005;//минимальное улучшение ошибки
- static double EraError = 1;//Ошибка эпохи
- static double PrevError = 0;//Ошибка предыдущей эпохи
- static void Main(string[] args)
- {
- var random = new Random();
- for (int i = 0; i < w.GetLength(0); i++)
- {
- v[i] = random.Next(10) - 5;
- v[i] /= 10;
- for (int j = 0; j < w.GetLength(1); j++)
- {
- w[i, j] = random.Next(10) - 5;
- w[i, j] /= 10;
- }
- }
- for (int i = 0; i < x.GetLength(0); i++)
- {
- x[i] = a + i * (b - a) / (x.GetLength(0) - 1);
- t[i] = 3 * x[i] * x[i] + Math.Tan(x[i]);
- Console.WriteLine($"t[{i}]={t[i]}");
- }
- while ((EraError > MinError) && (CountEra < MaxEra)) //обучение
- {
- EraError = 0;
- CountEra++;
- for (int i = 0; i < w.GetLength(0); i++)//заполнение t
- {
- var sum = 0d;
- for (int j = 0; j < w.GetLength(1); j++)
- {
- sum += x[j] * w[i, j];
- }
- y[i] = sum * v[i];
- EraError += 0.5 * (t[i] - y[i]) * (t[i] - y[i]);
- }
- for (int i = 0; i < w.GetLength(0); i++)//коррекция синапсов
- {
- delta[i] = y[i] * (1.0 - y[i]) * (t[i] - y[i]);
- Console.WriteLine($"delta[{i}]={delta[i]}");
- v[i] -= eta * delta[i] * y[i];
- for (int j = 0; j < w.GetLength(1); j++)
- {
- w[i, j] -= eta * delta[i] * v[i] * y[i] * (1 - y[i]) * x[j];
- }
- }
- Console.WriteLine($"эра={CountEra}");
- if ((EraError - PrevError) < MinDeltaError)
- {
- break;
- }
- Console.WriteLine($"ошибка эры={EraError}");
- PrevError = EraError;
- }
- /*var answer = 0d;
- for (int i = 0; i < w.GetLength(0); i++)
- {
- answer+= x[i] * w[4, i];
- }
- Console.WriteLine($"check4={answer*v[4]}");*/
- Console.ReadLine();
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement