public void Train(MatrixData inputs, MatrixData targets) { var inputSignals = inputs; var targetSignals = targets; var hiddenOutputs = Sigmoid(_weightInputHidden * inputs); var finalOutputs = Sigmoid(_weightHiddenOutput * hiddenOutputs); var outputErrors = targets - finalOutputs; var hiddenErrors = _weightHiddenOutput.GetTranspose() * outputErrors; _weightHiddenOutput += outputErrors * _learningRate * finalOutputs * (finalOutputs - 1.0) * hiddenOutputs.GetTranspose(); _weightInputHidden += hiddenErrors * _learningRate * hiddenOutputs * (hiddenOutputs - 1.0) * inputs.GetTranspose(); }