Keras可以处理不同大小的输入图像吗?例如,在完全卷积神经网络中,输入图像可以具有任何大小。但是,我们需要在Keras创建网络时指定输入形状。因此,我们如何使用Keras处理不同的输入大小而不将输入图像调整为相同的大小?谢谢你的帮助。
答案 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数据结构,填充的开销是否过高 - 如果您开始出现内存错误,最简单的解决方法是减少批量大小。让我们知道您在图像上应用此技巧的经验!