当使keras模型具有不固定的输入数据大小时,是否可以使用lambda层根据大小来应用不同的层?

时间:2019-01-24 04:56:50

标签: python lambda keras jupyter

我正在处理卷积图像模型,将其转换并存储到yaml文件中,然后在代码中使用它。   输入图像的完整大小为256 * 256,但是在训练过程中,我使用大小为128 * 128的补丁来训练模型,并在验证过程中获得了完整大小的图像。因此,模型的输入大小设置为“无”。   我想通过仅裁剪该输入层中图像的中间部分(尺寸为64 * 64)来创建模型。这时,模型必须根据输入图像的大小裁剪不同长度的图像,以产生相同的输出大小(64 * 64)。但是,是否可以在我的代码中应用if-else语句?如果您可以帮助我编写代码,我将不胜感激。

patch = (None,None, 6)
x_input = Input(shape=patch)

def get_crop(x):
    from keras.layers import Cropping2D
    if x.get_shape().as_list()[1:3] ==[256,256]:
        return Cropping2D(cropping=(96,96))(x)
    else:
        return Cropping2D(cropping=(32,32))(x)

x_crop = Lambda(get_crop)(x_input)

1 个答案:

答案 0 :(得分:0)

您最好在另一个StackExchange中进行询问,例如CrossValidation,但这是一个简短的答案。

当处理不同尺寸的图像时,有两种解决方案。首先是将大图像裁剪为多个子图像,并对每个子图像获得的类进行投票。第二个更好的解决方案是拥有一个完整的卷积网络。您可以用大卷积代替完全连接的块,并为分类层使用全局池(GlobalAveragePooling或MaxPooling)。

请注意,只有当您获得的图像较大时,这些解决方案才有效。如果图像较小,解决方案是缩放图像或填充图像。但更好的变焦。