我正在尝试使用卷积神经网络按主题对文本进行分类。当我使用二元交叉熵时,准确率约为80%;而使用分类交叉熵时,准确率约为50%。
我不明白这是为什么。这是一个多类问题,难道我不得不使用分类交叉熵,并且使用二元交叉熵的结果是没有意义的吗?
model.add(embedding_layer)
model.add(Dropout(0.25))
# convolution layers
model.add(Conv1D(nb_filter=32,
filter_length=4,
border_mode='valid',
activation='relu'))
model.add(MaxPooling1D(pool_length=2))
# dense layers
model.add(Flatten())
model.add(Dense(256))
model.add(Dropout(0.25))
model.add(Activation('relu'))
# output layer
model.add(Dense(len(class_id_index)))
model.add(Activation('softmax'))
然后我使用 categorical_crossentropy
作为损失函数编译它,就像这样:
model.compile(loss='categorical_crossentropy', optimizer='adam', metrics=['accuracy'])
或者
model.compile(loss='binary_crossentropy', optimizer='adam', metrics=['accuracy'])
直观地讲,我可以理解为什么要使用分类交叉熵,但我不明白为什么使用二元交叉熵会得到好的结果,而使用分类交叉熵会得到较差的结果。
categorical_crossentropy
。同时,标签需要转换为分类格式。请参考to_categorical
进行转换。另外,请查看categorical和binary交叉熵的定义。 - AutonomousDense(1, activation='softmax')
是错误的。请记住,softmax 输出是一个概率分布,其总和为一。如果您想要仅具有一个输出神经元并进行二元分类,请使用sigmoid和二元交叉熵。 - Autonomous