keras_model_sequential构建模型编译失败,模型类不符求解决方案
Keras R版编译模型时出现UseMethod("compile")错误
问题详情
学习《Deep Learning with R》时,已完成Keras和TensorFlow的安装,安装代码如下:
# install.packages("remotes") # remotes::install_github("rstudio/reticulate", force = TRUE) # remotes::install_github(sprintf("rstudio/%s", c("tensorflow", "keras"))) # reticulate::miniconda_uninstall() # start with a blank slate # reticulate::install_miniconda() # #keras::install_keras() # #keras::install_keras(method = "conda", conda = "auto") # library(keras) # tensorflow::install_tensorflow(conda = "auto", envname = "r-reticulate", version = "release") # reticulate::use_condaenv(condaenv = "r-reticulate", conda = "auto", required = TRUE)
可正常导入MNIST数据集:
mnist <- keras::dataset_mnist()
使用keras_model_sequential构建模型:
model1 <- keras_model_sequential(list( layer_dense( units = 512, input_shape = c(28, 28), activation = "relu", name = "layer1" ), layer_dense( units = 10, activation = "softmax", name = "output" ) ))
但编译模型时出现错误:
model1 %>% keras::compile(optimizer = "rmsprop", loss = "sparse_categorical_crossentropy", metrics = "accuracy") Error: UseMethod("compile")出错:无法将'compile'方法应用于类为"c('keras.models.sequential.Sequential', 'keras.models.model.Model', 'keras.backend.tensorflow.trainer.TensorFlowTrainer', 'keras.trainers.trainer.Trainer', 'keras.layers.layer.Layer', 'keras.backend.tensorflow.layer.TFLayer', 'keras.backend.tensorflow.trackable.KerasAutoTrackable', 'tensorflow.python.trackable.autotrackable.AutoTrackable', 'tensorflow.python.trackable.base.Trackable', 'keras.ops.operation.Operation', 'python.builtin.object')"的对象
查看模型类,发现与书籍文档预期的keras.engine.training.Model不同:
[1] "keras.models.sequential.Sequential" [2] "keras.models.model.Model" [3] "keras.backend.tensorflow.trainer.TensorFlowTrainer" [4] "keras.trainers.trainer.Trainer" [5] "keras.layers.layer.Layer" [6] "keras.backend.tensorflow.layer.TFLayer" [7] "keras.backend.tensorflow.trackable.KerasAutoTrackable" [8] "tensorflow.python.trackable.autotrackable.AutoTrackable" [9] "tensorflow.python.trackable.base.Trackable" [10] "keras.ops.operation.Operation" [11] "python.builtin.object"
解决方法
1. 适配Keras 3.x API(当前安装版本)
你安装的是Keras 3.x版本,该版本采用了与Python原生Keras对齐的API,编译模型需使用R调用Python对象的语法,而非旧版的keras::compile()函数:
model1$compile( optimizer = "rmsprop", loss = "sparse_categorical_crossentropy", metrics = "accuracy" )
2. 安装旧版Keras以匹配书籍内容
如果需要完全对应《Deep Learning with R》中的代码,可安装与书籍匹配的Keras 2.x版本:
# 卸载当前包 remove.packages(c("keras", "tensorflow")) # 安装指定版本 remotes::install_github("rstudio/keras@v2.15.0") remotes::install_github("rstudio/tensorflow@v2.15.0") # 安装对应版本的TensorFlow后端 library(keras) install_keras(version = "2.15.0")
3. 额外排查步骤
- 执行
reticulate::conda_list()确认r-reticulate环境存在且被正确激活 - 重启R会话后重新加载包并执行代码,避免缓存导致的版本冲突
内容的提问来源于stack exchange,提问作者Joseph Kletzer
相关产品推荐
相关产品推荐

