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

我试图用神经网络解决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_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,您在任何时候都没有实际训练模型,这会很有帮助。给定一个估计器、交叉验证对象和输入数据集,交叉验证分数会将数据反复分解为训练集和测试集,使用训练集训练估计器,并根据交叉验证每次迭代的测试集计算分数。