【问题标题】:Keras UNet Conv2DTranspose Zero-dimensional array errorKeras UNet Conv2DTranspose 零维数组错误
【发布时间】:2020-12-19 17:37:42
【问题描述】:

我有一个相当简单/标准的 Unet 架构,如下所示:

radar_input_layer = layers.Input(shape=(tdata.shape[1],tdata.shape[2],tdata.shape[3]))

    print(radar_input_layer.shape)

    c1 = layers.Conv2D(neurons, (3,3), activation='relu', kernel_initializer='he_normal',padding='same')(radar_input_layer)
    c1 = layers.Dropout(0.5)(c1)
    c1 = layers.Conv2D(neurons, (3,3), activation='relu', kernel_initializer='he_normal',padding='same')(c1)
    p1 = layers.MaxPooling2D((2,2))(c1)

    print(p1.shape)

    c2 = layers.Conv2D(neurons * 2, (3,3), activation='relu', kernel_initializer='he_normal',padding='same')(p1)
    c2 = layers.Dropout(0.5)(c2)
    c2 = layers.Conv2D(neurons * 2, (3,3), activation='relu', kernel_initializer='he_normal',padding='same')(c2)
    p2 = layers.MaxPooling2D((2,2))(c2)

    print(p2.shape)

    c3 = layers.Conv2D(neurons * 4, (3,3), activation='relu', kernel_initializer='he_normal',padding='same')(p2)
    c3 = layers.Dropout(0.5)(c3)
    c3 = layers.Conv2D(neurons * 4, (3,3), activation='relu', kernel_initializer='he_normal',padding='same')(c3)
    p3 = layers.MaxPooling2D((2,2))(c3)

    print(p3.shape)

    c4 = layers.Conv2D(neurons * 8, (3,3), activation='relu', kernel_initializer='he_normal',padding='same')(p3)
    c4 = layers.Dropout(0.5)(c4)
    c4 = layers.Conv2D(neurons * 8, (3,3), activation='relu', kernel_initializer='he_normal',padding='same')(c4)
    p4 = layers.MaxPooling2D((2,2))(c4)

    print(p4.shape)

    c5 = layers.Conv2D(neurons * 16, (3,3), activation='relu', kernel_initializer='he_normal',padding='same')(p4)
    c5 = layers.Dropout(0.5)(c5)
    c5 = layers.Conv2D(neurons * 16, (3,3), activation='relu', kernel_initializer='he_normal',padding='same')(c5)

    print(c5.shape)
    u1 = layers.Conv2DTranspose(neurons * 8, (2,2), strides=(2,2), padding='same')(c5)

    print(u1.shape)
    print(c4.shape)

    u1 = np.concatenate([u1,c4])
    c6 = layers.Conv2D(neurons * 8, (3,3), activation='relu', kernel_initializer='he_normal',padding='same')(u1)
    c6 = layers.Dropout(0.5)(c6)
    c6 = layers.Conv2D(neurons * 8, (3,3), activation='relu', kernel_initializer='he_normal',padding='same')(c6)

    ...

我已将我的 tdata 和 # 个神经元定义为:

tdata = np.zeros([100,450,552,2])
neurons = 16

就像一个示例测试数据集,其中通道 = 上述 tdata 示例中的最后一个(即 100 个样本,450 行,552 列)。

输出如下:

(?, 225, 276, 16)
(?, 112, 138, 32)
(?, 56, 69, 64)
(?, 28, 34, 128)
(?, 28, 34, 256)
(?, ?, ?, 128)
(?, 56, 69, 128)
Traceback (most recent call last):
ValueError: zero-dimensional arrays cannot be concatenated

因此,问题在于连接 u1 和 c4。更具体地说,问题在于 u1 没有定义为具有实际形状 (?,?,?,128),而它应该是 (?,56,69,128)。为什么这个例子中的维度没有通过,如何解决这个问题?

【问题讨论】:

    标签: python keras keras-layer unity3d-unet


    【解决方案1】:

    确保您已更新了 Keras 或 Tensorflow 版本。 我从您的代码中得到以下输出。

    (None, 450, 552, 2)
    (None, 225, 276, 16)
    (None, 112, 138, 32)
    (None, 56, 69, 64)
    (None, 28, 34, 128)
    (None, 28, 34, 256)
    (None, 56, 68, 128)
    (None, 56, 69, 128)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-01-31
      • 2022-01-20
      • 2023-03-05
      • 2019-05-08
      • 1970-01-01
      • 2023-03-10
      • 2016-08-20
      相关资源
      最近更新 更多