Beispiel #1
0
        public NeuralNet(int inputLength, int hiddenLayersCount, int hiddenCount, int outputCount, double skew = -4d, int?seed = null)
        {
            _inputLength = inputLength;

            _hiddenLayers = new INeuralLayer[hiddenLayersCount];

            INeuralLayer clearHLayer = (INeuralLayer)Activator.CreateInstance(typeof(HLayer)) ?? throw new NeuralTypeException(typeof(INeuralLayer), typeof(HLayer));
            INeuralLayer clearOLayer = (INeuralLayer)Activator.CreateInstance(typeof(OLayer)) ?? throw new NeuralTypeException(typeof(INeuralLayer), typeof(OLayer));


            for (var i = 0; i < hiddenLayersCount; i++)
            {
                var z = i == 0 ? InputLength : _hiddenLayers[i - 1].NeuronsCount + 1;
                _hiddenLayers[i] = clearHLayer.Create(this, typeof(HCell), typeof(HBias), typeof(HFunc), hiddenCount, z, skew);
            }

            _outputLayer = clearOLayer.Create(this, typeof(OCell), typeof(HBias), typeof(OFunc), outputCount, _hiddenLayers.Last().NeuronsCount + 1, skew);

            if (seed.HasValue)
            {
                _entropy = new Random(seed.Value);
            }
            else
            {
                _entropy = new Random();
            }
        }