Python 3.x Keras模型培训后不学习
我正在为句子分类任务训练一个keras模型。问题是,尽管它给出了94%的准确率,但它没有学到任何东西。当我给出一个新句子(不在数据集中)时,它给出了相同的概率(在Python 3.x Keras模型培训后不学习,python-3.x,tensorflow,keras,nlp,Python 3.x,Tensorflow,Keras,Nlp,我正在为句子分类任务训练一个keras模型。问题是,尽管它给出了94%的准确率,但它没有学到任何东西。当我给出一个新句子(不在数据集中)时,它给出了相同的概率(在model.prediction步骤中)。我不明白为什么会这样 这是我的模型 model = Sequential() model.add(Embedding(max_words, 30, input_length=max_len)) model.add(BatchNormalization()) model.add(Activatio
model.prediction
步骤中)。我不明白为什么会这样
这是我的模型
model = Sequential()
model.add(Embedding(max_words, 30, input_length=max_len))
model.add(BatchNormalization())
model.add(Activation('tanh'))
model.add(Dropout(0.5))
model.add(Bidirectional(LSTM(32)))
model.add(BatchNormalization())
model.add(Activation('tanh'))
model.add(Dropout(0.5))
model.add(Dense(2, activation='sigmoid'))
model.summary()
这里max\u words=2000
和max\u len=300
这是模型摘要
Model: "sequential_3"
_________________________________________________________________
Layer (type) Output Shape Param #
=================================================================
embedding_3 (Embedding) (None, 300, 30) 60000
_________________________________________________________________
batch_normalization_5 (Batch (None, 300, 30) 120
_________________________________________________________________
activation_5 (Activation) (None, 300, 30) 0
_________________________________________________________________
dropout_3 (Dropout) (None, 300, 30) 0
_________________________________________________________________
bidirectional_3 (Bidirection (None, 64) 16128
_________________________________________________________________
batch_normalization_6 (Batch (None, 64) 256
_________________________________________________________________
activation_6 (Activation) (None, 64) 0
_________________________________________________________________
dropout_4 (Dropout) (None, 64) 0
_________________________________________________________________
dense_3 (Dense) (None, 2) 130
=================================================================
Total params: 76,634
Trainable params: 76,446
Non-trainable params: 188
这是代码,我的数据集大小是20k,测试中有10%
model.compile(loss='sparse_categorical_crossentropy', metrics=['accuracy'], optimizer = 'adam')
history = model.fit(sequences_matrix, Y_train, batch_size=256, epochs=50, validation_split=0.1)
尝试将最后一层的激活功能从sigmoid更改为softmax。它与您使用的损失(分类交叉熵)不太匹配。如果您使用sigmoid,那么您只需要一个单位,并且应该使用二进制交叉熵损失。否,即使使用分类交叉熵的softmax函数,也没有区别。不管我说什么句子,概率都是一样的。@AmberBhanarkar那么也许可以检查一下你的数据?例如,当你输入预测语句时,序列矩阵看起来正确吗?(不同句子的不同标记ID,正确的ID和填充等)这里我已经解释了序列矩阵问题,请看一下。在标记器装配中似乎存在一些问题。