public void ReportError_ModifiesErrorSignal() { // Setup test values var mockTarget = new Mock<ISupervisedLearnerNode>(); var mockSource = new Mock<ISupervisedLearnerNode>(); const double Weight = 0.25d; const double OriginalError = 12.34d; const double ExpectedError = OriginalError * Weight; var connection = new BackpropagationConnection(Weight, mockSource.Object, mockTarget.Object); // Execute var originalFlag = connection.IsReportingError; connection.ReportError(OriginalError); var finalFlag = connection.IsReportingError; var actualError = connection.ErrorSignal; // Verify Assert.IsFalse(originalFlag); Assert.IsTrue(finalFlag); Assert.AreEqual(ExpectedError, actualError, Epsilon); mockSource.Verify(mock => mock.CalculateError(actualError), Times.Once()); }
public void ApplyWeightAdjustments_UpdatesWeight() { //// SETUP const double InitialWeight = 0.25d; const double FireInput = 1.234d; const double ErrorSignal1A = -2.3d; const double ErrorSignal1B = -9.87d; const double AccumulatedError1 = ErrorSignal1A + ErrorSignal1B; const double ErrorSignal2 = 3.2345d; const float Momentum = 0.9f; const float LearningRate = 0.1f; const double ExpectedWeight1 = (AccumulatedError1 * FireInput * LearningRate) + InitialWeight; const double ExpectedWeight2 = ExpectedWeight1 + (ErrorSignal2 * FireInput * LearningRate) + (Momentum * (AccumulatedError1 * FireInput * LearningRate)); var mockTarget = new Mock<ISupervisedLearnerNode>(); var mockSource = new Mock<ISupervisedLearnerNode>(); // Create the test object. var connection = new BackpropagationConnection(InitialWeight, mockSource.Object, mockTarget.Object); connection.Fire(FireInput); // EXECUTION connection.ReportError(ErrorSignal1A); connection.ReportError(ErrorSignal1B); connection.ApplyWeightAdjustments(LearningRate, Momentum); var actual1 = connection.Weight; connection.ClearCachedErrors(); connection.ReportError(ErrorSignal2); connection.ApplyWeightAdjustments(LearningRate, Momentum); var actual2 = connection.Weight; // VERIFICATION Assert.AreEqual(ExpectedWeight1, actual1, Epsilon); Assert.AreEqual(ExpectedWeight2, actual2, Epsilon); }
public void ClearReportingFlag_ClearsReportingFlag() { //// SETUP const double InitialWeight = 0.25d; const double ErrorSignal = -2.3d; var mockTarget = new Mock<ISupervisedLearnerNode>(); var mockSource = new Mock<ISupervisedLearnerNode>(); // Create the test object. var connection = new BackpropagationConnection(InitialWeight, mockSource.Object, mockTarget.Object); // EXECUTION connection.ReportError(ErrorSignal); var preClearFlag = connection.IsReportingError; connection.ClearReportingFlag(); var postClearFlag = connection.IsReportingError; // VERIFICATION Assert.IsTrue(preClearFlag); Assert.IsFalse(postClearFlag); }