如何在Google Colab中用GPU加速Keras猫狗分类CNN训练?
解决Colab中Keras CNN训练GPU加速无效的问题
核心问题拆解
你的训练慢并非GPU未生效,而是数据读取瓶颈、训练参数设置错误和不必要的GPU手动绑定导致的,以下是具体解决方案:
1. 优先解决Drive数据读取瓶颈(最关键)
直接从Google Drive读取数据集速度极慢,IO延迟会拖垮GPU利用率,建议先把数据集复制到Colab本地存储:
# 复制数据集到Colab本地磁盘(速度快很多) !cp -r "/content/drive/MyDrive/Colab Notebooks/files/dataset_CNN" "/content/" # 修改路径为本地路径 training_set = train_datagen.flow_from_directory('/content/dataset_CNN/training_set', target_size = (64, 64), batch_size = 32, class_mode = 'binary') test_set = test_datagen.flow_from_directory('/content/dataset_CNN/test_set', target_size = (64, 64), batch_size = 32, class_mode = 'binary')
训练完成后若需保存模型,再复制回Drive即可。
2. 修正离谱的训练步数参数
你设置的steps_per_epoch=8000和validation_steps=2000完全错误:
- 猫狗数据集训练集通常是8000张,batch_size=32的话,
steps_per_epoch应该是8000//32=250 - 测试集2000张,
validation_steps应该是2000//32=63
之前的设置意味着每个epoch要重复遍历数据集32次,纯纯浪费时间,修改后代码:
classifier.fit(training_set, steps_per_epoch = 250, # 8000/32=250,匹配真实样本数 epochs = 25, validation_data = test_set, validation_steps = 63) # 2000/32≈63
3. 删掉无用的GPU绑定代码
TensorFlow 2.x和Keras会自动检测并优先使用GPU,手动with tf.device('/device:GPU:0')不仅没用,还可能导致数据生成器(CPU运行)和模型(GPU运行)之间的传输效率下降,直接移除这段代码即可。
4. 额外加速技巧
- 增大batch_size:如果GPU内存够,把batch_size改成64/128,能提升GPU利用率
- 开启混合精度训练:Colab的GPU支持混合精度,不损失精度的前提下加速训练:
from tensorflow.keras.mixed_precision import set_global_policy set_global_policy('mixed_float16') - 检查GPU状态:用
!nvidia-smi命令查看GPU利用率,确认模型是否真的在GPU上运行
内容的提问来源于stack exchange,提问作者Cesar Vigil
相关产品推荐
相关产品推荐

