Потери не уменьшаются во время тренировки Керас - PullRequest
1 голос
/ 29 апреля 2019

Я создаю очень простую двухслойную сеть с прямой связью, но обнаруживаю, что потеря не обновляется вообще. У меня есть некоторые идеи, но я хотел получить дополнительную обратную связь / рекомендации.

Подробности о данных:

X_train: (336876, 158)

X_dev: (42109, 158)

Количество Y_train:

0    285793
1     51083
Name: default, dtype: int64

Y_dev считает:

0    35724
1     6385
Name: default, dtype: int64

А вот моя модель архитектуры:

# define the architecture of the network
model = Sequential()
model.add(Dense(50, input_dim=X_train.shape[1], init="uniform", activation="relu"))
model.add(Dense(3print("[INFO] compiling model...")

adam = Adam(lr=0.01)
model.compile(loss="binary_crossentropy", optimizer=adam,
    metrics=['accuracy'])
model.fit(np.array(X_train), np.array(Y_train), epochs=12, batch_size=128,  verbose=1)Dense(1, activation = 'sigmoid'))

Теперь, с этим, мои потери после первых нескольких эпох следующие:

Epoch 1/12
336876/336876 [==============================] - 8s - loss: 2.4441 - acc: 0.8484     
Epoch 2/12
336876/336876 [==============================] - 7s - loss: 2.4441 - acc: 0.8484     
Epoch 3/12
336876/336876 [==============================] - 6s - loss: 2.4441 - acc: 0.8484     
Epoch 4/12
336876/336876 [==============================] - 7s - loss: 2.4441 - acc: 0.8484     
Epoch 5/12
336876/336876 [==============================] - 7s - loss: 2.4441 - acc: 0.8484     
Epoch 6/12
336876/336876 [==============================] - 7s - loss: 2.4441 - acc: 0.8484     
Epoch 7/12
336876/336876 [==============================] - 7s - loss: 2.4441 - acc: 0.8484     
Epoch 8/12
336876/336876 [==============================] - 6s - loss: 2.4441 - acc: 0.8484     
Epoch 9/12
336876/336876 [==============================] - 6s - loss: 2.4441 - acc: 0.8484    

И когда я тестирую модель после этого, мой f1_score равен 0. Моя основная мысль заключалась в том, что мне может понадобиться больше данных, но я все же ожидаю, что они будут работать лучше, чем сейчас на тестовом наборе. Может быть, это переоснащение? Я добавил Dropout, но там тоже не повезло.

Любая помощь будет принята с благодарностью.

Ответы [ 2 ]

0 голосов
/ 01 мая 2019

Рассмотрите возможность добавления слоя классификации перед компиляцией вашей модели.

model.add(Dense(1, activation = 'sigmoid'))
adam = Adam(lr=0.01)
model.compile(loss="binary_crossentropy", optimizer=adam,
    metrics=['accuracy'])
model.fit(np.array(X_train), np.array(Y_train), epochs=12, batch_size=128, verbose=1)
0 голосов
/ 01 мая 2019

на первый взгляд, я считаю, что ваш уровень обучения слишком высок.Также, пожалуйста, подумайте о нормализации ваших данных, особенно если разные функции имеют разные диапазоны значений (см. Масштабирование ).Кроме того, рассмотрите возможность изменения активаций слоя в зависимости от того, являются ли ваши надписи мультиклассовыми или нет.Предполагая, что ваш код имеет такую ​​форму (у вас, кажется, есть некоторые опечатки в описании проблемы):

# define the architecture of the network
model = Sequential()
#also what is the init="uniform" argument? I did not find this in keras documentation, consider removing this.
model.add(Dense(50, input_dim=X_train.shape[1], init="uniform", 
activation="relu"))
model.add(Dense(1, activation = 'sigmoid')))
#a slightly more conservative learning rate, play around with this.
adam = Adam(lr=0.0001)
model.compile(loss="binary_crossentropy", optimizer=adam,
metrics=['accuracy'])
model.fit(np.array(X_train), np.array(Y_train), epochs=12, batch_size=128,  
verbose=1)

Это должно привести к сближению потерь.Если нет, рассмотрите возможность углубления вашей нейронной сети (подумайте, сколько параметров вам может понадобиться).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...