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]); }
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(); } }