1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
| // Compute convolution along the second and third dimension. Tensor<float, 4, DataLayout> input(3, 3, 7, 11); Tensor<float, 2, DataLayout> kernel(2, 2); Tensor<float, 4, DataLayout> output(3, 2, 6, 11); input.setRandom(); kernel.setRandom();Eigen::array<ptrdiff_t, 2> dims({1, 2}); // Specify second and third dimension for convolution. output = input.convolve(kernel, dims); for (int i = 0; i < 3; ++i) { for (int j = 0; j < 2; ++j) { for (int k = 0; k < 6; ++k) { for (int l = 0; l < 11; ++l) { const float result = output(i,j,k,l); const float expected = input(i,j+0,k+0,l) * kernel(0,0) + input(i,j+1,k+0,l) * kernel(1,0) + input(i,j+0,k+1,l) * kernel(0,1) + input(i,j+1,k+1,l) * kernel(1,1); VERIFY_IS_APPROX(result, expected); } } } }
|