pytorch 笔记:validation ,model.eval V.S torch.no_grad

Posted UQI-LIUWJ

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了pytorch 笔记:validation ,model.eval V.S torch.no_grad相关的知识,希望对你有一定的参考价值。

1 validation的一般框架

模型为model,优化器为optimizer

min_val_loss = np.inf
for epoch in range(1, epochs + 1):
    
    ############################训练部分开始#############################
    model.train()
    train_losses = []
    for (batch_x, batch_y) in train_loader:

        output = model(batch_x) 
        loss = criterion(output, batch_y) 

        optimizer.zero_grad()
        loss.backward() 
        optimizer.step()
        #pytorch 老三样

    ############################训练部分结束#############################


    ############################验证部分开始#############################
    model.eval()
    for (batch_x, batch_y) in val_loader:

        with torch.no_grad():
            output = model(batch_x) 
            loss = criterion(output, batch_y)

        val_losses.append(loss.item())
    val_loss = np.mean(val_losses)

    if val_loss < min_val_loss:
        min_val_loss = val_loss
        torch.save(model.state_dict(), save_path)
        #保存最优模型
    ############################验证部分结束#############################

test的时候,就可以加载这个最佳模型对应的参数(model.load_state_dict),进行测试

2 model.eval() V,S with torch.no_grad()

2.1 相同点

在PyTorch中进行validation时,使用他们均可切换到测试模式。

eg,对于dropout层和batchnorm层:

  • 在train模式下,dropout网络层会按照设定的参数p设置保留激活单元的概率(保留概率=p); batchnorm层会继续计算数据的mean和var等参数并更新。
  • 在val模式下,dropout层会让所有的激活单元都通过,而batchnorm层会停止计算和更新mean和var,直接使用在训练阶段已经学出的mean和var值。

2.2 不同点

  • model.eval()仍然会涉及gradient的计算和存储,与training模式一样,只是不进行反向传播。
  • **with torch.zero_grad()**则停止autograd模块的工作,也就是停止gradient计算,以起到加速和节省显存的作用,从而节省了GPU算力和显存,但是并不会影响dropout和batchnorm层的行为。(这俩还是train模式下的样子)

  • ——>二者搭配使用

以上是关于pytorch 笔记:validation ,model.eval V.S torch.no_grad的主要内容,如果未能解决你的问题,请参考以下文章

PyTorch Lightning 将张量移动到 validation_epoch_end 中的正确设备

pix2pix网络,Pytorch代码中, valid 和 fake 两个参数表示啥

jquery.validate 一些技巧

任何测试 Pytorch 安装的脚本

PyTorch学习笔记:PyTorch生态简介

PyTorch学习笔记:PyTorch进阶训练技巧