二维卷积层 讨论区

关键是你的X的shape是什么?

调用corr2d,声明Y= nd.zeros()时,Y存入了内存里,虽然X,k在显存里,但计算Y的时候,因为Y在内存,所以将X,k复制到了内存,再进行计算。
你试试Y=nd.zeros(, ctx=mx.gpu()),最终结果就会用GPU计算

多谢回复。
确实是忘记检查X的shape了


横的和斜的用的同一个卷积核
K = nd.array([[1], [-1]])横向边缘输出少了一行、纵向边缘检测输出少了一列,斜的应该是什么样的呢?这个卷积核是不是不对呀

image
作业二。我改完之后也还是可以自动求梯度的。。。为何

这个没问题呀,你看PDF上的例程,也是这样,是因为原图像没有padding,你继续看下一节就知道怎么回事了,如果是斜着检测边缘的话,创建的检测子起码就需要是2*2的了,比如说罗伯特检测算子(这些都是图像的基本知识,可以直接自网上找边缘检测算子)

请问现在这个问题解决了吗,是因为啥呀

我刚才在我电脑上试的是没有问题

同问,请问什么原因,解决了吗?

image
修改环节:
(1)第五行:range(10) 改为:range(100)
(2)倒数第四行:i%2 改为:i%10
(3)倒数第一行:3e-2 改为:7e-3

解释说明:主要是learning_rate的调整;值过大,梯度下降变快;无法到达最低点,同时可能会增大weight的值;值过小,梯度下降变慢,需要更多时间才能收敛。

2赞

请问为什么用nd.Convolution的效果不如用nn.Conv2D好?在参数一样的情况下,图一中loss明显比图二中要小,收敛速度快。重复训练多次后依然是这样。

图一:使用nn.Conv2D

图二:使用nd.Convolution

小白请教,请问卷积层分隔可以通过核函数[-1,1]看出,那还有其它经典的核函数的作用吗

第3题,还没有人问过,如何把互相关运算表示成一个矩阵乘法?

相关资料不好找呀,根据Pete Warden的介绍,是先把感受野做一维向量化转置,再把所有感受野对应的转置结果堆成矩阵,最后与卷积核的一维向量矩阵做矩阵乘法,是这样吗?或者有其它资料吗?

参看这篇英文文献


上面是3D卷积的传统计算方式与矩阵乘法计算方式的对比,我们知道卷积和矩阵乘法都是乘一下求和的计算方式,所以推测可以将每个窗口内的元素拉成向量,通过向量内积进行运算,多个窗口的向量放在一起就成了矩阵,每个卷积核也拉成向量,多个卷积核的向量排在一起也成了矩阵,于是,卷积运算就转化成了矩阵运算。
但是并不是所有的卷积运算都能转为矩阵乘法,需要输入矩阵形状与核的形状满足某种条件才行
参考这里
他的例子是3D的我有些看不明白,学习更加深入后我相信会有更深的理解

会不会是Conv2D和 nn.Convolution 初始化不一样?

Input features理解为1张照片的RGB三个通道,即输入通道数为3;卷积核个数,即为输出通道数为2;卷积核的输入通道必须与输入的通道数一致。每个卷积核的输入通道与对应的通道的输入特征做互相关运算,然后合并。
如果输入输出通道为1,只看圈线部分。


我在看到你的截图前像这样考虑过,问题是获得的结果还是要reshape才能得到一致的结果。将input展开,用矩阵乘法,我理解这是用空间换时间。

From zhihu:
卷积神经网络简介

有看到全连接层做物体边缘检测的例子么?

yep, 就是deliate参数

我开始也是围绕output features形状来思考,结果是如上图的相反,将vet(kernel) * matrix(input)= output

1赞