no_*_*ame 30 convolution matrix-multiplication neural-network deep-learning conv-neural-network
我知道在1-d情况下,两个矢量之间的卷积a
可以被计算为
b
,也可作为在之间的乘积conv(a, b)
和T_a
,其中b
是用于相应的托普利兹矩阵T_a
.
是否有可能将这个想法扩展到2-D?
给定a
和a = [5 1 3; 1 1 2; 2 1 3]
是否有可能b=[4 3; 1 2]
在Toeplitz矩阵中进行转换a
并T_a
在1-D情况下计算矩阵矩阵乘积?
Sal*_*ali 36
是的,这是可能的,您还应该使用双块循环矩阵(这是Toeplitz矩阵的特例).我将给你一个小内核和输入的例子,但是可以为任何内核构造Toeplitz矩阵.所以你有一个2d输入x
和2d内核k
,你想要计算卷积x * k
.我们也假设k
已经翻了.让我们也假设x
是大小n×n
和k
是m×m
.
因此,您将展开k
为大小的稀疏矩阵(n-m+1)^2 × n^2
,并展开x
为长向量n^2 × 1
.您计算此稀疏矩阵与向量的乘法,并将得到的向量(将具有大小(n-m+1)^2 × 1
)转换为n-m+1
方阵.
我很确定这只是从阅读中难以理解.所以这是一个2×2内核和3×3输入的例子.
这是一个带向量的构造矩阵:
这是你做的滑动窗口已经得到了相同的结果k
了x
.
Ali*_*ehi 12
让我成为输入信号,F是滤波器或内核.
如果I是m1 x n1而F是m2 x n2,则输出的大小为:
零填充滤波器使其与输出的大小相同.
现在所有这些小的Toeplitz矩阵都应该安排在一个大的双重阻塞的Toeplitz矩阵中.
该乘法给出了卷积结果.
有关更多详细信息和python代码,请查看我的github存储库:
使用python中的toeplitz矩阵逐步解释2D卷积实现为矩阵乘法