예제 #1
0
            public void MaxPoolingTest()
            {
                var input = MatrixProcessor.MaxPool(new double[5, 5]
                {
                    { 5, 2, 1, 9, 8 },
                    { 3, 1, 2, 3, 5 },
                    { 0, 6, 2, 8, 1 },
                    { 3, 4, 9, 2, 1 },
                    { 6, 3, 1, 2, 2 }
                }, 2);

                var actual = MatrixProcessor.ReverseMaxPool(new double[3, 3]
                {
                    { 3, 3, 3 },
                    { 3, 3, 3 },
                    { 3, 3, 3 }
                }, 2, 5, input.MaxCoordinates);

                var expected = new double[5, 5]
                {
                    { 3, 0, 0, 3, 3 },
                    { 0, 0, 0, 0, 0 },
                    { 0, 3, 0, 0, 3 },
                    { 0, 0, 3, 0, 0 },
                    { 3, 0, 0, 3, 3 }
                };

                for (int i = 0; i < actual.GetLength(0); i++)
                {
                    for (int j = 0; j < actual.GetLength(1); j++)
                    {
                        Assert.AreEqual(actual[i, j], expected[i, j]);
                    }
                }
            }
예제 #2
0
            public void NewReverseMaxPoolingTest()
            {
                var input = new double[, , ]
                {
                    {
                        { 70, 96, 21 },
                        { 68, 70, 99 },
                        { 93, 90, 37 }
                    },
                    {
                        { 69, 83, 63 },
                        { 96, 64, 96 },
                        { 89, 91, 31 },
                    }
                };

                var expected = new double[, , ]
                {
                    {
                        { 0, 0, 0, 0, 0 },
                        { 70, 0, 0, 96, 21 },
                        { 0, 0, 0, 70, 0 },
                        { 0, 68, 0, 0, 99 },
                        { 0, 93, 0, 90, 37 }
                    },
                    {
                        { 69, 0, 0, 83, 63 },
                        { 0, 0, 0, 0, 0 },
                        { 96, 0, 0, 0, 0 },
                        { 0, 0, 64, 0, 96 },
                        { 89, 0, 0, 91, 31 },
                    }
                };


                var input2 = new bool[, , ]
                {
                    {
                        { false, false, false, false, false },
                        { true, false, false, true, true },
                        { false, false, false, true, false },
                        { false, true, false, false, true },
                        { false, true, false, true, true }
                    },
                    {
                        { true, false, false, true, true },
                        { false, false, false, false, false },
                        { true, false, false, false, false },
                        { false, false, true, false, true },
                        { true, false, false, true, true },
                    }
                };

                var actual = MatrixProcessor.ReverseMaxPool(input, input2, 2);

                Helper.CompareArrays(expected, actual);
            }
예제 #3
0
        public override Value PassBackward(Value value)
        {
            var output = MatrixProcessor.ReverseMaxPool(value.Multi, _maxValues, _kernelSize);

            return(new MultiValue(output));
        }