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

求助:深度学习建筑提取代码导入时出现tensorflow.keras模块缺失错误

解决导入tensorflow.keras报错及segmentation_models兼容问题

我在编写建筑提取的深度学习代码时,导入库文件出现No module named 'tensorflow.keras'错误,无法自行解决。当前环境TensorFlow版本为2.9.1,Keras版本为2.2.0。

我的代码

import os
import cv2
import numpy as np
import random
from matplotlib import pyplot as plt
from patchify import patchify
from PIL import Image
import segmentation_models as sm
from sklearn.model_selection import train_test_split

from tensorflow.keras.utils import to_categorical

from tensorflow.keras.metrics import MeanIoU

完整报错信息

ImportError                               Traceback (most recent call last)
File ~\anaconda3\envs\tensorflow\lib\site-packages\segmentation_models\__init__.py:98, in <module>
     97 try:
---&gt; 98     set_framework(_framework)
     99 except ImportError:

File ~\anaconda3\envs\tensorflow\lib\site-packages\segmentation_models\__init__.py:67, in set_framework(name)
     66 if name == _KERAS_FRAMEWORK_NAME:
---&gt; 67     import keras
     68     import efficientnet.keras  # init custom objects

File ~\anaconda3\envs\tensorflow\lib\site-packages\keras\__init__.py:3, in <module>
      1 from __future__ import absolute_import
----&gt; 3 from . import utils
      4 from . import activations

File ~\anaconda3\envs\tensorflow\lib\site-packages\keras\utils\__init__.py:25, in <module>
     24 from .np_utils import normalize
---&gt; 25 from .multi_gpu_utils import multi_gpu_model

File ~\anaconda3\envs\tensorflow\lib\site-packages\keras\utils\multi_gpu_utils.py:7, in <module>
      5 from __future__ import print_function
----&gt; 7 from ..layers.merge import concatenate
      8 from .. import backend as K

File ~\anaconda3\envs\tensorflow\lib\site-packages\keras\layers\__init__.py:4, in <module>
      3 from ..utils.generic_utils import deserialize_keras_object
----&gt; 4 from ..engine.base_layer import Layer
      5 from ..engine import Input

File ~\anaconda3\envs\tensorflow\lib\site-packages\keras\engine\__init__.py:8, in <module>
      7 from .network import get_source_inputs
----&gt; 8 from .training import Model

File ~\anaconda3\envs\tensorflow\lib\site-packages\keras\engine\training.py:21, in <module>
     20 from .training_utils import weighted_masked_objective
---&gt; 21 from . import training_arrays
     22 from . import training_generator

File ~\anaconda3\envs\tensorflow\lib\site-packages\keras\engine\training_arrays.py:14, in <module>
     13 from .. import backend as K
---&gt; 14 from .. import callbacks as cbks
     15 from ..utils.generic_utils import Progbar

File ~\anaconda3\envs\tensorflow\lib\site-packages\keras\callbacks.py:18, in <module>
     17 from collections import OrderedDict
---&gt; 18 from collections import Iterable
     19 from .utils.generic_utils import Progbar

ImportError: cannot import name 'Iterable' from 'collections' (C:\Users\DOLONCHAPA\anaconda3\envs\tensorflow\lib\collections\__init__.py)

During handling of the above exception, another exception occurred:

ModuleNotFoundError                       Traceback (most recent call last)
Input In [1], in <cell line: 8>()
      6 from patchify import patchify
      7 from PIL import Image
----&gt; 8 import segmentation_models as sm
      9 from sklearn.model_selection import train_test_split
     11 from tensorflow.keras.utils import to_categorical

File ~\anaconda3\envs\tensorflow\lib\site-packages\segmentation_models\__init__.py:101, in <module>
     99 except ImportError:
    100     other = _TF_KERAS_FRAMEWORK_NAME if _framework == _KERAS_FRAMEWORK_NAME else _KERAS_FRAMEWORK_NAME
---&gt; 101     set_framework(other)
    103 print('Segmentation Models: using `{}` framework.'.format(_KERAS_FRAMEWORK))
    105 # import helper modules

File ~\anaconda3\envs\tensorflow\lib\site-packages\segmentation_models\__init__.py:71, in set_framework(name)
     69 elif name == _TF_KERAS_FRAMEWORK_NAME:
     70     from tensorflow import keras
---&gt; 71     import efficientnet.tfkeras  # init custom objects
     72 else:
     73     raise ValueError('Not correct module name `{}`, use `{}` or `{}`'.format(
     74         name, _KERAS_FRAMEWORK_NAME, _TF_KERAS_FRAMEWORK_NAME))

File ~\anaconda3\envs\tensorflow\lib\site-packages\efficientnet\tfkeras.py:6, in <module>
      2 from . import model
      4 from .preprocessing import center_crop_and_resize
----&gt; 6 EfficientNetB0 = inject_tfkeras_modules(model.EfficientNetB0)
      7 EfficientNetB1 = inject_tfkeras_modules(model.EfficientNetB1)
      8 EfficientNetB2 = inject_tfkeras_modules(model.EfficientNetB2)

File ~\anaconda3\envs\tensorflow\lib\site-packages\efficientnet\__init__.py:50, in inject_tfkeras_modules(func)
     49 def inject_tfkeras_modules(func):
---&gt; 50     import tensorflow.keras as tfkeras
     51     @functools.wraps(func)
     52     def wrapper(*args, **kwargs):
     53         kwargs['backend'] = tfkeras.backend

ModuleNotFoundError: No module named 'tensorflow.keras'

问题根源

  1. Keras版本过旧且不兼容:独立安装的Keras 2.2.0与Python 3.10+版本冲突,collections.Iterable在高版本Python中已迁移至collections.abc,导致老Keras导入失败。
  2. TensorFlow与独立Keras冲突:TensorFlow 2.x自带整合版Keras,单独安装的Keras会干扰框架检测,导致segmentation_models无法找到正确的tensorflow.keras路径。

解决步骤

  • 卸载独立Keras:
    打开终端执行:
    pip uninstall keras -y
    
  • 安装适配版本的依赖库:
    安装与TensorFlow 2.9.1兼容的segmentation_models和efficientnet:
    pip install segmentation-models==1.0.1 efficientnet==1.1.1
    
  • 验证导入:
    在终端测试导入命令,确认无报错后再运行代码:
    import tensorflow.keras
    import segmentation_models as sm
    

额外说明

TensorFlow 2.x版本中,Keras已完全整合到框架内部,直接使用from tensorflow.keras import ...即可,无需单独安装独立Keras,避免后续版本冲突。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 01:35:27