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

时间:2016-10-02 07:22:26

标签: machine-learning deep-learning keras

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

2 个答案:

答案 0 :(得分:25)

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

我正在使用Theano后端,所以如果您使用的是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))

答案 1 :(得分:12)

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

这在处理NLP中的句子等可变长度序列时更常见。常见的方法是在大小上建立一个上限(并裁剪更长的序列),然后 pad 这些序列的零到这个大小。

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

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