关于模型分成多部分时的torch.optim优化设置

PyTorch优化器设置陷阱

上次写代码时,backbone encoder是用了别人代码,另外又添加了多分支多layer作为task decoder。

但是开始犯了个很致命的错误,在pytorch设置优化器时,仅使用了:

optimizer = torch.optim.Adam(model.parameters(), lr=args.lr, weight_decay=args.weight_decay)

这样实际上只优化了部分模型,应该这样设置:

optimizer = torch.optim
input_size = input_features.shape[1] hidden_size = 128 #该变量含义:隐藏层的神经元个数 output_size = 1 #该变量含义:输出特征的维度 batch_size = 16 #该变量含义:批处理的大小,每次模型权重更新所使用的样本数。 #通过将训练数据分成小批次,可以实现并行计算,提高训练效率。 #较大的 batch size 可能会加速训练,但可能需要更内存和计算资源。 #较小的 batch size 可能更适合小型数据集或资源受限的情况。常见的 batch size 值通常是 32、64、128 等。 my_nn = torch.nn.Sequential( #该代码含义:模块按照构造函数中传递的顺序添加到模块中。 torch.nn.Linear(input_size, hidden_size), torch.nn.Sigmoid(), torch.nn.Linear(hidden_size, output_size), ) cost = torch.nn.MSELoss(reduction='mean') #该代码含义:PyTorch nn.MSELoss() 是均方误差损失函数,这里的含义是定义均方误差损失函数,计算预测值和真实值的平方差平均值 optimizer = torch.optim.Adam(my_nn.parameters(), lr = 0.001) #该代码含义:定义一个Adam优化,用于更新网络参数,学习率为0.001 #torch.optim是一个实现了优化算法的包,Adam本质上是带有动量项的RMSprop,它利用梯度的一阶矩估计和二阶矩估计动态调整每个参数的学习率。 #Adam的优点主要在于经过偏置校正后,每一次迭代学习率都有个确定范围,使得参数比较平稳。 # 训练网络 losses = [] for i in range(10000): batch_loss = [] # MINI-Batch方法来进行训练 for start in range(0, len(input_features), batch_size): end = start + batch_size if start + batch_size < len(input_features) else len(input_features) #该代码含义:三元条件表达式,用于确定每个批次数据的结束索引。 xx = torch.tensor(input_features[start:end], dtype = torch.float, requires_grad = True) #该代码含义:是从 input_features 中选取从索引 start 到 end - 1 的元素,将其转换为 torch.Tensor 类型的对象 xx,同指定数据类型为 torch.float,并设置该张量需要进行梯度计算。 yy = torch.tensor(labels[start:end], dtype = torch.float, requires_grad = True) #
最新发布
11-10
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值