Pytorch:出现RuntimeError: CUDA out of memory.的解决方案

调用VGG网络的训练时候出现了这个问题

报错信息:

RuntimeError: CUDA out of memory. Tried to allocate 823.88 MiB (GPU 0; 7.93 GiB total capacity; 6.96 GiB already allocated; 189.31 MiB free; 10.26 MiB cached)

从报错信息可以看到,是因为GPU内存不足。因为VGG网络是一个参数很庞大的网络,所以在训练过程中,需要存储大量的参数和损失函数信息等等。

解决方案

1. 改变batchsize的大小。 改变batchsize的大小能够使当前epoch的损失函数和梯度存储减少,也许能够解决。
2. 还有一种是将VGG网络的某些层的参数固定住,是它不进行反向传播来计算梯度和损失函数,则可以节省很多内存(我的是通过这一种方式解决)

#  固定权值参数
#遍历该网络的所有参数(卷积层和全连接层)
for param in mode1_vgg16.parameters():
    param.requires_grad = False
#但是参数全部固定了,也没法进行学习,所以我们不固定最后一层,即全连接层
for param in mode1_vgg16.classifier[6].parameters():  #vgg16的classifier的第六层是最后一层
    param.requires_grad = True

如果在验证过程中也出现该错误,请记得调用mode.eval()函数和使用with torch.no_grad()函数
torch.no_grad()函数表示不计算梯度,不进行反向传播,所以在测试的时候可以使用

net.eval()
acc = 0.0  # accumulate accurate number / epoch
with torch.no_grad():
    for val_data in validate_loader:
        ..........

你可能感兴趣的:(Pytorch:出现RuntimeError: CUDA out of memory.的解决方案)