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

在R中使用Keras的fit_generator时出现类型错误求助

解决R中Keras fit_generator的StopIteration与验证集浮点错误

我帮你梳理了代码里的几个关键问题,这些就是引发你遇到的StopIteration: 'float' object cannot be interpreted as an integer和验证集相关浮点错误的根源,下面一步步来解决:

错误原因分析

你的问题主要来自三个方面:

  • 训练数据生成器未显式指定batch_size,导致后续迭代时出现类型不匹配
  • steps_per_epoch硬编码为固定值,既不符合样本量实际情况,也可能因数值类型触发错误
  • 添加验证集时未正确设置整数类型的validation_steps,引发布尔值判断的浮点错误

具体修复步骤

1. 给训练生成器显式添加batch_size参数

你的train_set生成器缺少batch_size配置,虽然Keras有默认值,但显式设置能避免跨平台/版本的类型问题。修改代码如下:

train_set = train_gen$flow_from_directory(
  'dataset/training_set', 
  target_size = c(64, 64), 
  batch_size = 32,  # 新增该行,和测试集保持一致
  class_mode = "categorical"
)

2. 动态计算整数类型的迭代步数

硬编码steps_per_epoch = 50很容易因为样本量不足触发StopIteration,而且如果计算结果是浮点数,会引发类型错误。我们可以根据实际样本数和批次大小计算整数步数:

# 获取训练、测试集的总样本数
train_samples <- train_set$n
test_samples <- test_set$n
batch_size <- 32

# 转换为整数,避免浮点类型问题
steps_per_epoch <- as.integer(train_samples / batch_size)
validation_steps <- as.integer(test_samples / batch_size)

3. 修正fit_generator调用(含验证集场景)

用计算好的整数步数替换硬编码值,添加验证集时也必须指定validation_steps:

# 不带验证集的调用
model$fit_generator(
  train_set, 
  steps_per_epoch = steps_per_epoch, 
  epochs = 10
)

# 带验证集的调用(解决bool(validation_data)错误)
model$fit_generator(
  train_set, 
  steps_per_epoch = steps_per_epoch, 
  epochs = 10,
  validation_data = test_set,
  validation_steps = validation_steps
)

4. 确保Keras与TensorFlow版本兼容

部分类型错误是因为R的Keras接口和底层TensorFlow版本不匹配导致的,运行以下命令更新到兼容版本:

keras::install_keras()

完成以上修改后,你的模型应该能正常训练,不会再出现StopIteration和验证集相关的浮点错误了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 06:37:50