Keras SeparableConv2D简单的例子?

时间:2018-03-13 18:34:28

标签: python keras

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

我选择了带有11599列车的64x64数据集和带有200个标签的2891测试数据集。

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)

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

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

StartUpdateStr = "Update tblAfterSale SET "
EndUpdateStr = " WHERE IDAfterSale = "
IDAfterSale = Me.lblIDAfterSale.Caption

db.Execute StartUpdateStr & "Data1 = " & Me.Lable1.Caption & EndUpdateStr & IDAfterSale
db.Execute StartUpdateStr & "Data2 = " & Me.Lable2.Caption & EndUpdateStr & IDAfterSale
db.Execute StartUpdateStr & "Data3 = " & Me.Lable3.Caption & EndUpdateStr & IDAfterSale
db.Close

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

1 个答案:

答案 0 :(得分:2)

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

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

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

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

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