我不确定如何解释Keras在以下情况下的默认行为:
我的Y(真实值)是使用scikit-learn的MultilabelBinarizer
设置的。
因此,举个随机的例子,我的y
列的一行被独热编码为:
[0,0,0,1,0,1,0,0,0,0,1]
。
所以我有11个类可以被预测,而且可能会有多个类别为真;因此问题具有多标签性质。这个特定样本有三个标签。
我像处理非多标签问题一样训练模型(照常进行),并且没有出现错误。
from keras.models import Sequential
from keras.layers import Dense, Dropout, Activation
from keras.optimizers import SGD
model = Sequential()
model.add(Dense(5000, activation='relu', input_dim=X_train.shape[1]))
model.add(Dropout(0.1))
model.add(Dense(600, activation='relu'))
model.add(Dropout(0.1))
model.add(Dense(y_train.shape[1], activation='softmax'))
sgd = SGD(lr=0.01, decay=1e-6, momentum=0.9, nesterov=True)
model.compile(loss='categorical_crossentropy',
optimizer=sgd,
metrics=['accuracy',])
model.fit(X_train, y_train,epochs=5,batch_size=2000)
score = model.evaluate(X_test, y_test, batch_size=2000)
score
当Keras遇到被"multi" one-hot编码的y_train
,也就是每行中存在不止一个"1"时,它会如何处理?它是否会自动执行多标签分类?在评估指标的解释上有什么区别吗?
sigmoid
和binary_crossentropy
,标签将会被单独改进,这正是你想要的多标签任务,对吧? - YLJ