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

使用model.fit_generator时出现AttributeError: 'str'对象无keys属性的技术求助

解决AttributeError: 'str' object has no attribute 'keys'的问题

错误原因分析

这个报错的核心是:Keras在处理**类别权重(class_weight)**时,预期传入的是一个字典(键为类别ID,值为对应权重)或者None,但你传入的是一个字符串类型的值。代码执行到class_ids = list(sorted(class_weight.keys()))时,字符串没有keys()方法,所以触发了这个属性错误。

从你的报错栈和代码来看,大概率是在调用fit_generator时,不小心把class_weight参数设成了字符串,或者误传了其他字符串类型的变量到这个参数位置。

解决步骤

  1. 检查并修正class_weight参数
    如果你确实需要设置类别权重(比如处理类别不平衡问题),确保class_weight是一个字典结构。比如你的二分类任务中,类别0和1的权重可以这样定义:

    # 示例:根据你的数据分布调整权重值
    class_weight = {0: 1.0, 1: 1.5}
    history=model.fit_generator(generate_arrays_for_training(indexPat, filesPath, end=75), class_weight=class_weight)
    
  2. 不需要类别权重时移除该参数
    如果你不需要类别权重,直接删除class_weight参数,或者显式设置为None:

    # 方式1:移除class_weight参数
    history=model.fit_generator(generate_arrays_for_training(indexPat, filesPath, end=75))
    # 方式2:显式设置为None
    history=model.fit_generator(generate_arrays_for_training(indexPat, filesPath, end=75), class_weight=None)
    
  3. 推荐使用fit方法替代fit_generator
    注意fit_generator已经被TensorFlow/Keras弃用,官方推荐直接使用fit方法,它现在可以直接兼容生成器输入,代码更简洁:

    # 记得添加epochs、batch_size等必要参数
    history=model.fit(generate_arrays_for_training(indexPat, filesPath, end=75), epochs=10, batch_size=32)
    

额外验证

你的generate_arrays_for_training生成器返回的标签格式是正确的one-hot编码,这部分没有问题,可以继续使用。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.09 10:12:50