// передача сигналов от слоя layer к этому public void SetInputs(NeuralLayer layer) { double[] outputs = layer.GetOutputs(); for (int i = 0; i < inputsSize; i++) { inputs[i] = outputs[i]; } }
// получение массива ошибок относительно следующего слоя public double[] GetErrors(NeuralLayer nextLayer, double[] nextErrors) { double[] errors = new double[outputsSize]; for (int i = 0; i < outputsSize; i++) { errors[i] = 0; for (int j = 0; j < nextErrors.Length; j++) { errors[i] += nextErrors[j] * nextLayer.GetWeight(i, j); } } return(errors); }
public NeuralNetwork(int inputs, int outputs, int[] hiddenNeuronsSize, ActivationFunctionType hiddenActivation = ActivationFunctionType.sigmoid, ActivationFunctionType outputActivation = ActivationFunctionType.noChange) { this.inputs = inputs; this.outputs = outputs; this.hiddenNeuronsSize = hiddenNeuronsSize; inputLayer = new NeuralLayer(inputs, inputs, NeuralLayerType.input, ActivationFunctionType.noChange); hiddenLayers = new NeuralLayer[hiddenNeuronsSize.Length]; hiddenLayers[0] = new NeuralLayer(inputs, hiddenNeuronsSize[0], NeuralLayerType.hidden, hiddenActivation); for (int i = 1; i < hiddenNeuronsSize.Length; i++) { hiddenLayers[i] = new NeuralLayer(hiddenNeuronsSize[i - 1], hiddenNeuronsSize[i], NeuralLayerType.hidden, hiddenActivation); } outputLayer = new NeuralLayer(hiddenNeuronsSize[hiddenNeuronsSize.Length - 1], outputs, NeuralLayerType.output, outputActivation); }