首页 文章

自动确定在keras CNN Conv2D层中使用的最佳滤波器大小

提问于
浏览
0
model.add(Conv2D(32, (5, 5),
                  padding='same',
                  data_format='channels_last',
                  input_shape=input_shape))


model.add(BatchNormalization())
model.add(Activation('relu'))
model.add(Conv2D(32, (3, 3)))
model.add(BatchNormalization())
model.add(Activation('relu'))
model.add(MaxPooling2D(pool_size=(2, 2)))
model.add(Dropout(0.25))

model.add(Conv2D(64, (3, 3), padding='same'))
model.add(BatchNormalization())
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))
model.add(Activation('relu'))
model.add(Dropout(0.25))

model.add(Dense(num_classes))
model.add(Activation('softmax'))

这就是我目前的keras模型,它完全是从here借来的 .

我的问题有两个部分,
1.如何自动确定是否使用 model.add(Conv2D(32, (3, 3)))model.add(Conv2D(32, (5,5)))model.add(Conv2D(32, (4,4)))
2.除了模型的第一行,如果我将conv2D(64,(3,3))模型的其余部分改为(5,5),我得到`通过从3减去5得到的负维度) . 这是为什么?

我看了这两个问题:Selecting number of strides and filters in CNN (Keras)Conv2D layer output shape in keras
根据他们的实验是唯一可以找到的方法,但我想知道是否有自动方法来做到这一点 . 因为有很多参数,如 value of dropoutkernel_size() ,然后 Dense() 的值应该是512/356或多少是最好的 .

PS:运行具有不同参数的不同模型变得计算成本昂贵,并且比较所有这些结果正成为另一个痛苦的过程 . 我的笔记本电脑有一个2GB的nvidia显卡,具有5.0计算能力 .

1 回答

  • 1
    • 内核维度是超参数,您可以使用多种策略自动优化这些参数 . Here are a couple of tips for that

    • 卷积层的输出高度/宽度遵循等式 size = ((input_size - kernel_size) / stride) + 1 . 因此,对于太小的图像,您使用了太多的卷积图层 . 在某些时候 size 将是负数,你不能有负形状输出

相关问题