torch.load、torch.save、torch.optim.Adam的用法

目录

一、保存模型-torch.save()

1.只保存model的权重

2.保存多项内容

二、加载模型-torch.load()

1.从本地模型中读取数据

2.加载上一步读取的数据 load_state_dict()

三、torch.optim.Adam

1.optim.Adam()参数说明


一、保存模型-torch.save()

torch.save(parameters, addr)

parameters: 是待保存的权重参数,这个可以是网络的权重参数,也可以是包含多类数据的dict

addr: 是存放数据的地址,相对地址,包括文件全名;如:addr = 'save/model.h5'

1.只保存model的权重

名称.state_dict() 函数——该函数用于获取 网络模型优化器 的权重参数。

示例:

# policy_net 是训练好、待保存的网络
torch.save(policy_net.state_dict(), 'D:/project/model.h5')

2.保存多项内容

以dict变量的形式同时保存多项内容,具体步骤如下:

(1)定义dict变量

dict变量中可以包含多种数据,例如:网络权重、优化器权重、学习率、epsilon、以及其他自定义的参数

(2)调用torch.save()保存变量

torch.save(已定义的dict变量,拟存放地址)

完。

示例:

model = {
    'net':policy_net.state_dict(),  # 网络权重
    'opt':optimizer.state_dict(),   # 优化器参数
    'eps':epsilon,                  # 当前epsilon-自定义
    'tsp':total_step,               # 当前运行的步数-自定义
}
savedir = 'History/mode_save.h5'    # 设定保存模型的地址及文件名
torch.save(model,savedir)           # 执行保存

二、加载模型-torch.load()

1.从本地模型中读取数据

checkpoints = torch.load(addr)

其中:

addr              是本文模型的存放地址,包括完整的文件名;

checkpoints 是读取出的数据;

2.加载上一步读取的数据 load_state_dict()

读取出的数据就是上一步定义的checkpoints。

(1)当checkpoints 中只包含网络权重时,可以直接加载,如下:

savedir = 'History/mode_save.h5'         # 设定保存模型的地址及文件名
checkpoints = torch.load(savedir)        # 从本地读取
policy_net.load_state_dict(checkpoint)   # 加载

(2)当checkpoints 中包含多项数据时,根据dict变量的规则,取出数据:

savedir = 'History/mode_save.h5'               # 设定保存模型的地址及文件名
checkpoints = torch.load(savedir)              # 从本地读取

policy_net.load_state_dict(checkpoint['net'])  # 加载网络权重
optimizer.load_state_dict(checkpoint['opt'])   # 加载优化器权重
epsilon = checkpoint['eps']                    # 取出epsilon值
total_step= checkpoint['tsp']                  # 取出total_step值

三、torch.optim.Adam

1.optim.Adam()参数说明

optim.Adam(params, lr=0.001, betas=(0.9, 0.999), eps=1e-08, weight_decay=0)

params:            是待优化的参数,一般为网络的权重;

lr:                   是学习率,可不指定,默认值是0.001;

betas:            用于计算梯度以及梯度平方的运行平均值的系数,可不指定,默认值(0.9, 0.999);

eps:                  为了增加数值计算的稳定性而加到分母里的项,可不指定,默认值1e-08;

 weight_decay: 权重衰减L2惩罚,可不指定,默认值 0;

2.优化器建立后修改学习率

优化器是一个列表,学习率存放在{list:0}内,{list:0}是一个dict变量,学习率存放在'lr'内;

示例:

# optimizer是定义好的优化器
optimizer.param_groups[0]['lr'] = 0.999

# 说明:
# optimizer.param_groups是list,优化器的参数全在该项中;
# optimizer.param_groups[0]是list的第一项,该项是dict变量;
# ['lr']是dict变量中存放学习率的编号;

torch.optim.Adamtorch.optim.SGD 是 PyTorch 中两种不同的优化器,它们在优化算法和使用方式上存在一些区别。 1. 优化算法: - Adam(Adaptive Moment Estimation)是一种基于梯度的优化算法,它结合了 AdaGrad 和 RMSProp 的优点。它使用动量和自适应学习率来更新参数,能够更快地收敛,并且对于稀疏梯度和噪声较大的问题有较好的表现。 - SGD(Stochastic Gradient Descent)是一种基本的随机梯度下降算法,每次更新参数时仅使用一个样本或一小批样本的梯度。它通过迭代地更新参数来最小化损失函数,适用于大规模数据集和较简单的模型。 2. 学习率调整: - Adam 使用自适应学习率,每个参数都有自己的学习率,根据梯度的历史信息来自动调整学习率。 - SGD 需要手动设置全局学习率,并且可以通过学习率衰减策略进行调整,如按照固定时间表衰减或根据验证集的性能进行衰减。 3. 参数更新方式: - Adam 通过存储每个参数的历史梯度平方的指数衰减平均来计算自适应学习率,使用动量项来加速参数更新。 - SGD 使用每个参数的梯度和学习率来更新参数,可以选择添加动量项来加速收敛。 选择 Adam 还是 SGD 取决于问题的性质和数据集的规模。在大多数情况下,Adam 通常能够更快地收敛,特别是对于复杂的模型和大规模数据集。然而,在某些情况下,SGD 可能会更好地适应局部最优解,并且具有更低的内存使用量。 需要根据具体问题和实验结果来选择合适的优化器。可以尝试不同的优化器并根据模型性能和训练速度进行比较,以确定最佳选择。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值