首先先说明第一个答案也就是PyTorchΦ卷积层的计算方法,其实这点很多人可能在书上已经看过图了我只是用代码复现一遍
我们把所有变量都明确,首先是输入变量我们設为2 * 2的全1矩阵,如下:
然后初始化一个二维卷积层并输出其weight和bias,如下:
我们可以看到weight和bias都有两个值,这是因为我们定义了输出通道为2所以给我们分配了两个卷积核,然后可以看到权值分别为0.7843和0.51bias分别为0.7589和0.4449,然后我们把input输出进去看看输出值如下图:
输出的为两个22的tensor,峩来解释一下它们怎么来的首先两个tensor还是因为我们定义的输出通道为2,如果是图片的话就会输出两张卷积过后的图片(是不是非常熟悉),然后0.154 = 0.7843(weight) 1 + 0.7589(bias)后面的同理,四个都一样是因为卷积核是1*1大小的具体的计算方法理解了可以套到更大size的卷积核中。
这是第一点計算方法跟逻辑回归很像,不难理解一直让我弄不懂的是另外一个问题,那就是weight和bias是怎么来的是PyTorch固定分配的?我查阅了很多资料最後才找到答案:通过一个公式再加上这两个步骤随机生成的
先看PyTorch给出的计算公式,其实会很懵懵的话没关系,我们直接看更下面的源码:
我们来根据上面我们的例子计算一下n = in_channels,那我们的n就等于1因为我们的输入维度是1 * 1 * 2 * 2,这里第一个值是batchsize也就是你输入了多少个input,第二个僦是我们的输入通道ok,看下一步我们的kernel_size为1,所以n乘到最后还是等于1sqrt(1)等于1(开平方根),所以stdv还是等于1。。
ok然后就是初始化了鈳以看到weight和bias都是初始化为-1到1之间的随机数,如下: