Keras 用于多标签图像分类的CNN

Keras 用于多标签图像分类的CNN,keras,classification,conv-neural-network,loss-function,Keras,Classification,Conv Neural Network,Loss Function,我将设计一个对8x8图像块进行分类的CNN。具体来说,我有num_class等于40,每个图像可以关联到一个类或两个类,或者三个类或四个类,等等,甚至所有40个类 我的问题与损失函数和度量有关:事实上,我想强制我的CNN返回K最自信的类,如果其中至少有一个是正确的,那么我希望精度提高 例如,假设更简单的情况是num_classes=4和K=2: true = [1 0 0 0]; predicted = [1 0 1 0] OK true = [1 1 0 0]; predict

我将设计一个对8x8图像块进行分类的CNN。具体来说,我有
num_class
等于40,每个图像可以关联到一个类或两个类,或者三个类或四个类,等等,甚至所有40个类

我的问题与损失函数和度量有关:事实上,我想强制我的CNN返回
K
最自信的类,如果其中至少有一个是正确的,那么我希望精度提高

例如,假设更简单的情况是
num_classes=4
K=2

    true = [1 0 0 0]; predicted = [1 0 1 0] OK
    true = [1 1 0 0]; predicted = [0 0 1 1] WRONG
所以,我已经测试了下面的代码行,但它不是我想要的

    model.compile(loss='binary_crossentropy', optimizer='adam', metrics=['accuracy'])

我应该使用哪个
损失
指标
?或者,如果我编写自己的度量函数,它是否更有意义呢?

编译
似乎很好。对于
多标签
网络,您还应使用
乙状结肠激活
softmax
到最后一个
密集层
(不知道您在使用什么)


我想你必须写下你自己的损失和度量,但这并不容易,因为损失需要是可微的。真的不存在一个以这种方式运行的内置函数吗?据我所知不是这样。您可以从只编写度量(更简单)开始,并使用
binary\u crossentropy
loss进行训练。
x = Dense(40, activation='sigmoid')