public Layer(Layer lastLayer, uint countOfNeirons, IFuncOfActivation func) //Для последующих { for (int i = 0; i < countOfNeirons; i++) { neirons.Add(new Neiron(func)); //Добавление весов в соответсвии с количеством нейронов на прошлом слое for (int k = 0; k < lastLayer.neirons.Count; k++) { Random rand = new Random(); neirons[i].LastChangeWeight.Add(0); neirons[i].WeightIn.Add(rand.NextDouble()); } } }
public Layer(uint countOfInputs, uint countOfNeirons, IFuncOfActivation func) //Для первого скрытого слоя { for (int i = 0; i < countOfNeirons; i++) { neirons.Add(new Neiron(func)); //Добавление весов в соответствии с количеством входных данных for (int k = 0; k < countOfInputs; k++) { Random rand = new Random(); neirons[i].LastChangeWeight.Add(0); neirons[i].WeightIn.Add(rand.NextDouble()); } } }
//Сеть создается начиная со скрытых слоев /// <summary> /// Cписок функций активации(классы с функциями FuncOfActivation() и Deriative()) /// 1.Линейная функция с утечкой: LeakyLinearUnit /// 2.Логистическая функция: Sigmoid /// 3.Гиперболический тангенс: Tangh /// </summary> public Network(IFuncOfActivation func, double learningRate, double momentum, params uint[] countOfNeironsOnLayers) { LearningRate = learningRate; Momentum = momentum; Outputs = new List <double>(); layers.Add(new Layer(countOfNeironsOnLayers[0], countOfNeironsOnLayers[1], func)); //Нулевой слой - количество входных данных for (int i = 2; i < countOfNeironsOnLayers.Length; i++) { layers.Add(new Layer(layers[i - 2], countOfNeironsOnLayers[i], func)); } for (int i = 0; i < layers[layers.Count - 1].neirons.Count; i++) //Добавление выходных данны последнего слоя { Outputs.Add(0); } CountOfLayers = countOfNeironsOnLayers.Length; }
internal Neiron(IFuncOfActivation func) { this.func = func; Delta = 0; }