Задать вопрос

Как написать нейросеть на языке программирования C#?

Я пробую писать простую нейросеть на C#. Мой код примерно такой(в общем):

public class NeuralNetwork 
{ 
    public class Neuron // нейрон
        { 
            public double Summ, Bias; 
        } 
    public class Layer  // слой
        { 
            public List<Neuron> Neurons = new List<Neuron>(); 
        } 
    public class Connection // соединение
        { 
            public int NeuronA, NeuronB, LayerA, LayerB; 
            public double Weight = 1; 
            public Connection(int nA, int nB, int lA, int lB, double w = 1) 
                { 
                       NeuronA, NeuronB, LayerA, LayerB, Weight = nA, nB, lA, lB, w ; 
                } 
        } 
        public List<Connection> Connections = new List<Connection>(); // список соединений
        public List<Layer> Layers= new List<Layer>(); // список слоёв
        public List<double> Inputs, CorrectOutputs; // входные данные и данные которые должны получиться
    //Дальше идут конструктор класса NeuralNetwork и методы Set_Inputs, Set_Layers, Activation_Functions, Auto_Create_Network, Forward_Propagation, Back_Propagation и Train. 
}

Проблема вот в чём: при обучении на одних данных, а потом на других, нейросеть подзабывает правильный ответ к предыдущим входным данным.
Что можете посоветовать? Если не понятно что я спрашиваю могу уточнить детали.
  • Вопрос задан
  • 3550 просмотров
Подписаться 4 Средний 1 комментарий
Пригласить эксперта
Ответы на вопрос 3
GavriKos
@GavriKos
нейросеть подзабывает правильный ответ к предыдущим входным данным

Мало слоев, мало нейронов, неправильная функция активации нейрона, неподходящий алгоритм сети исходя из данных - ну какие то такие базовые причины )))
Ответ написан
Steel_Balls
@Steel_Balls
Раз
два
три
четыре
let me google it for you
Ответ написан
@rPman
Самое 'простое', при дообучении новым данным, в обучающий датасет добавить целиком или частично предыдущий (эффективное прореживание данных, отдельная задача).

Можно расширить нейронную сеть (примерно как сделали с Mixture of Expert), считай обучить одну и ту же сеть разным данным, а затем из них собрать франкенштейна плюс классификатор, который на каждом слое/уровне вибирает, какую именно сеть использовать

Можно замораживать веса и обучать только на некоторых (что бы понимать что можно править а что нет, нужно иметь представление о том, какие именно данные где хранятся, а это может быть не просто, но и для этого есть алгоритмы)
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы