You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

R中Keras神经网络训练报错:缺失'dense_input'输入问题排查

解决R中Keras训练时输入数据与模型输入名称不匹配的问题

错误根源

当你传入带列名的数据框给fit()时,Keras会将数据框的列名视为输入层的标识,但你的序列模型默认输入层名称是dense_input,两者名称不匹配,直接触发"缺失'dense_input'输入"的报错。修改input_shape为NULL或c(1, ncol(...))完全没命中问题核心,自然无效。

两种可行解决方案

方法一:将数据转为矩阵/数组(推荐)

Keras序列模型原生适配矩阵/数组格式的输入,这种格式不会携带列名,能直接匹配模型默认的输入层:

# 把训练集、测试集数据转为矩阵,丢弃列名
train_x <- as.matrix(train_df_x)
test_x <- as.matrix(test_df_x)

# 重新执行训练
model %>% fit(
  x = train_x,
  y = train_y,
  validation_data = list(test_x, test_y),
  epochs = 10,
  batch_size = 32
)

方法二:显式对齐输入层名称与数据标识

如果必须保留数据框格式,可以在定义模型时给输入层指定自定义名称,然后将数据转为对应命名的列表传入:

# 定义模型时给输入层设置明确名称
model <- keras_model_sequential() %>%
  layer_dense(units = 64, activation = 'relu', input_shape = c(ncol(train_df_x)), name = 'custom_input') %>%
  layer_dropout(rate = 0.2) %>%
  layer_dense(units = 32, activation = 'relu') %>%
  layer_dense(units = 1, activation = 'sigmoid')

# 编译模型
model %>% compile(
  optimizer = 'adam',
  loss = 'binary_crossentropy',
  metrics = c('accuracy')
)

# 将数据转为命名列表,键名与输入层名称一致
train_data <- list(custom_input = train_df_x)
test_data <- list(custom_input = test_df_x)

# 执行训练
model %>% fit(
  x = train_data,
  y = train_y,
  validation_data = list(test_data, test_y),
  epochs = 10,
  batch_size = 32
)

额外注意事项

  • 你的输入是每个样本含1000个特征,input_shape应正确设置为c(1000),不要用无效的NULL或c(1, ncol(...))。
  • 当前样本每行对应一个样本、每列对应一个特征的格式是正确的,无需调整。

内容的提问来源于stack exchange,提问作者Fabrizio

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.01 06:10:31