问题描述
我正在尝试将神经网络用于python中的回归问题,但神经网络的输出是一条为零的直线。我只有一个输入,显然还有一个输出。 这是我的代码:
def baseline_model():
# create model
model = Sequential()
model.add(Dense(1,input_dim=1,kernel_initializer='normal',activation='relu'))
model.add(Dense(4,activation='relu'))
model.add(Dense(1,kernel_initializer='normal'))
# Compile model
model.compile(loss='mean_squared_error',metrics=['mse'],optimizer='adam')
model.summary()
return model
# evaluate model
estimator = KerasRegressor(build_fn=baseline_model,epochs=50,batch_size=64,validation_split = 0.2,verbose=1)
kfold = KFold(n_splits=10)
results = cross_val_score(estimator,X_train,y_train,cv=kfold)
这是训练和测试数据的NN预测与目标的关系图。
我也尝试过不同的重量初始值设定项(Xavier和He),但是没有运气! 非常感谢您的帮助
解决方法
首先在模型中添加密集层的同时更正语法,如下所示删除带有==
的单等号=
的双等号kernal_initilizer
model.add(Dense(1,input_dim=1,kernel_initializer ='normal',activation='relu'))
然后使性能更好地完成后续操作
-
增加隐藏层中隐藏神经元的数量
-
增加隐藏层的数量。
如果仍然有相同的问题,请尝试更改优化器和激活功能。调整超参数可以帮助您收敛到解决方案
编辑1
在进行如下所示的交叉验证后,您还必须拟合估算器
estimator.fit(X_train,y_train)
然后您可以按照以下步骤对测试数据进行测试
prediction = estimator.predict(X_test)
from sklearn.metrics import accuracy_score
accuracy_score(Y_test,prediction)