为什么Conv2D在每一层中都有不同数量的过滤器

时间:2019-12-06 23:17:55

标签: tensorflow machine-learning keras deep-learning conv-neural-network

Keras document example学习

model = Sequential()
model.add(Conv2D(32, (3, 3), padding='same',    # why filter is 32?
                 input_shape=x_train.shape[1:]))
model.add(Activation('relu'))
model.add(Conv2D(32, (3, 3)))      # why filter is not changed?
model.add(Activation('relu'))
model.add(MaxPooling2D(pool_size=(2, 2)))
model.add(Dropout(0.25))

model.add(Conv2D(64, (3, 3), padding='same'))     # why filter is changed to 64?
model.add(Activation('relu'))
model.add(Conv2D(64, (3, 3)))
model.add(Activation('relu'))
model.add(MaxPooling2D(pool_size=(2, 2)))
model.add(Dropout(0.25))

model.add(Flatten())
model.add(Dense(512))     # why Dense neurons is 512? not 1024? what's the rule to set the number?

这是我的要求:

  1. 为什么第1层过滤器中的值为32,而在第2层中没有变化,但仍在第1层中?

  2. 为什么将第二层过滤器更改为64?设置号码的规则是什么?

  3. 为什么密集神经元是512个?不是1024?设置号码有什么规则?

谢谢

1 个答案:

答案 0 :(得分:2)

  

为什么第一层过滤器中的值为32,而在第二层中没有变化,但仍在第一层中?

过滤器的数量可以是任意数量。这只是在该层中拥有更多内核的问题。每个过滤器在输入的所有通道上进行单独的卷积。因此32个滤镜会在输入的所有 RGB通道上进行32个单独的卷积。

  

为什么将第二层过滤器更改为64?设置号码的规则是什么?

再次按照第一个答案,每层过滤器的数量可以是任意值。例如,在这里,第二层有64个过滤器,在第一层输出的所有 32个通道上进行64个独立的卷积。

  

为什么密集神经元是512个?不是1024?设置号码有什么规则?

再次,致密层可以具有任意数量的神经元。例如,您有一个64x64x3 RGB输入,您的最后一个卷积输出将产生(batch_size, 16, 16, 64)(假设padding='same'和最大池层的(2,2)跨度)输出。

经过Flatten()层后,这将成为(batch_size, 16*16*64)的输出。然后,将其转换为密集层的输入,并生成(batch_size, 512)输出(因为Dense层有512个神经元)。确切地说,Dense层执行以下矩阵乘法。 (batch_size, 16*16*64) x (16*16*64, 512)导致(batch_size, 512)层的输出大小为Dense

注意:要设置这些参数,最好的方法是对数据集进行超参数优化。

编辑:分别卷积是什么意思

因此,过滤器将在此处代表一种颜色。这是用于一维卷积(使用padding='valid')。但是你明白了。它们是随机初始化的单独过滤器。随着时间的流逝,他们学习各种过滤器。

enter image description here