为了账号安全,请及时绑定邮箱和手机立即绑定

为什么我从神经网络得到水平线(几乎为零)而不是所需的曲线?

为什么我从神经网络得到水平线(几乎为零)而不是所需的曲线?

jeck猫 2023-06-20 15:58:49
我正在尝试将神经网络用于 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 modelestimator = 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)我也尝试过不同的权重初始化器(Xavier 和 He),但没有成功!非常感谢你的帮助
查看完整描述

2 回答

?
哈士奇WWW

TA贡献1799条经验 获得超6个赞

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

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

然后为了让性能更好做followong

  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)


查看完整回答
反对 回复 2023-06-20
?
Helenr

TA贡献1780条经验 获得超3个赞

这可能是由于数据增强或超参数。您可以调整超参数,例如学习率和迭代次数。减少纪元数。有时,数据扩充也会导致这种情况。

MSE 有利于回归。您也可以尝试 Huber 损失。

from tensorflow.keras.losses import Huber
tf.keras.losses.Huber
model.compile(loss=Huber(delta=0.01),metrics=['mse'], optimizer='adam')


查看完整回答
反对 回复 2023-06-20
  • 2 回答
  • 0 关注
  • 109 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信