【发布时间】: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