首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >多重softmax分类(Keras)

多重softmax分类(Keras)
EN

Stack Overflow用户
提问于 2019-02-26 20:10:41
回答 1查看 2.2K关注 0票数 5

我试图构建一个CNN,它将输出两个标签,其中每个标签有12个可能性;输入是一个图像。

换句话说,我想要的输出是A(12个选项中的一个)和B(12个不同选项中的一个)。

对于每个标签,去当然是软最大,但我无法找到是否有可能做‘多软最大’标签这样。

显然,我可以输出24个神经元,使用乙状结肠输出,然后手动正常化,但网络不会内在地耦合每组内的12个选项。

我在写我想要的伪伪代码,如果它存在的话:

代码语言:javascript
运行
复制
model = Sequential()
model.add(Convolution2D(64, kernel_size=3,activation='relu', input_shape=image_shape))
model.add(Flatten())
model.add(Dense(256,activation='relu'))
# pseudo-pseudo-code
model.add(Dense((12,12),activation=('softmax','softmax'))) # <- here is where I would have liked 2 softmax outputs with 12 neurons in each

任何解决方案都是受欢迎的(我正在使用Keras,但对于使用任何其他包的解决方案,甚至自己编写代码)都会很高兴。

编辑:我还可以生成144个代表所有组合的输出,但我不确定这是否是一个好的解决方案--对此有任何评论也是非常欢迎的。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-02-26 20:51:24

我将使用带有两个输出的函数API。https://keras.io/getting-started/functional-api-guide/#multi-input-and-multi-output-models指南

字里行间的东西:

代码语言:javascript
运行
复制
input = Input(input_shape=image_shape)
cnv = Convolution2d(...)(input)
hidden = Dense(256, ...)(Flatten()(cnv))
output1 = Dense(12, activation='softmax')(hidden)
output2 = Dense(12, activation='softmax')(hidden)
model = keras.models.Model(inputs=input, outputs=[output1, output2])
model.compile(optimizer='sgd', loss=['binary_crossentropy', 'binary_crossentropy'],
              loss_weights=[1., 1.])
票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54893341

复制
相关文章

相似问题

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