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

训练前馈神经网络时出现“non-conformable arguments”错误求助

搞定前馈神经网络多分类的"non-conformable arguments"错误

嘿,我帮你捋捋这个维度不匹配的问题——你遇到的这个错误,大概率是公式构建或者数据格式没对齐导致的,咱们一步步拆解解决:

先揪出错误根源

看你写的代码,核心问题可能出在这两处:

  1. 手动独热编码+公式的组合不对:多数神经网络包(比如nnet)做多分类时,不需要把独热后的三个标签列(l1/l2/l3)都塞到公式左边,模型本身能自动处理因子型的分类标签,你手动做独热反而会让模型搞不清输入输出的维度。
  2. 公式里的筛选逻辑冗余:你用n[!n %in% "Pred"],但train_nn里早就没有Pred列了(因为你用了train[,c(-1)]),虽然这不会直接报错,但容易让公式构建出意外的结果。

另外也得确认下数据维度:你原始训练集是57行7500列,处理后的train_nn应该是57行(3+7499)=7502列?如果模型期望标签和特征是分开的结构,你这样合并成一个数据框用公式,就会出现维度不匹配。

两种修正方案,选适合你的

方案1:让模型自动处理分类标签(最推荐)

这是最省心的方式,不用手动搞独热,直接用原始的因子型标签就行,以常用的nnet包为例:

# 先加载需要的包
library(nnet)

# 把Pred转成因子(确保模型识别成分类任务)
train$Pred <- as.factor(train$Pred)
test$Pred <- as.factor(test$Pred)

# 构建正确的公式:标签Pred ~ 所有其他特征
feature_names <- paste(names(train)[-1], collapse = " + ")
f <- as.formula(paste("Pred ~", feature_names))

# 训练多分类神经网络,size是隐藏层神经元数,softmax=T开启多分类模式
modelffnn <- nnet(f, data = train, size = 10, softmax = TRUE, trace = FALSE)

方案2:坚持手动独热?那得调整输入格式

如果你一定要用自己生成的独热标签,那别用公式,直接把特征矩阵和标签矩阵分开传给模型,比如用ffnn包的话:

library(ffnn)

# 单独提取独热标签矩阵
train_labels <- class.ind(as.factor(train$Pred))
# 把特征转成矩阵格式(ffnn要求输入是矩阵)
train_features <- as.matrix(train[, -1])

# 直接传入特征和标签,hidden参数设置隐藏层结构
modelffnn <- ffnn(x = train_features, y = train_labels, hidden = c(10))

最后再检查这几点

  • 确保训练集和测试集的特征列完全一致,别出现有的列在训练集有、测试集没有的情况
  • 检查数据里有没有缺失值,缺失值可能偷偷导致维度异常
  • 你这特征维度很高(7500列),如果训练起来慢或者效果差,可以先试试PCA降维,减少特征数量再训练

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 08:03:30