Керас - Почему гипер-параметры не влияют на точность моей модели CNN? - PullRequest
0 голосов
/ 07 января 2020

Как видно из названия, точность моей простой модели CNN не зависит от гиперпараметров или даже от наличия слоев, таких как Dropout и MaxPooling. Я реализовал модель, используя Keras. Что может быть причиной этой странной ситуации? Я добавил соответствующую часть кода ниже:

input_dim = X_train.shape[1]
nb_classes = Y_train.shape[1]

model = Sequential()
model.add(Conv1D(filters=64, kernel_size=3, activation='relu', input_shape=(input_dim, 1)))
model.add(Dropout(0.5))
model.add(MaxPooling1D(pool_size=2))
model.add(Flatten())
model.add(Dense(40, activation='relu'))
model.add(Dense(nb_classes, activation='softmax'))

model.compile(loss='mean_squared_error', optimizer='adam', metrics=['accuracy'])

ps Входные данные (X_train и X_test) содержат векторы, которые были воспроизведены Word2Vec. Выходные данные являются двоичными.

Редактировать: Вы можете найти пример журнала обучения ниже:

Пример журнала обучения:

Train on 3114 samples, validate on 347 samples
Epoch 1/10
 - 1s - loss: 0.6917 - accuracy: 0.5363 - val_loss: 0.6901 - val_accuracy: 0.5476
Epoch 2/10
 - 1s - loss: 0.6906 - accuracy: 0.5369 - val_loss: 0.6896 - val_accuracy: 0.5476
Epoch 3/10
 - 1s - loss: 0.6908 - accuracy: 0.5369 - val_loss: 0.6895 - val_accuracy: 0.5476
Epoch 4/10
 - 1s - loss: 0.6908 - accuracy: 0.5369 - val_loss: 0.6903 - val_accuracy: 0.5476
Epoch 5/10
 - 1s - loss: 0.6908 - accuracy: 0.5369 - val_loss: 0.6899 - val_accuracy: 0.5476
Epoch 6/10
 - 1s - loss: 0.6909 - accuracy: 0.5369 - val_loss: 0.6901 - val_accuracy: 0.5476
Epoch 7/10
 - 1s - loss: 0.6905 - accuracy: 0.5369 - val_loss: 0.6896 - val_accuracy: 0.5476
Epoch 8/10
 - 1s - loss: 0.6909 - accuracy: 0.5369 - val_loss: 0.6897 - val_accuracy: 0.5476
Epoch 9/10
 - 1s - loss: 0.6905 - accuracy: 0.5369 - val_loss: 0.6892 - val_accuracy: 0.5476
Epoch 10/10
 - 1s - loss: 0.6909 - accuracy: 0.5369 - val_loss: 0.6900 - val_accuracy: 0.5476

Ответы [ 2 ]

0 голосов
/ 07 января 2020

Сначала вам нужно изменить последний слой на

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

Вам также нужно изменить функцию потерь на

model.compile(loss='binary_crossentropy', optimizer='adam', metrics=['accuracy'])
0 голосов
/ 07 января 2020

Я предполагаю, что у вас есть мультиклассовая классификация, верно?

Тогда ваша потеря неуместна: вы должны использовать 'categorical_crossentropy' not 'mean_squared_error'.

Также попробуйте добавить несколько Conv + Drop + MaxPool (3 набора), чтобы четко проверить надежность вашей сети.

...