Python CNN中输入的不平衡纵横比
考虑以下在TensorFlow中使用keras的模型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。实际上,在输入端
Conv2D(
filter=2^(5+i)#i=conv2D调用的次数
内核=(3,3),
步幅=(1,1),
填充='有效')
MaxPoolig2D(
池大小=(2,2))
这里,使用比例为1:5的输入形状。在L8
之后,不能有更多的卷积层,因为一侧是1
。实际上,在输入端
的情况下,不能有更多的卷积层;该层被迫展平为具有大量单元的向量,这是由于网络中的大形状[1][3]和大量过滤器[2]造成的。下面的densite
层[4]将具有大量参数,需要大量计算时间
为了减少特定于上述问题(在[x]中突出显示)的参数数量,我考虑以下方法:
Conv2D
的早期层。(请参阅)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: ...