/// <summary> /// Klonuje matrix a następnie wykonuje na nim operację. /// </summary> /// <param name="m">Matrix.</param> /// <param name="operation">Operacja do wykonania.</param> /// <returns>Zwraca matrix z wykonaną na nim operacją.</returns> static public Matrix Foreach(Matrix m, FloatOperationHandler operation) { Matrix output = (Matrix)m.Clone(); output.Foreach(operation); return(output); }
/// <summary> /// Iteruje przez wszytkie dane matrixu i wykonuje na nich operację. /// </summary> /// <param name="operation">Operacja do wykonania.</param> public void Foreach(FloatOperationHandler operation) { for (int x = 0; x < Rows; x++) { for (int y = 0; y < Columns; y++) { Data[x, y] = operation.Invoke(Data[x, y]); } } }
/// <summary> /// Tworzy nową 3 warstwową sieć neuronową z określonym rozmiarem każdej warstwy i określonymi funkcjami aktywacyjnymi. /// </summary> /// <param name="inputsLayerSize">Ilość inputów.</param> /// <param name="hiddenLayerSize">Ilość ukrytych neuronów.</param> /// <param name="outputsLayerSize">Ilość outputów.</param> /// <param name="hiddenLayerActivationFunction">Funkcja aktywacyjna dla neuronów ukrytej warstwy.</param> /// <param name="outputLayerActivationFunction">Funkcja aktywacyjna dla neuronów warstwy outputów.</param> /// <param name="hiddenLayerDerivativeFunction">Pochodna dla funckcji aktywacyjnej warstwy ukrytej.</param> /// <param name="outputLayerDerivativeFunction">Pochodna dla funckcji aktywacyjnej warstwy outputów.</param> public SimpleNeuralNetwork(int inputsLayerSize, int hiddenLayerSize, int outputsLayerSize, ActivationFunctionHandler hiddenLayerActivationFunction, ActivationFunctionHandler outputLayerActivationFunction, FloatOperationHandler hiddenLayerDerivativeFunction, FloatOperationHandler outputLayerDerivativeFunction) { InputsLayerSize = inputsLayerSize; HiddenLayerSize = hiddenLayerSize; OutputsLayerSize = outputsLayerSize; HiddenLayerActivationFunction = hiddenLayerActivationFunction; OutputLayerActivationFunction = outputLayerActivationFunction; HiddenLayerDerivativeFunction = hiddenLayerDerivativeFunction; OutputLayerDerivativeFunction = outputLayerDerivativeFunction; weightsIh = new Matrix(HiddenLayerSize, InputsLayerSize); weightsHo = new Matrix(OutputsLayerSize, HiddenLayerSize); weightsIh.Randomize(-1, 1); weightsHo.Randomize(-1, 1); biasH = new Matrix(HiddenLayerSize, 1); biasO = new Matrix(OutputsLayerSize, 1); biasH.Randomize(-1, 1); biasO.Randomize(-1, 1); }