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

使用TensorFlow 2.15.0 GPU训练猫狗识别CNN模型遇scipy未定义错误

问题描述

我正在使用TensorFlow 2.15.0 GPU训练一个CNN模型实现猫狗识别,运行程序时出现错误:NameError: name 'scipy' is not defined。

数据生成器

数据集可通过Kaggle获取,代码如下:

train_datagen = ImageDataGenerator(rescale=1./255)
test_datagen = ImageDataGenerator(rescale=1./255)
# 加载训练数据
train_generator = train_datagen.flow_from_directory(
    train_dir, 
    target_size=(64, 64), 
    batch_size=20, 
    class_mode='binary'
)
# 加载验证数据
test_generator = test_datagen.flow_from_directory(
    test_dir, 
    target_size=(64, 64), 
    batch_size=20, 
    class_mode='binary'
)

模型

模型包含3个卷积层和2个全连接层,构建与编译代码:

# 构建模型
model = tf.keras.models.Sequential([
    tf.keras.layers.Conv2D(32, (3, 3), activation='relu', input_shape=(64, 64, 3)), 
    tf.keras.layers.MaxPooling2D(2, 2), 
    tf.keras.layers.Conv2D(64, (3, 3), activation='relu'), 
    tf.keras.layers.MaxPooling2D(2, 2), 
    tf.keras.layers.Conv2D(128, (3, 3), activation='relu'), 
    tf.keras.layers.MaxPooling2D(2, 2), 
    tf.keras.layers.Flatten(), 
    tf.keras.layers.Dense(512, activation='relu'), 
    tf.keras.layers.Dense(1, activation='sigmoid')
])
# 编译模型
model.compile(loss='binary_crossentropy', 
              optimizer=Adam(learning_rate=1e-4), 
              metrics=['acc'])

训练报错

运行到以下训练代码时出现错误:

history = model.fit_generator(
    train_generator, 
    steps_per_epoch=400, 
    epochs=20, 
    validation_data=test_generator, 
    validation_steps=100, 
    verbose=2
)

错误栈信息:

Traceback (most recent call last):
  File "/home/liu/tensor/demo2/test1.py", line 65, in <module>
    history = model.fit_generator(
  File "/home/liu/tensor/tensor_venv/lib/python3.10/site-packages/keras/src/engine/training.py", line 2913, in fit_generator
    return self.fit(
  File "/home/liu/tensor/tensor_venv/lib/python3.10/site-packages/keras/src/utils/traceback_utils.py", line 70, in error_handler
    raise e.with_traceback(filtered_tb) from None
  File "/home/liu/tensor/tensor_venv/lib/python3.10/site-packages/keras/src/preprocessing/image.py", line 2526, in apply_affine_transform
    if scipy is None:
NameError: name 'scipy' is not defined

疑问

  • 是否需要手动安装scipy?但感觉不该出现这种情况。
  • fit_generator()函数是否和Python 3.10存在兼容性问题?
  • 是否是图片格式不正确导致的?

解决方案

1. 必须手动安装scipy

从错误栈能看到,Keras的apply_affine_transform函数会检查scipy是否存在——即便你没显式使用数据增强,TensorFlow/Keras的部分内部逻辑也依赖scipy。直接在虚拟环境里执行安装命令:

pip install scipy

2. 替换fit_generator为fit

fit_generator在TensorFlow 2.x版本后已被废弃,虽然它内部会调用fit,但更推荐直接使用model.fit(),避免潜在的兼容性问题。修改训练代码为:

history = model.fit(
    train_generator, 
    steps_per_epoch=400, 
    epochs=20, 
    validation_data=test_generator, 
    validation_steps=100, 
    verbose=2
)

该问题和Python 3.10无直接兼容性关联,主要是函数废弃带来的潜在风险。

3. 图片格式问题可排除

错误明确指向scipy未定义,和图片格式无关。如果后续出现图片加载错误,再去检查数据集里的图片是否损坏或格式不兼容。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.30 10:03:31