Модель Keras не обучается после обучения - PullRequest
0 голосов
/ 03 августа 2020

Я обучаю модель keras для задачи классификации предложений. Проблема в том, что хотя он дает точность 94%, он ничего не узнает. Когда я даю новое предложение (которого нет в наборе данных), оно дает ту же вероятность для него (на шаге 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_words = 2000 и max_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

А вот код, размер моего набора данных 20к, при тестировании 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)

1 Ответ

1 голос
/ 03 августа 2020

Попробуйте изменить функцию активации последнего слоя с сигмовидной на softmax. Это не совсем соответствует потере, которую вы используете (категориальная кросс-энтропия). Если вы используете сигмоид, то вам понадобится только одна единица и следует использовать двоичную кросс-энтропийную потерю.

...