CNN中输入的不平衡纵横比

2024-09-29 19:36:22 发布

您现在位置:Python中文网/ 问答频道 /正文

在TysFooLoad中使用以下模型考虑以下模型:

Conv2D(
    filter = 2^(5+i)    # i = num of times called conv2D
    kernel = (3, 3),
    strides = (1, 1),
    padding = 'valid')

MaxPooling2D(
    pool_size = (2, 2))
Layer                 Output Shape    Param
-----------------------------------------------
L0:  Shape            (50, 250, 1  )  0
L1:  Conv2D           (48, 248, 32 )  320
L2:  MaxPooling2D     (24, 124, 32 )  0
L3:  Conv2D_1         (22, 122, 64 )  18496
L4:  MaxPooling2D_1   (11, 61,  64 )  0
L5:  Conv2D_2         (9,  59,  128)  73856
L6:  MaxPooling2D_2   (4,  29,  128)  0
L7:  Conv2D_3         (2,  27,  256)  295168  !!
L8:  MaxPooling2D_3   (1,  13,  256)  0
L9:  Flatten          (3328)          0
L10: Dense            (512)           1704448 !!!
L11: ...

这里,使用比例为1:5的输入形状。在L8之后,不能有更多的卷积层,因为一侧是1。实际上,在input_side < kernel_size的情况下,没有更多的卷积层;该层被迫展平为具有大量单元的向量,这是由于网络中的大形状[1][3]和大量过滤器[2]造成的。下面的Dense层[4]将具有大量的参数,需要大量的计算时间

为了减少特定于上述问题(在[x]中突出显示)的参数数量,我考虑以下方法:

  1. Conv2D的早期层中添加(1,2)步幅。(请参阅this thread
  2. 过滤器的数量从[32,64,128,256,…]减少到[16,24,32,48,…]
  3. 将输入数据调整为方形输入,以便可以应用更多的Conv2D
  4. 将来将第一层Dense中的单位数量从512减少到128

我的问题是,这些方法有效吗?它们会在多大程度上影响CNN的表现?有没有更好的办法解决这个问题?谢谢


Tags: 方法模型过滤器参数size数量kernel卷积
1条回答
网友
1楼 · 发布于 2024-09-29 19:36:22

首先,您可以尝试使用“相同”填充而不是有效填充。在某种程度上,它会使你从这些日益减少的数字中解脱出来

关于第1点:

只有当数据在某个方向(在本例中为水平方向)上有更多变化时,添加非均匀步幅才是好的

关于第2点:

过滤器的数量无助于或损害尺寸变化的方式。如果您的模型没有过度拟合,这将影响您的性能

关于第3点:

将输入调整为方形似乎是个好主意,但由于您添加的所有额外内容,会导致不必要的神经元死亡。我建议反对。这可能会影响性能并导致过度装配

关于第4点:

在这里,单位的数量同样不会改变尺寸。如果您的模型没有过度拟合,这将影响您的性能

最后,您的人际网络足够深入,可以获得良好的效果。而不是试图变得越来越小。尝试在MaxPools之间增加Conv2D层,这样会更好

相关问题 更多 >

    热门问题