我正在尝试将神经网络用于 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
您还必须像下面这样在交叉验证后安装估算器
estimator.fit(X_train, y_train)
然后你可以测试测试数据如下
prediction = estimator.predict(X_test) from sklearn.metrics import accuracy_score accuracy_score(Y_test, prediction)
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')
添加回答
举报
0/150
提交
取消