переоснащение в модели dnn - PullRequest
0 голосов
/ 10 апреля 2020

У меня есть набор данных, на котором я тренирую модель DNN. мой набор данных содержит 398 образцов и 330 объектов, я сократил число функций до 39 с помощью ExtraTreeclassifier (). это моя модель:

X_train, X_test, y_train, y_test = train_test_split(xfinal, val_y, test_size = 0.2, random_state = 0)
model=Sequential()
model.add(Dense(units=20, kernel_initializer='uniform', activation='relu',input_dim=nb_features))
model.add(Dense(units=20, kernel_initializer='uniform', activation='relu'))
model.add(Dense(units=10, kernel_initializer='uniform', activation='relu'))
model.add(Dense(units=5, kernel_initializer='uniform', activation='relu'))
model.add(Dense(units=1,kernel_initializer='uniform',activation='sigmoid'))
model.compile(optimizer='adam',loss='binary_crossentropy',metrics=['accuracy'])
history = model.fit(X_train,y_train,validation_data=(X_test,y_test),batch_size=32,epochs=250)

Я пробовал Dropout, но моя модель переоснащается: enter image description here

Любое решение для моей модели?

1 Ответ

1 голос
/ 10 апреля 2020

Вы можете добавить Dropout слой между Dense слоями, как показано ниже.

model.add(Dropout(0.2))

Также вы можете удалить один или несколько скрытых слоев из вашей архитектуры.

Еще одна вещь Вы можете использовать Earlystopping метод, чтобы остановиться на правильном номере эпохи.

Ваша окончательная модель архитектуры может быть такой, как показано ниже:

callbacks = [EarlyStopping(monitor='val_loss', patience=5)]
model=Sequential()
model.add(Dense(units=20, kernel_initializer='uniform', activation='relu',input_dim=nb_features))
model.add(Dropout(0.2))
model.add(Dense(units=5, kernel_initializer='uniform', activation='relu'))
model.add(Dense(units=1,kernel_initializer='uniform',activation='sigmoid'))
model.compile(optimizer='adam',loss='binary_crossentropy',metrics=['accuracy'])
history = model.fit(X_train,y_train,validation_data=(X_test,y_test),batch_size=32,epochs=250, callbacks=callbacks)
...