掌握在LSTM相比乙状结肠+ binary_crossentropy SOFTMAX + categorical_crossentropy更高的精度

问题描述

我使用Word2Vec编码和训练LSTM模型。我的数据只有两个标签和10K左右具有45K特色的实例。我的编码的形状(58137,100),我训练它。我保持所有paramters除了softmax + categorical_crossentropy和乙状结肠+ binary_crossentropy相同。因为我有两个标签,我应该得到乙状结肠+ binary_crossentropy更好的准确性?这里是我的模型。

#model.add(Embedding(maximum_words_number,e_dim,input_length=X.shape[1]))
model.add(Embedding(58137,100,weights = [embeddings],input_length=X_train.shape[1],trainable = False)) # -> This adds Word2Vec encodings
model.add(LSTM(10,return_sequences= True,dropout=0.2,recurrent_dropout=0.2))
model.add(LSTM(10,return_sequences= False,recurrent_dropout=0.2))
model.add(Dense(2,activation='softmax'))
#opt = SGD(lr=0.05)
model.compile(loss='categorical_crossentropy',optimizer="Nadam",metrics=['accuracy'])
epochs = 4
batch_size = 100
model_outcome = model.fit(X_train,y_train_binary,epochs=epochs,batch_size=batch_size,validation_split=0.2,callbacks=[EarlyStopping(monitor='val_loss',patience=1,min_delta=0.0001)])


model = Sequential()
#model.add(Embedding(maximum_words_number,activation='sigmoid'))
#opt = SGD(lr=0.05)
model.compile(loss='binary_crossentropy',min_delta=0.0001)])

我在测试集的精度和其他评价得分(精确度,召回率和F1)是与使用softmax + categorical_crossentropy,有人可以解释为什么它的情况下给我的第一款车型更高? 如果有什么问题的模型,我创建请让我知道。

谢谢。

解决方法

准确度应该相同(或非常相似,因为您没有为精确的可重复性设置种子),但是在您的比较中,您在这一行犯了一个错误:

model.add(Dense(2,activation='sigmoid'))

这里,对于 binary_crossentropysigmoid,您需要 1 个而不是 2 个神经元。

因此,

model.add(Dense(1,activation='sigmoid'))

当然,您需要确保以正确的格式提供数据(sigmoid 和 BCE [0,1,...] 而不是 softmax + CCE [[0,1],[1,0],...]