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

TensorFlow可识别GPU但运行VGG16模型时内核断开问题求助

问题排查与修复方案

1. 修复代码显性错误

  • 测试集赋值错误:现有代码中test_X = train_X.astype("float32") 逻辑错误,会把训练集直接赋值给测试集,后续验证完全失效,修改为:
test_X = test_X.astype("float32")
  • VGG层裁剪逻辑错误:Keras中直接调用model.layers.pop()仅会移除Python列表中的层对象,不会更新模型计算图,你以为删掉的层实际还会参与计算,额外占用显存。把添加VGG层的代码修改为:
vgg = VGG16(input_shape = (60,80,3), include_top=False)
model = Sequential()
# 添加时直接跳过VGG的最后一层
for layer in vgg.layers[:-1]:
    model.add(layer)

2. 内核断开核心问题(GPU显存溢出)修复

训练阶段无报错内核断开90%以上是GPU显存不足触发的进程崩溃,可按以下顺序调整:

  • 启用显存动态分配:TensorFlow默认会预占全部GPU显存,容易触发溢出,在代码最开头添加如下配置:
import tensorflow as tf
gpus = tf.config.experimental.list_physical_devices('GPU')
for gpu in gpus:
    tf.config.experimental.set_memory_growth(gpu, True)
  • 降低训练批次大小:model.fit默认batch size为32,显式指定更小的数值,根据显存情况逐步下调,比如:
history = model.fit(train_X, train_y, epochs=15, batch_size=8)
  • 添加数据归一化:你当前仅转换了数据类型,没有做归一化,过大的输入数值会提升计算资源消耗,在数据类型转换后添加:
train_X = train_X / 255.0
test_X = test_X / 255.0
  • 冻结VGG底层参数:如果显存还是不足,可以只训练VGG的顶部几层,降低计算量,把设置层可训练的代码修改为:
# 仅放开最后10层的训练权限,前面的层用预训练权重
for layer in model.layers[:-10]:
    layer.trainable = False
for layer in model.layers[-10:]:
    layer.trainable = True
  • 检查依赖版本匹配:确认TensorFlow、CUDA、cuDNN三者的版本完全符合官方对应要求,小版本不匹配也会出现无报错的内核崩溃问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 07:06:03