基于R语言Keras构建回归神经网络的技术咨询
你的Keras回归模型优化建议
嘿,作为Keras新手能快速搭出回归模型的雏形已经很赞啦!不过我看你的代码里有个关键小问题,还有些可以优化的地方,咱们一起捋捋:
先看你的代码
network <- keras_model_sequential() %>% layer_dense(units = 15, activation = "sigmoid", input_shape = c(50)) %>% layer_dense(units = 1) summary(network) network %>% compile(optimizer = optimizer_rmsprop(), loss = "mean_squared_error", metrics = c("accuracy")) network %>% fit(train_features, train_target, epochs = 100)
最关键的问题:评估指标用错了!
你在compile步骤里指定了metrics = c("accuracy"),但accuracy是专门给分类任务用的指标,完全不适合回归问题!回归任务需要用和数值预测相关的评估指标,比如:
mean_absolute_error(MAE,平均绝对误差,直观反映预测值和真实值的平均差距)mean_squared_error(MSE,和你选的损失函数一致,侧重惩罚大误差)root_mean_squared_error(RMSE,均方根误差,和目标值单位一致,更易解读)
修改后的compile代码可以是这样:
network %>% compile(optimizer = optimizer_rmsprop(), loss = "mean_squared_error", metrics = c("mean_absolute_error"))
其他可以优化的小细节
- 隐藏层激活函数:你现在用的
sigmoid在回归任务的隐藏层里不是最优选择,推荐换成relu,它能有效缓解梯度消失问题,在大多数回归场景下表现更好:layer_dense(units = 15, activation = "relu", input_shape = c(50)) - 加入验证集监控:训练时可以加上
validation_split参数,用一部分训练数据做验证,能及时发现模型是否过拟合:network %>% fit(train_features, train_target, epochs = 100, validation_split = 0.2)
要是你看模型摘要时有具体的疑问,也可以把摘要内容补充上来,我再帮你分析~
内容的提问来源于stack exchange,提问作者Akira
相关产品推荐
相关产品推荐

