微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

为什么从神经网络获取水平线几乎为零而不是所需的曲线?

如何解决为什么从神经网络获取水平线几乎为零而不是所需的曲线?

我正在尝试将神经网络用于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预测与目标的关系图。

Training Data Test Data

我也尝试过不同的重量初始值设定项(Xavier和He),但是没有运气! 非常感谢您的帮助

解决方法

首先在模型中添加密集层的同时更正语法,如下所示删除带有==的单等号=的双等号kernal_initilizer

 model.add(Dense(1,input_dim=1,kernel_initializer ='normal',activation='relu'))

然后使性能更好地完成后续操作

  1. 增加隐藏层中隐藏神经元的数量

  2. 增加隐藏层的数量。

如果仍然有相同的问题,请尝试更改优化器和激活功能。调整超参数可以帮助您收敛到解决方案

编辑1

在进行如下所示的交叉验证后,您还必须拟合估算器

estimator.fit(X_train,y_train)

然后您可以按照以下步骤对测试数据进行测试

prediction = estimator.predict(X_test)

from sklearn.metrics import accuracy_score
accuracy_score(Y_test,prediction)

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。