R语言中Caret调用Keras模型遇参数弃用问题求解
问题解决:Caret与Keras/TensorFlow版本兼容问题
核心原因
你遇到的错误是因为新版TensorFlow/Keras(2.10及以上)对优化器参数做了改动:lr被重命名为learning_rate,decay参数被直接移除,但Caret的mlpKerasDecay(你代码里用的是这个,不是你说的mlpKerasDropout)接口尚未适配这些变化,导致参数不匹配报错。即使你手动修改参数名或移除decay,Caret的内部逻辑还是会按旧参数名传递,所以依然报错。
是否需要降级?
是的,目前最直接有效的解决方法就是降级Keras和TensorFlow到与当前Caret版本兼容的旧版本(比如TensorFlow 2.9.0 + Keras 2.9.0,这个版本仍支持旧的优化器参数格式)。
R中降级步骤
- 卸载当前包
运行以下代码卸载已安装的keras和tensorflow包:
remove.packages(c("keras", "tensorflow"))
- 重启R会话
必须完全关闭并重新打开R/RStudio,确保旧版本的包不会残存在内存中。 - 安装指定版本的R包
安装兼容版本的keras和tensorflow:
install.packages("keras", version = "2.9.0") install.packages("tensorflow", version = "2.9.0")
- 安装对应版本的Python依赖
加载keras包,安装匹配版本的Python版TensorFlow和Keras:
library(keras) install_keras(tensorflow = "2.9.0")
如果你的系统中有多个Python环境,先通过reticulate::use_python("/path/to/your/python")指定目标环境,再执行install_keras。
额外代码修正
你的代码里有两处小错误,建议修正后再运行:
trainControl中的selectionFunctio拼写错误,应为selectionFunction- 如果你确实想用
mlpKerasDropout模型,需把train中的method参数改为mlpKerasDropout,同时调整tuneGrid的参数(mlpKerasDropout的调参网格包含dropout参数,而非lambda)
内容的提问来源于stack exchange,提问作者Melland
相关产品推荐
相关产品推荐

