來自:解決pytorch訓(xùn)練的過程中內(nèi)存一直增加的問題 - 知乎
pytorch訓(xùn)練中內(nèi)存一直增加的原因(部分)
- 代碼中存在累加loss,但每步的loss沒加item()
import torch
import torch.nn as nn
from collections import defaultdict
if torch.cuda.is_available():
device = 'cuda'
else:
device = 'cpu'
model = nn.Linear(100, 400).to(device)
criterion = nn.L1Loss(reduction='mean').to(device)
optimizer = torch.optim.Adam(model.parameters(), lr=0.001)
train_loss = defaultdict(float)
eval_loss = defaultdict(float)
for i in range(10000):
model.train()
x = torch.rand(50, 100, device=device)
y_pred = model(x) # 50 * 400
y_tgt = torch.rand(50, 400, device=device)
loss = criterion(y_pred, y_tgt)
optimizer.zero_grad()
loss.backward()
optimizer.step()
# 會導(dǎo)致內(nèi)存一直增加,需改為train_loss['loss'] += loss.item()
train_loss['loss'] += loss
if i % 100 == 0:
train_loss = defaultdict(float)
model.eval()
x = torch.rand(50, 100, device=device)
y_pred = model(x) # 50 * 400
y_tgt = torch.rand(50, 400, device=device)
loss = criterion(y_pred, y_tgt)
# 會導(dǎo)致內(nèi)存一直增加,需改為eval_loss['loss'] += loss.item()
eval_loss['loss'] += loss
以上代碼會導(dǎo)致內(nèi)存占用越來越大,解決的方法是:train_l oss['loss'] += loss.item() 以及 eval_loss['loss'] += loss.item()。值得注意的是,要復(fù)現(xiàn)內(nèi)存越來越大的問題,模型中需要切換model.train() 和 model.eval(),train_loss以及eval_loss的作用是保存模型的平均誤差(這里是累積誤差),保存到tensorboard中。
文章來源地址http://www.zghlxwxcb.cn/news/detail-758453.html
文章來源:http://www.zghlxwxcb.cn/news/detail-758453.html
到了這里,關(guān)于解決pytorch訓(xùn)練的過程中內(nèi)存一直增加的問題的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!