【问题标题】:How to use Conv2D in multiple images input?如何在多个图像输入中使用 Conv2D?
【发布时间】:2020-12-28 00:53:12
【问题描述】:

我想使用多个图像作为网络的输入。我想添加Conv2D 层,类似这样的:

from tensorflow.keras.layers import *
from tensorflow.keras.models import Sequential

model = Sequential([
    Input(shape=(1, 128, 128, 1)),
    Conv2D(32, 3),
    Flatten(),
])

但是这段代码引发了错误:Input 0 of layer conv2d_40 is incompatible with the layer: expected ndim=4, found ndim=5. Full shape received: [None, 1, 128, 128, 1]

但下面的代码运行良好:

model = Sequential([
    Input(shape=(1, 512, 512, 1)),
    Dense(32),
    Flatten(),
])

我知道,我可以添加多个Input 层,但我想知道有没有办法让它变成这样?

我的意思是我想使用输入形状的数据[NUMBER_OF_IMAGES, WIDTH, HEIGHT, N_CHANNELS]

NUMBER_OF_IMAGES 并不是所有图像的数量。这是当前输入的数量

【问题讨论】:

  • 让它像什么?我没有看到多个输入。你能准确解释一下你想要做什么吗?
  • 很抱歉造成误解。我在问题中添加了一些额外的信息

标签: python tensorflow keras neural-network computer-vision


【解决方案1】:

Conv2D 需要 4D 输入,你不能改变它。我不确定您要完成什么,但您可以改用Conv3D

from tensorflow.keras.layers import *
from tensorflow.keras.models import Sequential
import tensorflow as tf

model = Sequential([
    Input(shape=(None, 128, 128, 1)),
    Conv3D(32, kernel_size=(1, 3, 3)),
    Flatten()
])

multiple_images = tf.random.uniform((10, 10, 128, 128, 1), dtype=tf.float32)

model(multiple_images)
<tf.Tensor: shape=(10, 5080320), dtype=float32, numpy=
array([[-0.26742983, -0.09689523, -0.12120364, ..., -0.02987139,
         0.05515741,  0.12026916],
       [-0.18898709,  0.12448274, -0.17439063, ...,  0.23424357,
        -0.06001307, -0.13852882],
       [-0.14464797,  0.26356792, -0.34748033, ...,  0.07819699,
        -0.11639086,  0.10701762],
       ...,
       [-0.1536693 ,  0.13642962, -0.18564   , ...,  0.07165999,
        -0.0173855 , -0.04348694],
       [-0.32320747,  0.09207243, -0.22274591, ...,  0.11940736,
        -0.02635285, -0.1140241 ],
       [-0.21126074, -0.00094431, -0.10933039, ...,  0.06002581,
        -0.09649743,  0.09335127]], dtype=float32)>

【讨论】:

  • 谢谢。这个答案是正确的。但是,如果我想使用SeparableConv2D 怎么办?
  • 你不能。它只需要 4D 输入,你无能为力 (source)
  • 是的,我知道我不能只将 SeparableConv2D 添加到 Sequence 模型中。但是有没有办法在自定义层或类似的东西中通过该层传递图像?
  • 我认为这更适合另一个问题。
猜你喜欢
  • 1970-01-01
  • 2021-03-21
  • 2021-03-04
  • 2019-11-09
  • 2018-04-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多