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

Keras fit_generator验证数据类型错误:float无法解析为整数求助

解决Keras fit_generator中"float cannot be interpreted as integer"的错误

针对你在运行CUHK03行人重识别脚本时遇到的TypeError: 'float' object cannot be interpreted as an integer错误,结合你使用的Keras 2.1.3、Python 3.6.3环境,这个问题大概率出在fit_generator的参数格式不匹配上,下面是具体的分析和解决步骤:

核心原因

Keras 2.x版本对fit_generator的steps_per_epoch和validation_steps参数有严格要求:必须传入整数,但Python 3中使用/做除法会返回浮点数(比如100/32=3.125),如果你的代码里直接用这种方式计算步数,就会触发这个错误。另外,也有可能是validation_data的格式不符合要求(比如传入了维度为浮点数的数组),但前者是更常见的诱因。

具体解决步骤

1. 定位并修正步数参数

找到代码中调用fit_generator的位置,通常会类似这样:

model.fit_generator(train_generator,
                    steps_per_epoch=len(train_samples)/batch_size,
                    validation_data=val_generator,
                    validation_steps=len(val_samples)/batch_size,
                    epochs=50)

把其中的除法改为整数除法(用//运算符),或者用int()强制转换为整数:

# 方式1:用整数除法,自动向下取整
model.fit_generator(train_generator,
                    steps_per_epoch=len(train_samples) // batch_size,
                    validation_data=val_generator,
                    validation_steps=len(val_samples) // batch_size,
                    epochs=50)

# 方式2:如果想包含最后一批不足batch_size的样本,可手动加1
val_steps = len(val_samples) // batch_size
if len(val_samples) % batch_size != 0:
    val_steps += 1

train_steps = len(train_samples) // batch_size
if len(train_samples) % batch_size != 0:
    train_steps += 1

model.fit_generator(train_generator,
                    steps_per_epoch=train_steps,
                    validation_data=val_generator,
                    validation_steps=val_steps,
                    epochs=50)

2. 验证validation_data的格式

如果修改步数后仍然报错,检查validation_data的格式:

  • 如果你传入的是生成器,确保生成器每次返回的是(x_val, y_val)的元组,且x_val、y_val的所有维度都是整数(比如(32, 128, 64, 3),不能出现浮点数维度)。
  • 如果你传入的是静态数据集元组(x_val, y_val),确认x_val和y_val的形状是合法的整数维度,且数据类型符合模型输入要求。

3. 适配Keras版本差异

原项目可能是基于Keras 1.x开发的,而Keras 2.x对fit_generator的参数做了调整:

  • Keras 1.x中validation_steps是可选参数,但Keras 2.x中如果validation_data是生成器,必须显式传入validation_steps且为整数。
  • 确保生成器的输出格式符合Keras 2.x的要求(比如多输入模型需要返回对应数量的输入数组)。

调试小技巧

如果还是无法定位问题,打印出steps_per_epoch、validation_steps的值,以及validation_data的形状,确认是否存在浮点数:

print("Steps per epoch:", len(train_samples)/batch_size)
print("Validation steps:", len(val_samples)/batch_size)
if isinstance(validation_data, tuple):
    print("Validation x shape:", validation_data[0].shape)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 07:50:57