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)); }
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)); }