Python 为什么我从神经网络得到的是水平线(几乎为零),而不是期望的曲线?
我试图用神经网络解决python中的回归问题,但神经网络的输出是一条水平直线,为零。我有一个输入和一个输出。 这是我的密码:Python 为什么我从神经网络得到的是水平线(几乎为零),而不是期望的曲线?,python,keras,neural-network,regression,Python,Keras,Neural Network,Regression,我试图用神经网络解决python中的回归问题,但神经网络的输出是一条水平直线,为零。我有一个输入和一个输出。 这是我的密码: def baseline_model(): # create model model = Sequential() model.add(Dense(1, input_dim=1, kernel_initializer='normal', activation='relu')) model.add(Dense(4, kernel_initia
def baseline_model():
# create model
model = Sequential()
model.add(Dense(1, input_dim=1, kernel_initializer='normal', activation='relu'))
model.add(Dense(4, kernel_initializer='normal', 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),但没有成功!
我真的很感谢您的帮助首先,在模型中添加密集层时更正您的语法,使用单相等
=
和内核初始化器删除双相等=
,如下所示
model.add(Dense(1, input_dim=1, kernel_initializer ='normal', activation='relu'))
estimator.fit(X_train, y_train)
然后,为了使性能更好,请执行以下操作
增加隐藏层中隐藏神经元的数量
增加隐藏层的数量
如果仍然存在相同的问题,请尝试更改优化器和激活函数。调整超参数可以帮助您收敛到解决方案
编辑1
您还必须在交叉验证后拟合估计器,如下所示
model.add(Dense(1, input_dim=1, kernel_initializer ='normal', activation='relu'))
estimator.fit(X_train, y_train)
然后你可以对测试数据进行如下测试
prediction = estimator.predict(X_test)
from sklearn.metrics import accuracy_score
accuracy_score(Y_test, prediction)
如果您提供了一个可重复性最低的示例AFAICS,您在任何时候都没有实际训练模型,这会很有帮助。给定一个估计器、交叉验证对象和输入数据集,交叉验证分数会将数据反复分解为训练集和测试集,使用训练集训练估计器,并根据交叉验证每次迭代的测试集计算分数。