首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >多类语义分割-输出激活?

多类语义分割-输出激活?
EN

Stack Overflow用户
提问于 2018-03-20 23:41:23
回答 2查看 1.2K关注 0票数 2

我正在Keras中尝试多类语义分割。现在我正在使用Unet架构,并且有一个类似于此的模型(但更深):

代码语言:javascript
复制
inputs = Input(shape=(512,512,3))
# 128

down1 = Conv2D(32, (3, 3), activation='relu', padding='same')(inputs)
down1 = BatchNormalization()(down1)
down1 = Dropout(0.1)(down1)
down1 = Conv2D(32, (3, 3), padding='same', activation='relu')(down1)
down1 = BatchNormalization()(down1)
down1_pool = MaxPooling2D((2, 2))(down1)

center = Conv2D(64, (3, 3), padding='same', activation='relu')(down1_pool)
center = BatchNormalization()(center)
center = Dropout(0.1)(center)
center = Conv2D(64, (3, 3), padding='same', activation='relu')(center)
center = BatchNormalization()(center)
# center
up1 = concatenate([Conv2DTranspose(32, (2, 2), strides=(2, 2), padding='same')(center), down1], axis=3)
up1 = Conv2D(32, (3, 3), padding='same', activation='relu')(up1)
up1 = BatchNormalization()(up1)
up1 = Dropout(0.1)(up1)
up1 = Conv2D(32, (3, 3), padding='same', activation='relu')(up1)
up1 = BatchNormalization()(up1)
# 128

classify = Conv2D(3, (1, 1), activation='softmax')(up1)

model = Model(inputs=inputs, outputs=classify]
model.compile(optimizer=Adam(lr=lr), loss='categorical_crossentropy, metrics=[losses.dice_coeff])

我的数据集由680k图像(512,512,3)和680k对应的标签组成。标签是单热编码的,并且具有形状(512,512,3),即3个类别。

然后我的问题是:这是建立我的模型的正确方法吗?或者我应该使用'sigmoid‘激活和'binary_crossentropy'?

EN

回答 2

Stack Overflow用户

发布于 2018-03-29 15:12:43

如果你的标签是带有sigmoid激活的二进制go,如果它是通过一个热代码的另一种方式,即你正在实施的方式,那么softmax应该被用作激活

票数 0
EN

Stack Overflow用户

发布于 2018-07-21 00:25:43

我也有同样的问题。我没有找到使我的模型收敛的损失函数。所以我为每个标签使用了3个不同的模型。使用骰子损失函数,我对每个标签都有很好的结果。现在我正在检查统一所有3个模型预测的方法。在你的模型中,softmax是正确的激活,二进制和类别交叉熵是相同的,因为你的数据是二进制的。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49388477

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档