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

在R Markdown中拟合Keras多输入模型遇无效首参数错误求助

错误原因与修复方案

核心错误点

  1. 输入数据格式不匹配
    • x_train是tibble类型,Keras全连接层仅支持原子向量/矩阵格式输入,tibble的结构会触发维度赋值错误,这就是你看到Error in dim(x) <- length(x) : invalid first argument, must be vector (list or atomic)的直接原因。
    • fit函数的x参数逻辑错误:train_gen是flow_images_from_directory生成的图像生成器,本身会返回(图像数据, 标签)的批次结果,但多输入场景下不能直接将生成器放入x的列表中,Keras无法识别这种混合格式。
  2. 标签参数完全错误
    模型是单输出的6分类任务,y应传入统一的分类标签,而你写的list(train_gen$classes , x_train)把表格输入当成了标签,完全不符合模型输出要求。
  3. 生成器与validation_split冲突
    validation_split仅适用于内存中的完整数据集,无法和生成器配合使用,生成器场景下需要单独处理验证集数据。

修复步骤

1. 转换表格数据格式

先把tibble类型的x_train转换成矩阵:

x_train_matrix <- as.matrix(x_train)

2. 自定义多输入生成器

编写生成器同时返回图像数据、对应表格数据及标签:

# 初始化图像生成器(保持参数与需求一致)
train_gen <- flow_images_from_directory(
  directory = "你的图像目录路径",
  target_size = c(140,140),
  batch_size = 32,
  class_mode = "categorical",
  shuffle = TRUE
)

# 自定义多输入生成器
multi_train_gen <- function(image_generator, tab_data) {
  function() {
    image_batch <- image_generator()
    # 提取当前批次对应的表格数据
    tab_batch <- tab_data[image_generator$index_array, ]
    return(list(c(image_batch[[1]], tab_batch), image_batch[[2]]))
  }
}

# 实例化多输入生成器
train_multi_gen <- multi_train_gen(train_gen, x_train_matrix)

3. 修正模型训练代码

移除validation_split,若需验证集,需按同样方式准备验证用多输入生成器,通过validation_data传入:

final_history <- model %>% fit(
  x = train_multi_gen,
  steps_per_epoch = train_gen$n %/% train_gen$batch_size,
  epochs = 50 ,
  callbacks = callbacks
  # 如有验证集,添加如下配置
  # validation_data = multi_val_gen,
  # validation_steps = val_gen$n %/% val_gen$batch_size
)

4. 可选:匹配激活函数与损失函数

模型输出用sigmoid但损失是categorical_crossentropy,若为多分类任务,建议将输出层激活函数改为softmax:

output <- layer_concatenate(c(cnn , nn)) %>% 
  layer_dense(16) %>% 
  layer_activation("relu") %>% 
  layer_dense(6) %>% 
  layer_activation("softmax") # 替换原sigmoid

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.25 20:01:07