public void ForwardBackwardTest() { var data = new double[] { 3, 2, 1, 5, 4, 2, 6, 1, 8, 2, 6, 3, 6, 3, 9, 5 }; var input = new TensorOld(data, 1, 1, 4, 4); var pooling = new MaxPooling(2); pooling.PrepareTrain(input); var forward = pooling.Forward(input); var expected = new TensorOld(new double[] { 4, 6, 8, 9 }, 1, 1, 2, 2); Assert.Equal(expected, forward); var error = new TensorOld(new double[] { 0.5, 0.7, -0.3, 1.2 }, 1, 1, 2, 2); var backward = pooling.Backward(error); var backExpected = new TensorOld(new double[] { 0, 0, 0, 0, 0.5, 0, 0.7, 0, -0.3, 0, 0, 0, 0, 0, 1.2, 0 }, 1, 1, 4, 4); Assert.Equal(backExpected, backward); }
public void ForwardBackwardTest3() { var data = new double[] { 3, 2, 1, 5, 4, 2, 6, 1, 8, 2, 6, 3, 6, 3, 9, 5, 3, 2, 1, 5, 4, 2, 6, 1, 8, 2, 6, 3, 6, 3, 9, 5, 3, 2, 1, 5, 4, 2, 6, 1, 8, 2, 6, 3, 6, 3, 9, 5, 3, 2, 1, 5, 4, 2, 6, 1, 8, 2, 6, 3, 6, 3, 9, 5, 3, 2, 1, 5, 4, 2, 6, 1, 8, 2, 6, 3, 6, 3, 9, 5, 3, 2, 1, 5, 4, 2, 6, 1, 8, 2, 6, 3, 6, 3, 9, 5, }; var input = new TensorOld(data, 2, 3, 4, 4); var pooling = new MaxPooling(1, 3, 1, 3); pooling.PrepareTrain(input); var actual = pooling.Forward(input); var expected = new TensorOld(new double[] { 3, 6, 8, 9, 3, 6, 8, 9, 3, 6, 8, 9, 3, 6, 8, 9, 3, 6, 8, 9, 3, 6, 8, 9, }, 2, 3, 4, 1); Assert.Equal(expected, actual); var error = new TensorOld(new double[] { 0.8, 0.7, -1.5, 0.4, 0.8, 0.7, -1.5, 0.4, 0.8, 0.7, -1.5, 0.4, 0.8, 0.7, -1.5, 0.4, 0.8, 0.7, -1.5, 0.4, 0.8, 0.7, -1.5, 0.4, }, 2, 3, 4, 1); var backward = pooling.Backward(error); var backData = new double[] { 0.8, 0, 0, 0, 0, 0, 0.7, 0, -1.5, 0, 0, 0, 0, 0, 0.4, 0, 0.8, 0, 0, 0, 0, 0, 0.7, 0, -1.5, 0, 0, 0, 0, 0, 0.4, 0, 0.8, 0, 0, 0, 0, 0, 0.7, 0, -1.5, 0, 0, 0, 0, 0, 0.4, 0, 0.8, 0, 0, 0, 0, 0, 0.7, 0, -1.5, 0, 0, 0, 0, 0, 0.4, 0, 0.8, 0, 0, 0, 0, 0, 0.7, 0, -1.5, 0, 0, 0, 0, 0, 0.4, 0, 0.8, 0, 0, 0, 0, 0, 0.7, 0, -1.5, 0, 0, 0, 0, 0, 0.4, 0, }; var backExpected = new TensorOld(backData, 2, 3, 4, 4); Assert.Equal(backExpected, backward); }