【发布时间】:2020-11-06 14:30:50
【问题描述】:
我目前有一个多标签分类问题,为此我正在使用keras构建神经网络如下:
n_cols = dataset.shape[1]
print(n_cols)
model = Sequential()
model.add(Dense(128, activation='relu', input_shape=(n_cols,)))
model.add(Dense(64, activation='relu'))
model.add(Dense(26, activation='sigmoid')) # Sigmoid for multi-label classification
sgd = SGD(lr=0.1, decay=1e-6, momentum=0.5, nesterov=True)
#RMSprop
model.compile(loss='binary_crossentropy', optimizer='RMSprop', metrics=['accuracy'])
model.summary()
## Fit the model ##
early_stopping_monitor = EarlyStopping(patience=20)
history = model.fit(dataset, labels, validation_split=0.33, epochs=30, callbacks=[early_stopping_monitor])
plt.plot(history.history['accuracy'])
plt.plot(history.history['val_accuracy'])
plt.title('Model accuracy')
plt.ylabel('Accuracy')
plt.xlabel('Epoch')
plt.legend(['Train', 'Test'], loc='upper left')
plt.show()
我被告知对于多标签分类,我们使用binary_crossentropy 作为损失,而在最后一层(输出层)使用sigmoid 进行激活。但是,有了这个,我分别得到了~0.0931 和~0.0937 的accuracy 和val_accuracy。
对于多标签分类,使用准确度指标是否最合适?我环顾四周,有人建议其他指标,例如 binary_accuracy 可能会更好..
那么问题是,如何才能最好地评估多标签分类?
编辑:作为参考,我的目标“类”中有 26 个标签列,数据集由 21 个列组成。模型训练的整个数据集有大约 82k 个样本。
【问题讨论】:
标签: python tensorflow keras neural-network multilabel-classification