【问题标题】:overfitting in dnn modeldnn模型中的过拟合
【发布时间】:2020-07-23 03:23:28
【问题描述】:

我有一个用于训练 DNN 模型的数据集。 我的数据集包含 398 个样本和 330 个特征,我使用 ExtraTreeclassifier() 将特征减少到 39 个。这是我的模型:

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,但我的模型钢过拟合:

我的模型有什么解决方案吗?

【问题讨论】:

  • 删除所有kernel_initializer='uniform' 语句,default glorot_uniform 效果最好。

标签: python machine-learning neural-network


【解决方案1】:

您可以在Dense 层之间添加Dropout 层,如下所示。

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)

【讨论】:

    猜你喜欢
    • 2022-12-29
    • 2020-05-12
    • 1970-01-01
    • 1970-01-01
    • 2019-02-10
    • 1970-01-01
    • 2021-09-30
    • 1970-01-01
    • 2015-11-04
    相关资源
    最近更新 更多