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

使用CNN进行多类别图像分类训练时TypeError报错的解决求助

错误原因

你触发的报错核心原因是 fit() 方法的 steps_per_epoch、validation_steps 两个参数要求输入整数类型,但你用 / 做除法得到的是浮点型数值,当计算结果出现小数(比如你遇到的0.6)时,TensorFlow无法将浮点型数值转为int64类型的张量,就触发了类型错误。
另外你代码里还存在参数不一致的问题:你定义ImageDataGenerator迭代器时,batch_size 设为32,但后续计算步数时用的是自定义的batch_size=10,两个批次大小不匹配,也会导致训练步数计算错误。

修复方案

  • 先统一批次大小参数,避免混用不同的batch_size数值
  • 把步数计算的普通除法 / 替换为整数除法 //,或者手动将计算结果转为int类型
  • 如果你使用的是TensorFlow 2.4及以上版本,也可以直接省略steps_per_epoch和validation_steps两个参数,框架会根据迭代器的样本总量自动计算步数
  • 如果怕整除会漏掉最后一批不足一个batch的样本,可以用math.ceil()对除法结果向上取整,保证所有样本都能参与训练

修改后的参考代码

import math

train_gen=ImageDataGenerator(rescale=1./255)
validation_gen=ImageDataGenerator(rescale=1./255)

# 统一全局批次大小参数,后续直接调用
BATCH_SIZE = 32

train_generator=train_gen.flow_from_dataframe(
    train_df,
    "/Users/danieladegborioye/Documents/school/FIFTH YEAR/ENGR 418 Applied Machine learning /Lego_dataset_1/training/",
    x_col='filename',
    y_col='category',
    target_size=(150,150),
    class_mode="categorical",
    batch_size=BATCH_SIZE
)

validation_generator=validation_gen.flow_from_dataframe(
    validate_df,
    "/Users/danieladegborioye/Documents/school/FIFTH YEAR/ENGR 418 Applied Machine learning /Lego_dataset_1/training/",
    x_col='filename',
    y_col='category',
    target_size=(150,150),
    class_mode="categorical",
    batch_size=BATCH_SIZE
)


epochs=10

history=modell.fit(
    train_generator,
    epochs=epochs,
    validation_data=validation_generator,
    # 向上取整保证所有样本都被用到,结果为整数不会触发类型错误
    validation_steps=math.ceil(total_validate/BATCH_SIZE),
    steps_per_epoch=math.ceil(total_train/BATCH_SIZE),
    callbacks=callbacks
)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 01:54:04