Пример #1
0
 //обновляет массив сигналов значениями из массива чисел
 public static void InsertFloats(Signal[] signalsDst_, float[] floatsSrc_)
 {
     if (floatsSrc_.Length != signalsDst_.Length) throw new Exception("floats_src.Length!=signals_dst.Length");
     for (int i = 0, c = signalsDst_.Length; i < c; i++) signalsDst_[i].Value = floatsSrc_[i];
 }
Пример #2
0
 //возвращает массив пустых сигналов
 public static Signal[] GetSignalArr(int len_)
 {
     var res = new Signal[len_];
     for (int i = 0, c = res.Length; i < c; i++) res[i] = new Signal();
     return res;
 }
Пример #3
0
 //переводит сигналы в обычный массив чисел
 public static float[] ConvertSignals(Signal[] signals_)
 {
     var res = new float[signals_.Length];
     for (int i = 0, c = signals_.Length; i < c; i++) res[i] = signals_[i].Value;
     return res;
 }
Пример #4
0
        //СОЕДИНЕНИЕ С ИСТОЧНИКАМИ СИГНАЛОВ
        //пересоединяет нейрон с указанными источниками сигнала
        public void Reconnect(Signal[] signals_)
        {
            Dendrites = new Dendrite[signals_.Length];

            var weightMagnitude = 10f / (signals_.Length + 1);
            //соединяем с небольшими случайными весами
            for (int i = 0, c = signals_.Length; i < c; i++)
            {
                Dendrites[i] = new Dendrite() { Signal = signals_[i], Weight = GetRandomWeight(weightMagnitude) };
            }
            BiasDendrite = new Dendrite() { Signal = NNHelper.UnitSignal, Weight = GetRandomWeight(weightMagnitude) };
        }
Пример #5
0
        internal float dy_ds; //производная выходного значения нейрона по взвешенной сумме его входов

        #endregion Fields

        #region Constructors

        public Neuron()
        {
            Output = new Signal { SourceNeuron = this };
        }
Пример #6
0
        //СОЕДИНЕНИЕ НЕЙРОНОВ В СЛОЯХ
        //соединяет указанный нейрон с указанными сигналами предыдущего слоя или со всеми сигналами, если specific_target_neurons==null
        public void ConnectNeuron(int layer_ind, int neuron_ind, List<int> specific_input_signals)
        {
            var neuron = Layers[layer_ind].Neurons[neuron_ind];

            Signal[] signals_ = null, signals = null;

            if (layer_ind == 0) signals_ = InputSignals;
            else signals_ = Array.ConvertAll(Layers[layer_ind - 1].Neurons, n => n.Output);

            if (specific_input_signals == null)
            {
                //полное подсоединение
                signals = signals_;
            }
            else
            {
                int c = specific_input_signals.Count;
                signals = new Signal[c];
                for (int i = 0; i < c; i++)
                {
                    //частичное подсоединение
                    int k = specific_input_signals[i];
                    signals[i] = signals_[k];
                }
            }

            neuron.Reconnect(signals);
        }