赞
踩
前言:深度学习中的流程离不开数据准备,模型设计,误差计算和调参,因此,学会如何在进行模型的训练和验证是深度学习中笔必不可少的环节,本文就pytorch的模型训练和验证给出相应的代码,并简述一下我的调参经验
def train(train_loader, model, criterion, optimizer, epoch): # 切换模型为训练模式 model.train() train_loss = [] for i, (input, target) in enumerate(tqdm(train_loader)): if use_cuda: input = input.cuda() target = target.cuda() print("cuda is ok") c0, c1, c2, c3, c4 = model(input) else: print("cuda is not done") target = target.long() loss = criterion(c0, target[:, 0]) + \ criterion(c1, target[:, 1]) + \ criterion(c2, target[:, 2]) + \ criterion(c3, target[:, 3]) + \ criterion(c4, target[:, 4]) # loss /= 6 optimizer.zero_grad() loss.backward() optimizer.step() train_loss.append(loss.item()) return np.mean(train_loss)
def validate(val_loader, model, criterion): # 切换模型为预测模型 model.eval() val_loss = [] # 不记录模型梯度信息 with torch.no_grad(): for i, (input, target) in enumerate(tqdm(val_loader)): if use_cuda: input = input.cuda() target = target.cuda() c0, c1, c2, c3, c4 = model(input) target = target.long() loss = criterion(c0, target[:, 0]) + \ criterion(c1, target[:, 1]) + \ criterion(c2, target[:, 2]) + \ criterion(c3, target[:, 3]) + \ criterion(c4, target[:, 4]) # loss /= 6 val_loss.append(loss.item()) return np.mean(val_loss)
这里我在经过了非常久的训练后发现,在训练完后中断后,再次训练没有’调用’这个之前训练完的参数会从头开始训练,对于网络的优化的时间又要更久一些,因此我在这里就调用我之前训练后保存的模型,来减少悬链的这里我为了保存模型和调用学到的模型,在
model = SVHN_Model1()
state_dict=torch.load('bsbest.pt')
model.load_state_dict(state_dict)
在实例化模型之后调用之前学过,训练的时间就减少了
之前一直没有调参经验,还有算力不够,基于这次模型的调参我是进行这几个方面的调试
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。