示例#1
0
        public void ConvolveBatch()
        {
            // 3x3x3x2
            var input = new Double.Volume(new double[27 * 2].Populate(1.0f), new Shape(3, 3, 3, 2),
                                          GpuContext.Default);

            // 2x2x3x2
            var filter = new Double.Volume(
                new double[12].Populate(1.0f).Concat(new double[12].Populate(2.0f)).ToArray(),
                new Shape(2, 2, 3, 2),
                GpuContext.Default);

            var result = input.Convolve(filter, 0, 2);

            // 1x1x2x2
            Assert.AreEqual(1, result.Shape.GetDimension(0));
            Assert.AreEqual(1, result.Shape.GetDimension(1));
            Assert.AreEqual(2, result.Shape.GetDimension(2));
            Assert.AreEqual(2, result.Shape.GetDimension(3));

            Assert.AreEqual(12.0, result.Storage.Get(0, 0, 0, 0));
            Assert.AreEqual(24.0, result.Storage.Get(0, 0, 1, 0));
            Assert.AreEqual(12.0, result.Storage.Get(0, 0, 0, 1));
            Assert.AreEqual(24.0, result.Storage.Get(0, 0, 1, 1));
        }
示例#2
0
        public void FullyCon()
        {
            // 1x3x1x1
            var input = new Double.Volume(new[] { 1.0, 2.0, 3.0 }, new Shape(1, 1, 3, 1));

            // 1x1x3x2
            var filter = new Double.Volume(
                new[] { 1.0, 1.0, 1.0, 2.0, 2.0, 2.0 },
                new Shape(1, 1, 3, 2));

            var result = input.Convolve(filter, 0, 1);

            // 1x1x2x1
            Assert.AreEqual(1, result.Shape.GetDimension(0));
            Assert.AreEqual(1, result.Shape.GetDimension(1));
            Assert.AreEqual(2, result.Shape.GetDimension(2));
            Assert.AreEqual(1, result.Shape.GetDimension(3));

            Assert.AreEqual(6.0, result.Storage.Get(0, 0, 0));
            Assert.AreEqual(12.0, result.Storage.Get(0, 0, 1));
        }