R中使用keras_model_sequential报错ValueError的解决方法咨询
R中Keras Sequential模型构建时的ValueError解决办法
问题场景
在R中使用keras_model_sequential构建模型,定义过程正常,但添加layer_activation时触发错误:
复现代码
library(tidyverse) library(keras) model <- keras_model_sequential(input_shape = c(8)) model %>% layer_dense(units = 32) %>% layer_activation('softmax')
错误信息
Error in py_call_impl(callable, call_args$unnamed, call_args$named) : ValueError: Only input tensors may be passed as positional arguments. The following argument value should be passed as a keyword argument: <Sequential name=sequential_5, built=False> (of type <class 'keras.src.models.sequential.Sequential'>) Run `reticulate::py_last_error()` for details.
回溯信息:
── R Traceback ───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────── ▆ 1. ├─model %>% layer_dense(units = 32) %>% ... 2. ├─keras::layer_activation(., "softmax") 3. │ └─keras::create_layer(...) 4. └─keras::layer_dense(., units = 32) 5. └─keras::create_layer(...) 6. ├─keras:::compose_layer(object, layer) 7. └─keras:::compose_layer.default(object, layer) 8. └─reticulate (local) layer(object, ...) 9. └─reticulate:::py_call_impl(callable, call_args$unnamed, call_args$named) See `reticulate::py_last_error()$r_trace$full_call` for more details.
环境:R 4.4.1、Keras 2.15.0、RStudio 2024.09.0
解决方法
方案1:在全连接层中直接指定激活函数
这是最推荐的写法,无需单独调用layer_activation,符合Keras的设计规范:
library(tidyverse) library(keras) model <- keras_model_sequential(input_shape = c(8)) model %>% layer_dense(units = 32, activation = 'softmax')
方案2:修正layer_activation的调用参数
如果必须单独使用激活层,需要将激活函数名称通过activation关键字参数传递,不能用位置参数:
library(tidyverse) library(keras) model <- keras_model_sequential(input_shape = c(8)) model %>% layer_dense(units = 32) %>% layer_activation(activation = 'softmax')
错误原因
Keras 2.15.0的R接口对layer_activation的参数规则做了调整:位置参数仅接受输入张量(即管道传递的模型对象),而激活函数类型必须通过activation关键字参数指定。原代码中将'softmax'作为位置参数传入,导致与管道传递的Sequential模型对象冲突,触发了ValueError。
内容的提问来源于stack exchange,提问作者Matthew Neil
相关产品推荐
相关产品推荐

