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

TensorFlow训练猫狗分类CNN出现0xC0000409错误求助

问题分析与解决

错误码 Process finished with exit code -1073740791 (0xC0000409) 在Windows环境下通常指向内存访问冲突,大概率由内存不足、数据加载逻辑错误或参数配置不当引发。结合你的代码,核心问题及修复方案如下:

1. model.fit 参数配置错误

你将 steps_per_epoch 设置为 len(test_it),这是完全错误的:

  • steps_per_epoch 应等于训练集迭代器的长度(len(train_it)),表示每轮训练需遍历完所有训练数据
  • validation_steps 才对应测试/验证集迭代器的长度(len(test_it))

该错误会导致训练时尝试读取远超训练集的数据量,直接触发内存溢出。

2. 废弃API的使用

evaluate_generator 已被官方废弃,建议改用 model.evaluate,它现在支持直接传入数据生成器。

3. 内存占用过高

200×200的输入尺寸搭配64的batch_size,对内存/GPU显存压力较大,容易触发崩溃。可先降低batch_size(如改为16或32)测试。

4. 环境兼容性问题

Python3.7搭配独立Keras库可能存在适配问题,优先使用 tf.keras(TensorFlow集成的Keras模块),兼容性更稳定。


修正后的完整代码

# baseline model for the dataset
import sys
from matplotlib import pyplot
from tensorflow.keras.utils import to_categorical
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Conv2D
from tensorflow.keras.layers import MaxPool2D
from tensorflow.keras.layers import Dense
from tensorflow.keras.layers import Flatten
from tensorflow.keras.optimizers import SGD
from tensorflow.keras.preprocessing.image import ImageDataGenerator

# define cnn model
def define_model():
    model = Sequential()
    model.add(Conv2D(32, (3, 3), activation='relu', kernel_initializer='he_uniform', padding='same',
                     input_shape=(200, 200, 3)))
    model.add(MaxPool2D((2, 2)))
    model.add(Flatten())
    model.add(Dense(128, activation='relu', kernel_initializer='he_uniform'))
    model.add(Dense(1, activation='sigmoid'))
    # 统一优化器配置(原代码定义了SGD但实际用了adam,此处保留adam)
    model.compile(optimizer='adam', loss='binary_crossentropy', metrics=['accuracy'])
    model.summary()
    return model


# run the test harness for evaluating a model
def run_test_harness():
    # define model
    model = define_model()
    # create data generator
    datagen = ImageDataGenerator(rescale=1.0 / 255.0)
    # prepare iterators - 降低batch_size减少内存占用
    train_it = datagen.flow_from_directory('data_dogs_vs_cats/train', class_mode='binary', batch_size=32,
                                           target_size=(200, 200))
    test_it = datagen.flow_from_directory('data_dogs_vs_cats/val', class_mode='binary', batch_size=32,
                                          target_size=(200, 200))
    # fit model - 修正steps_per_epoch参数
    history = model.fit(train_it, steps_per_epoch=len(train_it), 
                        validation_data=test_it, validation_steps=len(test_it),
                        epochs=20, verbose=1)  # 开启verbose查看训练过程
    # evaluate model - 用evaluate替代废弃的evaluate_generator
    _, acc = model.evaluate(test_it, steps=len(test_it), verbose=0)
    print('> %.3f' % (acc * 100.0))


# entry point
run_test_harness()

额外排查步骤

  • 验证数据集路径:确保data_dogs_vs_cats/train和val目录下存在dogs、cats两个子文件夹,且内部有有效图片
  • 释放内存资源:关闭其他占用内存/GPU显存的程序,避免资源不足
  • 缩小输入尺寸:尝试将target_size改为(100,100),进一步降低内存压力

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.22 10:48:18