多个softmax分类(Keras)

时间:2019-02-26 20:10:42

标签: python keras neural-network conv-neural-network

我正在尝试构建一个将输出2个标签的CNN,其中每个标签有12种可能性;输入的是图像。

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

将每个标签分开使用,当然是softmax,但是我找不到是否可以像这样制作“多个softmax”标签。

很明显,我可以使用S形输出来输出24个神经元,然后手动进行归一化,但是网络不会本质上耦合每个组中的12个选项。

我正在编写想要的伪伪代码(如果存在的话):

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个输出,但是我不确定这是否是一个好的解决方案-对此的任何评论也非常受欢迎

1 个答案:

答案 0 :(得分:1)

我将使用具有2个输出的功能API。 https://keras.io/getting-started/functional-api-guide/#multi-input-and-multi-output-models

中的指南

以下内容:

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.])