我试图构建一个CNN,它将输出两个标签,其中每个标签有12个可能性;输入是一个图像。
换句话说,我想要的输出是A(12个选项中的一个)和B(12个不同选项中的一个)。
对于每个标签,去当然是软最大,但我无法找到是否有可能做‘多软最大’标签这样。
显然,我可以输出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个代表所有组合的输出,但我不确定这是否是一个好的解决方案--对此有任何评论也是非常欢迎的。
发布于 2019-02-26 20:51:24
我将使用带有两个输出的函数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.])
https://stackoverflow.com/questions/54893341
复制相似问题