堆叠卷积层是如何在CNN中工作的



我很难理解CNN中2个或多个卷积层(每个层后面都有一个池化层(的工作方式。

将输入视为3通道300x300图像。如果第一卷积层具有32个卷积,而第二层具有64个卷积层,则第一层创建32个特征图。但是第二层创建了多少个特征图?64个卷积中的每个卷积是否都作用于之前生成的32个特征图,从而总共创建32*64=2048个特征图?还是发生了其他事情?

与这个问题相关的一个简单代码是:

model = keras.models.Sequential([
keras.layers.Conv2D(32, (3, 3), activation='relu', input_shape=(300, 300, 3)),
keras.layers.MaxPooling2D(2, 2),
keras.layers.Conv2D(64, (3, 3), activation='relu'),
keras.layers.MaxPooling2D(2, 2)])

输入矩阵的通道数和每个滤波器中的通道数必须匹配,才能执行逐元素乘法

因此,第一次和第二次卷积之间的主要区别是,第一次卷积中输入矩阵中的通道数为3,因此我们将使用32个滤波器,其中每个滤波器有3个通道(内核矩阵的深度(。

对于第二次卷积,输入矩阵有32个通道(特征图(,因此该卷积的每个滤波器也必须有32个信道。例如:64个过滤器中的每一个都将具有32@3x3形状

单个滤波器的卷积步骤的结果32@3x3形状将是WxH(宽度,高度(形状的单个通道。在应用所有64个过滤器(其中每个过滤器都具有形状:32@3x3)我们将得到64个通道,其中每个通道都是单个滤波器卷积的结果。

第一个卷积层有32个滤波器,但它适用于图像的所有三个通道,因此第一个Conv2D之后的特征图为32x3=96,然后第二个Conv2D的64个滤波器分别适用于96个特征图中的每一个,因此第二个Conv2D之后为64x96=。。。(填空(
但为了简单起见,Keras只显示(…,32(或(…,64(。您可以使用model.summary((进行检查。

最新更新