pytorch学习小总结(一)

pytorch学习小总结(一)

模型保存以及加载
保存模型有两种方式:
1、保存整个模型

def save_checkpoint(path, model, optimizer):
	torch.save(model, path)

对应的加载代码为:

cnn_model=torch.load(path)

2、只保存网络以及优化器的参数等数据

def save_checkpoint(path, model, optimizer):
    state = {
        'model': model.state_dict(),
        'optimizer': optimizer.state_dict()
    }
    torch.save(state, path)

对应的加载代码为:

def load_checkpoint(path,model,optimizer):
    model_CKPT = torch.load('model.pth')
    model.load_state_dict(model_CKPT['model'])
    optimizer.load_state_dict(model_CKPT['optimizer'])
    model.eval()

第二种方法只保存的网络的参数,所以在加载模型之前还需要先定义一个model再load.

一般来说大家都更喜欢用第二种方法,因为第二种方法我们可以保存除了网络参数外的其他数据比如优化器的参数、loss等数据。如果我们修改了部分的网络,那么我们就无法通过第一种方式来实现加载模型,不过我们可以在使用第二种方法加载模型时可以实现对参数的过滤,所以第二种方法比第一种方法要更好一些。

model.train()与model.eval()用法区别
在看代码写代码的过程中往往会发现在训练前会出现

model.train()

在测试前会出现

model.eval()

这两行代码的功能是什么呢?
model.train()保证在训练过程中BN层使用每一批的均值和方差,Dropout层正常工作即训练过程中冻结部分神经元防止过拟合。

model.eval()保证测试过程中BN层使用所有的数据的均值和方法。Dropout层不会冻结部分神经元,所有的神经元都参与工作。个人理解就是为了使训练和测试时的BN层和Dropout层正常发挥作用。(不知道如果网络模型中没有BN层和Dropout层的话需不需要使用这两条代码,个人推测是不需要,有懂的大佬可以评论区回复一下)

torch和numpy类型互相转换
需要注意的是numpy转化为torch或者torch转换为numpy后二者共享内存但不共享地址。也就是一个变化另一个跟着变化但二者的地址不同。

import torch
a_torch=torch.ones(5)
a_numpy=a_torch.numpy()
a_torch=torch.from_numpy(a_numpy)

(本文主要是记录一位研0菜鸡选手在学习pytorch过程中遇到的一些有价值的问题,如果有问题希望各位大佬指正)

  • 4
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值