处理TF的不同大小的输入

时间:2020-03-01 10:27:17

标签: python tensorflow input keras

我有一个内置于TF中的CNN,其使用Input(shape = (1000,1000,5))。这是因为该图像是5张黑白图像的堆栈。我所有的样本都是不同地点的航拍照片,因此原始图像的大小各不相同(并且远大于1000、1000)。但是,TF要求所有输入都具有相同的预定大小,因此我们决定从所有图像中裁剪1000、1000。

这显然会丢失很多可用信息。我正在研究使网络具有动态输入形状的方法,以便可以拍摄所有原始图像。我在网上发现了多个建议,但每个建议都存在问题。

  1. 为每种图像尺寸(例如我有2种尺寸)分别制作一个Input(),然后可以将其卷积为相同的形状张量。问题在于,这意味着一个卷积层将不会受到不良观察值的一半的影响(除非我误解了下一层的工作原理)。例如:
# a and b are fixed, different, image shapes
for image in inputs:
    if image.shape == a:
        x = Input(shape = a)
        x = conv2d_transpose(output_shape = (1000, 1000, 5))
    else:
        y = Input(shape = b)
        y = conv2d_transpose(output_shape = (1000, 1000, 5))
  1. 使用急切执行。在这里,我发现的所有示例仍适用于固定的输入形状,因此我无法想到一种使用它来迭代样本并创建不同输入的方法。我找到了this thread,但询问者回答了自己,我不能说我真正理解我要解决的办法。
  2. 在输入之前调整图像大小。这是一个特别糟糕的主意,因为调整大小会扭曲图像并丢失大量至关重要的空间元素

任何输入(很抱歉)。

1 个答案:

答案 0 :(得分:0)

有什么理由不采用最大可能的尺寸和零填充输入?这就是您在链接的线程中所做的事情。 Kinda具有粘性,但它曾经是NLP中的常见做法,并且可以选择在卷积层内进行。