首页 文章

Can Keras可以处理不同大小的输入图像吗?

提问于
浏览
24

Keras可以处理不同大小的输入图像吗?例如,在完全卷积神经网络中,输入图像可以具有任何大小 . 但是,我们需要在Keras创建网络时指定输入形状 . 因此,我们如何使用Keras处理不同的输入大小而不将输入图像调整为相同的大小?谢谢你的帮助 .

2 回答

  • 12

    是 . 只需将输入形状更改为shape =(n_channels, NoneNone ) . 其中n_channels是输入图像中的通道数 .

    I'm using Theano backend 但是,如果您使用的是tensorflow,则可能需要将其更改为(None,None,n_channels)

    您应该使用:input_shape =(1,None,None)形状中的无表示可变维度 . 请注意,并非所有图层都适用于此类可变尺寸,因为某些图层需要形状信息(例如Flatten) . https://github.com/fchollet/keras/issues/1920

    例如,使用keras的功能API,您的输入层将是:

    对于RGB数据集

    inp = Input(shape=(3,None,None))
    

    对于灰色数据集

    inp = Input(shape=(1,None,None))
    
  • 23

    使用相同的计算内核实现任意大小的输入数组可能带来许多挑战 - 例如在GPU上,您需要知道要保留多大的缓冲区,以及更多地展开循环的数量等等 . 这是Keras需要恒定输入形状的主要原因,可变大小的输入太难以处理 .

    这在处理NLP中的句子等可变长度序列时更常见 . 常见的方法是 Build 大小的上限(和更长的序列),然后用零填充序列到这个大小 .

    (您还可以包括屏蔽零值以跳过填充区域上的计算,除了Keras中的卷积层可能仍然不支持屏蔽输入...)

    我不确定对于3D数据结构,填充的开销是不是过高 - 如果你开始出现内存错误,最简单的解决方法是减少批量大小 . 让我们知道您在图像上应用此技巧的经验!

相关问题