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

R语言Keras搭建Bi LSTM文本分类模型调用fit()方法报错求助

问题排查及解决方案

以下是你代码中的错误点及对应修正方案:

  • 输出层配置不匹配:你要完成的是7分类任务(class_weight中定义了0~6共7个类别),但输出层units设置为1,和分类需求完全不符。二分类场景才会用units=1搭配sigmoid激活,多分类用softmax激活时units必须等于类别总数。
  • 损失函数与标签格式不匹配:如果你传入的train.Labels是整数编码(每个样本标签为0~6的单个整数),不能使用categorical_crossentropy,该损失要求标签为独热编码格式,需要替换为sparse_categorical_crossentropy。
  • 绘图变量名错误:你存储训练过程的变量名为history2,但绘图代码调用的是history,运行时也会触发报错。

修正后代码

模型搭建代码

model <- keras_model_sequential() %>%
 layer_embedding(input_dim = max_features, output_dim = 32, input_length = max.length) %>% 
  layer_lstm(units = 32, return_sequences = TRUE) %>% 
  layer_lstm(units = 32, return_sequences = TRUE) %>%
  bidirectional(layer_lstm(units = 32)) %>% 
  layer_dense(units = 7, activation = 'softmax') # 修正为对应7个分类

summary(model)

编译训练代码

model %>%
  compile(loss = 'sparse_categorical_crossentropy', # 适配整数标签的损失函数
          optimizer = 'adam',
          metrics = c('accuracy'))

history2 <- model %>%
  fit(x.train,
      train.Labels,
      epochs = 20,
      batch_size = 32,
      validation_split = 0.2,
      verbose = 2,
      class_weight = list("0" = 1, "1" = 22.9, "2" = 38.4, "3" = 33.4, "4" = 83.3, "5" = 382.2, "6" = 4280.4))

plot(history2) # 修正变量名

额外检查项

可以自行确认两个参数是否符合要求:

  • x.train的维度是否和embedding层设置的input_length参数匹配
  • train.Labels的所有取值都在0~6范围内,不存在异常值

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 21:57:04