在一般的深度学习框架的 conv2d 中,如 tensorflow、mxnet,channel 都是必填的一个参数
在 tensorflow 中,对于输入样本中 channels 的含义,一般是RGB图片,channels的数量是3(R、G、B)。而灰度图是的channels是1;
mxnet 中,一般channels的含义是:每个卷积层中卷积核的数量。
为了更好的理解,下面举个例子。图片来自 吴恩达老师的深度学习课程
假设有一个 6x6x3的图片样本,使用 3x3x3的卷积核。此时输入的 channels 为3。而卷积核中的 in_channels 与需要进行卷积操作的数据channels一致
卷积:27个数字分别与样本对应相乘,在进行求和,得到第一个结果。依次进行,最终得到 4x4 的结果
由于只有一个卷积核,最终得到的结果是 4x4x1,out_channels为1
在实际应用中,都会使用多个卷积核。这里如果再加一个卷积核,就会得到 4x4x2 的结果
总结一下,把上面提到的channels分为三种:
1. 最初图片的输入样本channels,取决于图片类型,比如RGB;
2. 卷积操作完成后输出的 out_channels,取决于卷积核的数量。此时的 out_channels 也会作为下一次卷积时的 in_channels;
3. 卷积核中的 in_channels,刚刚2中已经说了,就是上一次卷积的out_channels,如果是第一次做卷积,就是1中样本图片的 channels
其实在CNN中,搞清楚每一层的传递关系,主要就是height、width的变化情况,以及 channels 的变化情况
在看看 tensorflow 中 tf.nn.conv2d 的 input 和 filter 这两个参数
input : [batch,in_height,in_width,in_channels]
filter : [filter_height,filter_width,in_channels,out_channels]
参考地址:
https://blog.csdn.net/sscc_learning/article/details/79814146