Построение линейного апроксиматора на базе однонейроннои сети - C#
Формулировка задачи:
Построение линейного апроксиматора на базе однонейроннои сети:
1.3.1.Написать программу на языке С#, позволяющую строить массив пар значений x и t, связанных зашумленной линеной зависимостью t=mx+c+bS, где m, c и b задающиеся коэффициенты, а S равномерно распределенный шум в интервале [-1,1].
1.3.2.Добавить в программу описание однонейронной сети с тождественной функцией активации с одним входом и одним выходом и сигналом смещения. Сеть должна реализовавать : построение выходного y сигнала по входному x при заданных значениях весов w1 и w2 обучение с заданным количеством шагов по дельта-правилу
Завдання
Произвести обучение сети с точностью . и убедиться, что весовые коефициенты совпадают со значениями m и c.
Оформити звiт про лабораторну роботу.
как написать прогу помогите совсем не соображу что делать.
Решение задачи: «Построение линейного апроксиматора на базе однонейроннои сети»
textual
Листинг программы
using System; using System.Collections.Generic; namespace ConsoleApplication180 { class Program { static void Main(string[] args) { //задаем парметры сигнала var gen = new Generator(3, 6, 1); //создаем нейрон var n = new Neuron(); //обучаем нейрон var count = 20000; foreach(var signal in gen.Generate()) { var x = signal.Item1; var y = signal.Item2; var output = n.GetOutput(x); var error = y - output; n.Learn(x, error); if (count-- < 0) break; } //выводим веса нейрона Console.WriteLine("W1: {0:0.00} W2: {1:0.00}", n.W1, n.W2); Console.ReadLine(); } } class Neuron { /// <summary> /// Коэффициент входа /// </summary> public float W1 { get; set; } /// <summary> /// Коэффициент смещения /// </summary> public float W2 { get; set; } /// <summary> /// Скорость обучения /// </summary> public float LearnSpeed { get; set; } public Neuron() { LearnSpeed = 0.01f; W1 = 1; W2 = 0; } public float GetOutput(float input) { return input * W1 + W2; } public void Learn(float input, float error) { W1 = W1 + LearnSpeed * error * input; W2 = W2 + LearnSpeed * error; } } class Generator { private float m; private float c; private float b; private Random rnd = new Random(); public Generator(float m , float c, float b) { this.m = m; this.c = c; this.b = b; } public IEnumerable<Tuple<float, float>> Generate() { while(true) { var s = (float)rnd.NextDouble()*2f - 1f; var x = (float)rnd.NextDouble(); var y = m * x + c + b *s; yield return new Tuple<float, float>(x, y); } } } }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д