CNN中卷积核数和输出通道数的关系

不想你离开。 提交于 2020-01-14 01:32:56

卷积神经网络cnn中,卷积核大小一般取1、3、5…,其通道数是与输入通道数相等的,卷积核大小加上通道数成为一个卷积核CinsizesizeC_{in}*size*size。卷积核数与输出通道数是相等的,且可以自定义,取决于自己的实验设置。
如果一个卷积核会有三个通道,每个卷积核对三个通道的图片卷积然后相加得到一个feature map(此时为一个二维矩阵)。

有一个动态图展示了其中的运算过程。原图出处

图中卷积核Fileter的个数与输出通道数Outout是对应的,每一个输出由多通道卷积累加并加上偏执Bias得到,一个卷积核只有一个偏执值。PyTorch框架对卷积运算Conv2d的描述亦是如此。
卷积运算
特地以PyTorch代码验证一下动图中的运算。关键函数conv2d()参见官方文档

import torch
import torch.nn.functional as F
import numpy

input = torch.FloatTensor([ [[[0, 1, 1, 2, 2], [0, 1, 1, 0, 0], [1, 1, 0, 1, 0], [1, 0, 1, 1, 1], [0, 2, 0, 1, 0]],
[[1, 1, 1, 2, 0], [0, 2, 1, 1, 2], [1, 2, 0, 0, 2], [0, 2, 1, 2, 1], [2, 0, 1, 2, 0]],
[[2, 0, 2, 0, 2], [0, 0, 1, 2, 1], [1, 0, 2, 2, 1], [2, 0, 2, 0, 0], [0, 0, 1, 1, 2]]] ])

weight = torch.FloatTensor([ [[[1, 1, -1], [-1, 0, 1], [-1, -1, 0]], [[-1, 0, -1], [0, 0, -1], [1, -1, 0]], [[0, 1, 0], [1, 0, 1], [0, -1, 1]]],
[[[-1, -1, 0], [-1, 1, 0], [-1, 1, 0]], [[1, -1, 0], [-1, 0, -1], [-1, 0, 0]], [[-1, 0, 1], [1, 0, 1], [0, -1, 0]]] ])

output = F.conv2d(input, weight=weight, bias=torch.FloatTensor([1,0]), padding=1, stride=2)
print(output)

输出结果:

tensor([[[[ 1.,  0., -3.],
          [-6.,  1.,  1.],
          [ 4., -3.,  1.]],

         [[-1., -6., -4.],
          [-2., -3., -4.],
          [-1., -3., -3.]]]])

之所以输入/输出为四维,因为PyTorch默认需要mini-batch,这里batch = 1。

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!