gpt4 book ai didi

python - Keras SeparableConv2D 简单示例?

转载 作者:太空宇宙 更新时间:2023-11-04 02:30:41 25 4
gpt4 key购买 nike

我已经阅读了很多关于可分离卷积的好东西,我正在尝试将其付诸实践。

我选择了 64x64 图片数据集,其中包含 11599 个火车和 2891 个用于测试的 200 个标签。

i = inp

i = Conv2D(filters = 64, kernel_size = 4)(i)
i = BatchNormalization()(i)
i = LeakyReLU()(i)
i = MaxPooling2D(2)(i)
i = Conv2D(filters = 64, kernel_size = 4)(i)
i = BatchNormalization()(i)
i = LeakyReLU()(i)
i = MaxPooling2D(2)(i)
i = Conv2D(filters = 64, kernel_size = 4)(i)
i = BatchNormalization()(i)
i = LeakyReLU()(i)
i = MaxPooling2D(2)(i)
i = Conv2D(filters = 64, kernel_size = 4)(i)
i = BatchNormalization()(i)
i = LeakyReLU()(i)

i = GlobalMaxPooling2D()(i)

i = Dense(len(labels), activation = 'softmax')(i)

这个模型给了我 0.75 的测试和 0.89 的训练精度

然后我决定尝试可分离卷积,但找不到简单的示例。在 Keras 存储库中,它在 xception 中使用,但对我来说太难了。

i = inp

i = Conv2D(filters = 32, kernel_size = 4)(i)
i = BatchNormalization()(i)
i = LeakyReLU()(i)
i = MaxPooling2D(2)(i)

i = Conv2D(filters = 32, kernel_size = 4)(i)
i = BatchNormalization()(i)
i = LeakyReLU()(i)
i = MaxPooling2D(2)(i)

i = SeparableConv2D(filters = 128, kernel_size = 4, strides = 1)(i)
i = BatchNormalization()(i)
i = LeakyReLU()(i)
i = SeparableConv2D(filters = 128, kernel_size = 4, strides = 1)(i)
i = BatchNormalization()(i)
i = LeakyReLU()(i)

i = GlobalMaxPooling2D()(i)

i = Dense(len(labels), activation = 'softmax')(i)

m = Model(inp, i)

使用这个模型,我获得了大致相同的结果。我认为我做错了什么。

最佳答案

嗯 - 这很难说,但我认为您误解了使用 SeparableConvolution 的主要目的。使用引入的分解主要有两个原因:

  • 减少参数数量并加快计算速度,
  • 减少过度拟合(通过简化网络架构)。

因此 - 在您的情况下,您可以通过以下方式检查是否发生了这种情况:

  • 比较训练/推理的时间和参数数量,
  • 检查过度拟合是否较少。

所有这些都可以通过网络日志和model.summary() 函数获得。

关于python - Keras SeparableConv2D 简单示例?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49263487/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com