解决Keras导入错误模块 kerasutilsgenericutils 没有属性 populatedictwithmoduleobjects

2024-02-10

解决Keras导入错误:模块 ‘keras.utils.generic_utils’ 没有属性 ‘populate_dict_with_module_objects’

当您在尝试使用Python的Keras库时,可能会遇到一个常见的错误消息:“module ‘keras.utils.generic_utils’ has no attribute ‘populate_dict_with_module_objects’”。这个问题通常源于Keras或其相关依赖项的版本兼容性问题。本资源提供了针对此问题的解决方案,适用于那些遇到此特定错误的开发者。

错误背景

该错误表明您的Keras版本与其中的一个关键模块预期的行为不一致。特别是在Keras 2.4.3或其他特定版本中,可能缺少一些关键函数定义,比如populate_dict_with_module_objects,这会导致导入过程失败。

解决步骤

  1. 确认版本:首先,确保您的Python版本和Keras版本兼容。如果遇到上述错误,考虑更新或回退到一个已知与您的环境兼容的Keras版本。

  2. 手动修复:如果更新不可行或者问题仍然存在,您可以采取手动添加缺失功能的方法。文章提供的解决策略涉及到直接编辑Keras的源代码。具体操作如下:

    • 导航到Keras的安装目录,通常是python\Lib\site-packages\keras\utils
    • 打开generic_utils.py文件。
    • 在文件末尾粘贴以下代码段,以补全缺失的函数:

      def populate_dict_with_module_objects(target_dict, modules, obj_filter):
          for module in modules:
              for name in dir(module):
                  obj = getattr(module, name)
                  if obj_filter(obj):
                      target_dict[name] = obj
           
      def to_snake_case(s):
          return '_'.join([ch.lower() if ch.isupper() else ch for ch in str(s)]).lstrip('_')
      
  3. 应对后续错误:完成上述步骤后,如果还有其他类似错误(如缺少to_snake_case函数),同样需要按以上方式补充相应的函数定义。

  4. 测试修复:保存更改后,重启Python解释器并尝试重新导入Keras,确认问题是否已经解决。

注意事项

  • 修改系统库文件是一种临时且具风险的解决方案,有可能在未来的库更新中被覆盖。
  • 确保备份原始文件,以便将来恢复。
  • 考虑使用虚拟环境管理不同的项目及其依赖,以避免全局库的冲突。

通过以上步骤,你应该能够解决Keras导入时遇到的这个特定问题,让您的深度学习项目顺利进行。记得始终关注官方文档和社区讨论,寻找最新和最合适的解决方案以应对软件库的变更。

下载链接

解决Keras导入错误模块keras.utils.generic_utils没有属性populate_dict_with_module_objects