【发布时间】:2018-07-07 05:45:45
【问题描述】:
我在网络中有 1000 个类,它们具有多标签输出。对于每个训练示例,正输出的数量相同(即 10),但它们可以分配给 1000 个类中的任何一个。所以 10 个类有输出 1,其余 990 个有输出 0。
对于多标签分类,我使用“二元交叉熵”作为成本函数,使用“sigmoid”作为激活函数。当我尝试将 0.5 这条规则作为 1 或 0 的截止值时。它们都是 0。我知道这是一个类别不平衡问题。从这个link,我了解到,我可能需要创建额外的输出标签。不幸的是,我无法弄清楚如何将其合并到 keras 中的简单神经网络中。
nclasses = 1000
# if we wanted to maximize an imbalance problem!
#class_weight = {k: len(Y_train)/(nclasses*(Y_train==k).sum()) for k in range(nclasses)}
inp = Input(shape=[X_train.shape[1]])
x = Dense(5000, activation='relu')(inp)
x = Dense(4000, activation='relu')(x)
x = Dense(3000, activation='relu')(x)
x = Dense(2000, activation='relu')(x)
x = Dense(nclasses, activation='sigmoid')(x)
model = Model(inputs=[inp], outputs=[x])
adam=keras.optimizers.adam(lr=0.00001)
model.compile('adam', 'binary_crossentropy')
history = model.fit(
X_train, Y_train, batch_size=32, epochs=50,verbose=0,shuffle=False)
谁能帮我解决这里的代码,如果您能针对这个问题提出一个好的“准确度”指标,我也将不胜感激?
非常感谢:) :)
【问题讨论】:
-
尝试将
1s 分配给前 20 个分数,而不是使用阈值。 -
我应该如何考虑班级不平衡?您能否解释一下如果我使用前 10/20 的分数将如何处理? :)
标签: keras multilabel-classification