Python CNN中输入的不平衡纵横比

Python CNN中输入的不平衡纵横比,python,tensorflow,keras,deep-learning,cnn,Python,Tensorflow,Keras,Deep Learning,Cnn,考虑以下在TensorFlow中使用keras的模型 Conv2D( filter=2^(5+i)#i=conv2D调用的次数 内核=(3,3), 步幅=(1,1), 填充='有效') MaxPoolig2D( 池大小=(2,2)) 这里,使用比例为1:5的输入形状。在L8之后,不能有更多的卷积层,因为一侧是1。实际上,在输入端

考虑以下在TensorFlow中使用keras的模型

Conv2D(
filter=2^(5+i)#i=conv2D调用的次数
内核=(3,3),
步幅=(1,1),
填充='有效')
MaxPoolig2D(
池大小=(2,2))
这里,使用比例为1:5的输入形状。在
L8
之后,不能有更多的卷积层,因为一侧是
1
。实际上,在
输入端
的情况下,不能有更多的卷积层;该层被迫展平为具有大量单元的向量,这是由于网络中的大形状[1][3]和大量过滤器[2]造成的。下面的
densite
层[4]将具有大量参数,需要大量计算时间

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

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

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

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

    关于第1点:

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

    关于第2点:

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

    关于第3点:

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

    关于第4点:

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


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

    请注意,该问题询问了减少参数数量的方法,在这种情况下,方法2和4实际上会有所帮助。谢谢。不均匀的步幅会导致一个轴上的信息丢失吗?我不太愿意在前几层中使用步幅(1,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: ...