Mac M1使用ImageDataGenerator已装SciPy仍提示缺失的报错问题
问题根因
该报错是M1架构Mac上旧版本TensorFlow(2.5.0)绑定的keras-preprocessing库和arm64版本scipy的适配问题:keras-preprocessing的仿射变换模块初始化时无法正确识别已安装的scipy包,误判scipy未安装抛出错误。
解决方案按优先级排序:
- 调整导入顺序
在导入ImageDataGenerator之前先强制导入scipy,让keras-preprocessing可以识别到已加载的scipy:
import scipy from keras_preprocessing.image import ImageDataGenerator
如果还是报错,执行下一步。
- 降级scipy到兼容版本
1.7.x版本的scipy和TensorFlow 2.5的keras-preprocessing适配性最好,在当前虚拟环境执行安装命令:
pip install scipy==1.7.3
- 替换数据增强实现绕开依赖
如果不想改动依赖版本,可以放弃使用ImageDataGenerator的图像变换功能,改用TensorFlow自带的预处理层实现数据增强,完全不需要scipy依赖:
data_augmentation = tf.keras.Sequential([ tf.keras.layers.Rescaling(1./255), tf.keras.layers.RandomRotation(0.2), # 对应原参数rotation_range=40 tf.keras.layers.RandomTranslation(0.2, 0.2), # 对应原参数width/height_shift_range=0.2 tf.keras.layers.RandomFlip("horizontal"), # 对应原参数horizontal_flip=True ]) # 后续用tf.keras.utils.image_dataset_from_directory加载数据集,和数据增强层拼接pipeline即可
- 升级TensorFlow版本
升级到TensorFlow 2.9及以上版本,自带的tf.keras.preprocessing.image.ImageDataGenerator已经修复了M1架构下的scipy识别问题,无需单独安装keras-preprocessing包。
内容的提问来源于stack exchange,提问作者Federico Piras
相关产品推荐
相关产品推荐

