权重衰减的简单示例代码,采用L2正则项

简介: 权重衰减的简单示例代码,采用L2正则项

创造数据

x的数据维度为(200,100)

w的数据维度为(100,1)

利用data_iter获得批次数据

import torch
from torch.utils import data
import torch.nn as nn
n_examples=200
n_features=100
true_w=torch.randn(100,1)
true_b=torch.tensor(0.54)
x_=torch.randn(200,100)
y_=x_@true_w+true_b
y_+=torch.normal(0,0.01,y_.shape)
def data_iter(x,y,batch_size):
    n_example=len(x)
    indices=torch.randperm(n_example)
    for i in range(0,n_example,batch_size):
        batch_indices=indices[i:min(i+batch_size,n_example)]
        yield x[batch_indices],y[batch_indices]

只对参数w进行权重衰减,b不需要

方式一

在优化器的参数中,利用字典的方式指名对待不同的参数实行不同的执行原则

wd=3
net=nn.Linear(100,1)
loss_function=nn.MSELoss()
optimizer=torch.optim.SGD([{'params':net.weight,
                           'weight_decay':wd},
                          {'params':net.bias}],lr=0.03)
epochs=3
for epoch in range(epochs):
    net.train()
    losses=0.0
    for x,y in data_iter(x_,y_,batch_size=20):
        y_hat=net(x)
        loss=loss_function(y_hat,y)
        optimizer.zero_grad()
        loss.backward()
        optimizer.step()
        losses+=loss.item()
    print(losses)

方式二

方式二用了两个优化器,第一个掌管参数w的优化,第二个负责偏置b的优化,但是这样较为麻烦,需要两次梯度清0,且进行两次梯度更新

wd=3
net=nn.Linear(100,1)
loss_function=nn.MSELoss()
optimizer_w=torch.optim.SGD([net.weight],lr=0.03,weight_decay=wd)
optimizer_b=torch.optim.SGD([net.bias],lr=0.03)
epochs=3
for epoch in range(epochs):
    net.train()
    losses=0.0
    for x,y in data_iter(x_,y_,batch_size=20):
        y_hat=net(x)
        loss=loss_function(y_hat,y)
        optimizer_w.zero_grad()
        optimizer_b.zero_grad()
        loss.backward()
        optimizer_w.step()
        optimizer_b.step()
        losses+=loss.item()
    print(losses)


目录
相关文章
|
1月前
|
前端开发 JavaScript UED
权重计算在实际开发中的应用
【10月更文挑战第28天】CSS权重计算在实际开发中的应用非常广泛,它贯穿于页面布局、组件开发、响应式设计以及JavaScript与CSS的交互等各个方面。合理地运用权重计算规则,能够更好地控制样式的应用和优先级,提高页面的可维护性和用户体验。
|
5月前
|
机器学习/深度学习 计算机视觉 Python
`GridSearchCV` 是一种穷举搜索方法,它会对指定的参数网格中的每一个参数组合进行交叉验证,并返回最优的参数组合。
`GridSearchCV` 是一种穷举搜索方法,它会对指定的参数网格中的每一个参数组合进行交叉验证,并返回最优的参数组合。
|
机器学习/深度学习 算法 计算机视觉
线性回归 正则项(惩罚项)原理、正则项的分类与Python代码的实现
线性回归 正则项(惩罚项)原理、正则项的分类与Python代码的实现
|
7月前
|
机器学习/深度学习 TensorFlow 定位技术
神经网络学习率指数衰减ExponentialDecay策略的参数含义与使用方法详解
神经网络学习率指数衰减ExponentialDecay策略的参数含义与使用方法详解
130 1
|
存储 算法 PyTorch
pytorch 给定概率分布的张量,如何利用这个概率进行重复\不重复采样?
在 PyTorch 中,可以使用 torch.distributions.Categorical 来基于给定的概率分布进行采样。
976 0
|
机器学习/深度学习 PyTorch 算法框架/工具
base model初始化large model,造成的参数矩阵对不上权重不匹配问题+修改预训练权重形状和上采样
base model初始化large model,造成的参数矩阵对不上权重不匹配问题+修改预训练权重形状和上采样
234 0
|
机器学习/深度学习 并行计算 图计算
超参数设定及训练技巧
超参数设定及训练技巧
363 0
|
存储 算法
贪心算法(几种常规样例)
贪心算法(几种常规样例)
|
算法 搜索推荐 流计算
基于上下文的推荐 -- 包括时间衰减算法和位置推荐算法(代码实现)
基于上下文的推荐 -- 包括时间衰减算法和位置推荐算法(代码实现)
329 0
|
大数据 iOS开发 Python
Python 按分类权重(区间)随机获取分类样本
Python 按分类权重(区间)随机获取分类样本
88 0