我能训练一个U-net有标签的图像有一个二进制分类。
但我很难弄清楚如何在Keras/Theano中为多类分类(4类)配置最后一层。
我有634个图像和相应的634个掩码,它们是unit8和64 x 64像素。
我的遮罩不是黑色(0)和白色(1),而是有3个类别的彩色标记对象和背景,如下所示:黑色(0),背景
红色(1),对象类1
绿色(2),对象类2
黄色(3),对象类3
在训练运行之前,包含掩码的数组是一个热编码数组,如下所示:mask_train = to_categorical(mask_train, 4)
这使得mask_train.shape从(634, 1, 64, 64)变为(2596864, 4)。
我的模型严格遵循Unet架构,但是最后的层似乎有问题,因为我无法将结构展平以匹配一个热编码数组。[...]
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
你对如何修改模型的最后部分使这列火车成功有什么建议吗?我得到了各种形状不匹配的错误,我成功地运行了几次,损失没有改变整个时代。