我正在尝试训练CNN,以按主题对文本进行分类。当我使用二进制交叉熵时,我的精度约为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='categorical_crossentropy', optimizer='adam', metrics=['accuracy'])
model.compile(loss='binary_crossentropy', optimizer='adam', metrics=['accuracy'])从直觉上讲,为什么我要使用分类交叉熵是有道理的,我不明白为什么使用二进制获得良好的结果,而使用分类却获得较差的结果。
model.compile(loss='binary_crossentropy', optimizer='adam', metrics=['accuracy'])