我正在sklearn上运行gridsearchCV以尝试使用此代码找到最佳的模型参数。
modelDNN= KerasRegressor(build_fn=build_DNN_model, epochs=700, verbose=2)
hiden1=[16,32,64,128,256]
hiden2=[16,32,64,128,256]
hiden3=[16,32,64,128,256]
opt=['SGD', 'RMSprop','Adam']
drop=[0.0,0.2,0.3,0.4]
start = time.time()
param_gridDNN = dict(hiden1=hiden1,hiden2=hiden2,hiden3=hiden3,opt=opt,drop=drop)
gridDNN = GridSearchCV(estimator=modelDNN, param_grid=param_gridDNN, n_jobs=-1, cv=ShuffleSplit(1, test_size=0.2, random_state=584),scoring=R2_scorer(),verbose=2)
k.clear_session()
grid_resultDNN = gridDNN.fit(xtrain,ytrain,epochs=700 , validation_data=(xtest, ytest),verbose=2)
gridsearch最好的结果是这个
Best: 0.840487 using {'drop': 0.4, 'hiden1': 64, 'hiden2': 32, 'hiden3': 128, 'opt': 'Adam'}
但是我完全达不到这个R2的准确性 尝试:
p=gridCNN.best_estimator_.predict(xtest)
r2_score(np.asarray(ytest).ravel(), p)
我得到0.4696并在火车数据上得到0.7521:
p=gridDNN.best_estimator_.predict(xtrain)
r2_score(np.asarray(ytrain).ravel(), p)
我也尝试用相同的参数重建模型:
def build_DNN_final_model():
model = Sequential()
model.add(Dense(2,input_shape=(2,)))
model.add(Dense(64,activation="relu"))
model.add(Dense(32,activation="relu"))
model.add(Dense(128,activation="relu"))
model.add(Dropout(0.4))
model.add(Dense(1,activation="linear"))
model.compile(loss='mean_squared_error', optimizer='adam', metrics=['mse'] )
return model
培训后,我的R2得分为0.6764 所以我的问题是0.8404的精度是多少?以及如何达到gridserachCV(0.8404)的准确性,并指出我在网格搜索过程中取消了使用交叉验证的交叉验证:
cv=ShuffleSplit(1, test_size=0.2, random_state=584)
在此先感谢您
答案 0 :(得分:0)
我认为使用700个纪元是原因 您正在使用最佳参数来训练您的神经网络,但训练过度,结果显示出过度拟合的结果 我认为使用提前停止条件使其接近0.84
尝试:
keras.callbacks.callbacks.EarlyStopping(monitor='val_loss', mode='auto', restore_best_weights=True)
您可以在此处查看所有回调: keras.callbacks
如果它不起作用,请告诉我