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

调用Keras ImageDataGenerator.next()报scipy未定义错误

问题根因

Keras的ImageDataGenerator实现旋转、平移、剪切、缩放这类仿射变换类图像增强逻辑时,依赖SciPy库的ndimage模块。你遇到的NameError: name 'scipy' is not defined由两类问题触发:

  • 运行环境未安装SciPy依赖
  • 已安装的SciPy版本与当前Keras版本不兼容:SciPy 1.8.0及以上版本调整了内部模块结构,旧版Keras的动态导入逻辑执行失败,没有成功将scipy注册到全局命名空间,触发变量未定义错误。
解决步骤
  • 安装兼容版本的SciPy
    激活你当前使用的jupyter-venv虚拟环境,执行以下命令安装适配Python3.8、兼容旧版Keras导入逻辑的SciPy版本:
    pip install scipy==1.7.3
    
  • 补全代码缺失的导入、统一接口
    你提供的示例代码中直接调用了tf.keras接口加载图片,但未导入TensorFlow,运行时会额外触发tf未定义报错,需要在代码开头补充导入语句:
    import tensorflow as tf
    
    另外你的代码混用了独立Keras和tensorflow.keras的图像预处理接口,容易出现参数不匹配、序列化失败等兼容问题,建议统一导入路径:要么全部使用tf.keras.preprocessing下的对应模块,要么全部使用独立安装的Keras的对应接口。
  • 高版本SciPy适配方案(可选)
    如果你必须使用1.8.0以上版本的SciPy,不需要降级,直接修改Keras源码即可:
    • 打开报错栈中提示的路径~/jupyter-venv/lib/python3.8/site-packages/keras/preprocessing/image.py
    • 找到文件开头的SciPy动态导入代码块,默认是如下写法:
      try:
          import scipy
      except ImportError:
          scipy = None
      
    • 将其替换为显式导入:
      import scipy
      from scipy import ndimage
      
    • 再定位到同文件内的apply_affine_transform函数,把所有scipy.ndimage开头的调用直接替换为ndimage,保存文件即可。
验证

完成上述操作后重新运行代码,随机旋转增强逻辑可以正常执行,批量生成增强图像并完成绘制,不会再抛出scipy相关报错。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 23:03:23