public double[] CalculateOutput(double x, double y, double[] parameters)
        {
            var       paramIdx         = 0;
            var       outputs          = new double[_layers.Length][];
            const int likenessLayerIdx = 1;

            // 1 - likeness neuron layer
            outputs[likenessLayerIdx] = new double[_layers[likenessLayerIdx]];

            // Activate the likeness layer
            for (var likenessNeuronIdx = 0; likenessNeuronIdx < _layers[likenessLayerIdx]; likenessNeuronIdx++)
            {
                var weightX   = parameters[paramIdx++];
                var varianceX = parameters[paramIdx++];
                var weightY   = parameters[paramIdx++];
                var varianceY = parameters[paramIdx++];

                var xy = new[] { x, y };
                var w  = new[] { weightX, weightY };
                var s  = new[] { varianceX, varianceY };

                outputs[likenessLayerIdx][likenessNeuronIdx] = ActivationFunctions.Likeness(xy, w, s);
            }

            // Pass through the hidden layer
            for (var hiddenLayerIdx = 2; hiddenLayerIdx < _layers.Length; hiddenLayerIdx++)
            {
                var hidden = _layers[hiddenLayerIdx];
                outputs[hiddenLayerIdx] = new double[hidden];
                var previousOutput = outputs[hiddenLayerIdx - 1];

                // Pass through every neuron
                for (var hiddenNeuronIdx = 0; hiddenNeuronIdx < hidden; hiddenNeuronIdx++)
                {
                    // Collect previous outputs
                    // Bias + previous output
                    var output = parameters[paramIdx++] + previousOutput.Sum(o => o * parameters[paramIdx++]);
                    outputs[hiddenLayerIdx][hiddenNeuronIdx] = ActivationFunctions.Sigmoid(output);
                }
            }

            return(outputs[_layers.Length - 1]);
        }
コード例 #2
0
        private static void Task1()
        {
            var          path = Root + "Files/Data/Task1/";
            var          y    = new List <double>();
            var          x    = new List <double>();
            const double w    = 2.0;
            var          ss   = new[] { 1.0, 0.25, 4.0 };

            foreach (var s in ss)
            {
                for (var i = -8; i <= 10; i++)
                {
                    x.Add(i);
                    y.Add(ActivationFunctions.Likeness(new double[] { i }, new[] { w }, new[] { s }));
                }

                path = $"{path}/s{s.ToString(CultureInfo.InvariantCulture).Replace('.', '_')}.txt";
                FileHelper.WriteToFile(x, y, path);
                y.Clear();
                x.Clear();
            }
        }