【发布时间】:2017-10-09 13:17:25
【问题描述】:
我能够使用具有二元分类的标记图像训练 U-net。
但我很难弄清楚如何在 Keras/Theano 中为 多类 分类(4 类)配置最终层。
我有 634 张图像和对应的 634 个掩码,它们是 unit8 和 64 x 64 像素。
我的面具不是黑色 (0) 和白色 (1),而是在 3 个类别和背景中使用颜色标记的对象,如下所示:
- 黑色 (0),背景
- 红色 (1),对象等级 1
- 绿色 (2),对象等级 2
- 黄色 (3),对象等级 3
在训练运行之前,包含掩码的数组被 one-hot 编码如下:
mask_train = to_categorical(mask_train, 4)
这使得mask_train.shape 从(634, 1, 64, 64) 变为(2596864, 4)。
我的模型严格遵循 Unet 架构,但最后一层似乎有问题,因为我无法展平结构以匹配 one-hot 编码数组。
[...]
up3 = concatenate([UpSampling2D(size=(2, 2))(conv7), conv2], axis=1)
conv8 = Conv2D(128, (3, 3), activation='relu', padding='same')(up3)
conv8 = Conv2D(128, (3, 3), activation='relu', padding='same')(conv8)
up4 = concatenate([UpSampling2D(size=(2, 2))(conv8), conv1], axis=1)
conv9 = Conv2D(64, (3, 3), activation='relu', padding='same')(up4)
conv10 = Conv2D(64, (3, 3), activation='relu', padding='same')(conv9)
# here I used number classes = number of filters and softmax although
# not sure if a dense layer should be here instead
conv11 = Conv2D(4, (1, 1), activation='softmax')(conv10)
model = Model(inputs=[inputs], outputs=[conv11])
# here categorical cross entropy is being used but may not be correct
model.compile(optimizer='sgd', loss='categorical_crossentropy',
metrics=['accuracy'])
return model
您对如何修改模型的最后部分以便成功训练有什么建议吗?我得到了各种形状不匹配的错误,并且几次我设法让它运行,损失在整个 epoch 中都没有改变。
【问题讨论】:
标签: python machine-learning deep-learning keras image-segmentation