Построение линейного апроксиматора на базе однонейроннои сети - 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);
            }
        }
    }
}

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

10   голосов , оценка 4.2 из 5
Похожие ответы