当前位置: 首页 > news >正文

【动手学深度学习】(六)权重衰退

文章目录

  • 一、理论知识
  • 二、代码实现
    • 2.1从零开始实现
    • 2.2简洁实现
  • 【相关总结】

主要解决过拟合

一、理论知识

1、使用均方范数作为硬性限制(不常用)
通过限制参数值的选择范围来控制模型容量
在这里插入图片描述
通常不限制偏移b
小的在这里插入图片描述意味着更强的正则项
使用均方范数作为柔性限制
对于每个在这里插入图片描述都可以找到在这里插入图片描述使得之前的目标函数等价于下面的:
在这里插入图片描述

可以通过拉格朗日乘子来证明
超参数在这里插入图片描述控制了正则项的重要程度

在这里插入图片描述
在这里插入图片描述
参数更新法则
在这里插入图片描述
总结:

  • 权重衰退通过L2正则项使得模型参数不会过大,从而控制模型复杂度
  • 正则项权重是控制模型复杂度的超参数

二、代码实现

权重衰减是最广泛使用的正则化技术之一
1.首先,人工生成数据
在这里插入图片描述
我们选择标签是关于输入的线性函数。 标签同时被均值为0,标准差为0.01高斯噪声破坏。 为了使过拟合的效果更加明显,我们可以将问题的维数增加到, 并使用一个只包含20个样本的小训练集。

%matplotlib inline
import torch
from torch import nn
from d2l import torch as d2l
n_train, n_test, num_inputs, batch_size = 20, 100, 200, 5
true_w, true_b = torch.ones((num_inputs, 1)) * 0.01, 0.05
# print(torch.ones((num_inputs, 1)))
# print(true_w)
train_data = d2l.synthetic_data(true_w, true_b, n_train)
train_iter = d2l.load_array(train_data, batch_size)
# print(train_iter)
test_data = d2l.synthetic_data(true_w, true_b, n_test)
test_iter = d2l.load_array(test_data, batch_size, is_train=False)

2.1从零开始实现

只需将的平方惩罚添加到原始目标函数中。

def init_params():w = torch.normal(0, 1, size=(num_inputs, 1), requires_grad=True)b = torch.zeros(1, requires_grad=True)return [w,b]

定义L2范数惩罚

def l2_penalty(w):return torch.sum(w.pow(2)) / 2

定义训练代码

def train(lambd):w,b = init_params()net, loss = lambda X: d2l.linreg(X, w, b), d2l.squared_lossnum_epochs, lr = 100, 0.003animator = d2l.Animator(xlabel='epochs', ylabel='loss', yscale='log',xlim=[5,num_epochs], legend=['train', 'test'])for epoch in range(num_epochs):for X, y in train_iter:
#             增加了L2范数惩罚项
# 广播机制使l2_penalty(w)成为一个长度为torch_size的向量l = loss(net(X), y) + lambd * l2_penalty(w)l.sum().backward()d2l.sgd([w,b], lr, batch_size)if(epoch + 1) % 5 == 0:animator.add(epoch + 1, (d2l.evaluate_loss(net, train_iter, loss),d2l.evaluate_loss(net, test_iter, loss)))print('w的L2范数是:',torch.norm(w).item())

忽略正则化直接训练
用lambd = 0禁用权重衰减

train(lambd=0)

w的L2范数是: 13.702591896057129
在这里插入图片描述
使用权重衰退

train(lambd=3)

w的L2范数是: 0.36873573064804077
在这里插入图片描述

2.2简洁实现

在实例化优化器时直接通过weight_decay指定weight decay超参数

def train_concise(wd):net = nn.Sequential(nn.Linear(num_inputs, 1))for param in net.parameters():param.data.normal_()loss = nn.MSELoss(reduction='none')num_epochs, lr = 100, 0.003# 偏置参数没有衰减trainer = torch.optim.SGD([{"params":net[0].weight,'weight_decay': wd},{"params":net[0].bias}], lr=lr)animator = d2l.Animator(xlabel='epochs', ylabel='loss', yscale='log',xlim=[5, num_epochs], legend=['train', 'test'])for epoch in range(num_epochs):for X, y in train_iter:trainer.zero_grad()l = loss(net(X), y)l.mean().backward()trainer.step()if (epoch + 1) % 5 == 0:animator.add(epoch + 1,(d2l.evaluate_loss(net, train_iter, loss),d2l.evaluate_loss(net, test_iter, loss)))print('w的L2范数:', net[0].weight.norm().item())
train_concise(0)

w的L2范数: 12.619434356689453
在这里插入图片描述

train_concise(3)

w的L2范数: 0.3909929692745209
在这里插入图片描述

【相关总结】

相关文章:

【动手学深度学习】(六)权重衰退

文章目录 一、理论知识二、代码实现2.1从零开始实现2.2简洁实现 【相关总结】 主要解决过拟合 一、理论知识 1、使用均方范数作为硬性限制(不常用) 通过限制参数值的选择范围来控制模型容量 通常不限制偏移b 小的意味着更强的正则项 使用均方范数作为柔…...

动手学习深度学习-跟李沐学AI-自学笔记(3)

一、深度学习硬件-CPU和GPU 芯片:Intel or AMD 内存:DDR4 显卡:nVidia 芯片可以和GPU与内存通信 GPU不能和内存通信 1. CPU 能算出每一秒能运算的浮点运算数(大概0.15左右) 1.1 提升CPU利用率 1.1.1 提升缓存…...

3.2 Puppet 和 Chef 的比较与应用

Puppet 和 Chef 的比较与应用 文章目录 Puppet 和 Chef 的比较与应用Puppet 和 Chef 简介工作原理对比**模块化的重要性**: Puppet 和 Chef 简介 介绍 Puppet 和 Chef 这两个流行的配置管理工具的背景和用途。强调它们的共同目标:实现自动化的系统配置和…...

promise使用示例

下面是一个 Promise 使用示例,通过 Promise 实现异步操作的链式调用: const getUser (userId) > {return new Promise((resolve, reject) > {// 模拟异步请求setTimeout(() > {const users [{ id: 1, name: Alice },{ id: 2, name: Bob },{ …...

一起学docker系列之十四Dockerfile微服务实践

目录 1 前言2 创建微服务模块2.1 **创建项目模块**2.2 **编写业务代码** 3 编写 Dockerfile4 构建 Docker 镜像5 运行 Docker 容器6 测试微服务7 总结8 参考地址 1 前言 微服务架构已经成为现代软件开发中的一种重要方式。而 Docker 提供了一种轻量级、便携式的容器化解决方案…...

Qt Creator 11.0.3同时使用Qt6.5和Qt5.14.2

Qt Creator 11.0.3同时使用Qt6.5和Qt5.14.2 概要方法1.打开Qt Creator中的Kit,这里我直接附上几张截图,不同的版本打开位置可能有所不同,总之最终目的是要打开构建套件(Kit)2.可以看到构建套件里面有包含了“构建套件K…...

Python中字符串列表的相互转换详解

更多资料获取 📚 个人网站:ipengtao.com 在Python编程中,经常会遇到需要将字符串列表相互转换的情况。这涉及到将逗号分隔的字符串转换为列表,或者将列表中的元素连接成一个字符串。本文将深入讨论这些情景,并提供丰富…...

09、pytest多种调用方式

官方用例 # content of myivoke.py import sys import pytestclass MyPlugin:def pytest_sessionfinish(self):print("*** test run reporting finishing")if __name__ "__main__":sys.exit(pytest.main(["-qq"],plugins[MyPlugin()]))# conte…...

分布式锁常见实现方案

分布式锁常见实现方案 基于 Redis 实现分布式锁 如何基于 Redis 实现一个最简易的分布式锁? 不论是本地锁还是分布式锁,核心都在于“互斥”。 在 Redis 中, SETNX 命令是可以帮助我们实现互斥。SETNX 即 SET if Not eXists (对应 Java 中…...

26、pytest使用allure解读

官方实例 # content of pytest_quick_start_test.py import allurepytestmark [allure.epic("My first epic"), allure.feature("Quick start feature")]allure.id(1) allure.story("Simple story") allure.title("test_allure_simple_te…...

Uncle Maker: (Time)Stamping Out The Competition in Ethereum

目录 笔记后续的研究方向摘要引言贡献攻击的简要概述 Uncle Maker: (Time)Stamping Out The Competition in Ethereum CCS 2023 笔记 本文对以太坊 1 的共识机制进行了攻击,该机制允许矿工获得比诚实同行更高的挖矿奖励。这种名为“Uncle Maker”的攻击操纵区块时间…...

浅谈可重入与线程安全

文章目录 可重入与线程安全的关系 可重入 若一个程序或子程序可以“在任意时刻被中断然后操作系统调度执行另一段代码,这段代码又使用了该副程序不会出错”,则称其为可重入(reentrant 或 re-entrant)的。即当该副程序正在运作时&…...

深入理解TDD(测试驱动开发):提升代码质量的利器

在日常的软件开发工作中,我们常常会遇到这样的问题:如何在繁忙的项目进度中,保证我们的代码质量?如何在不断的迭代更新中,避免引入新的错误?对此,有一种有效的开发方式能帮助我们解决这些问题&a…...

pyqt5使用pyqtgraph实现动态热力图

pyqt5使用pyqtgraph实现动态热力图 一、效果图 二、流程 1、打开Designer创建一个UI界面 2、把UI转成py 3、创建一个main.py文件 4、在main文件中渲染画布、创建初始数据、画热力图、创建更新数据线程、绑定按钮触发事件三、UI界面 其中h_map.py代码如下: # -*- coding: ut…...

【android开发-16】android中文件和sharedpreferences数据存储详解

1,文件读写方式的数据存储 下面是一个简单的示例,演示如何在Android中使用内部存储来保存和读取文件: 保存文件: try { String data "这是要保存的数据"; FileOutputStream fos openFileOutput("myFile"…...

《当代家庭教育》期刊论文投稿发表简介

《当代家庭教育》杂志是家庭的参谋和助手,社会的桥梁和纽带,人生的伴侣和知音,事业的良师益友。 国家新闻出版总署批准的正规省级教育类G4期刊,知网、维普期刊网收录。安排基础教育相关稿件,适用于评职称时的论文发表…...

【操作教程】如何将外省医保转入广州市区(医保转移接续手续办理)?

登录(可以用微信扫码采用粤省事账号登录,没有粤省事小程序账号的可以自主申请很方便)广东政务服务网https://www.gdzwfw.gov.cn/ 这里不得不吐槽官网开发者,太拉胯了,居然有undefined,多刷新几次就好了&…...

【分布式系统学习】CAP原理详解

CAP原理详解 前言CAP一张图 一、概念1.1 关键词解读1.2 关于CAP(拆分解读)1.3 CAP原理精髓 二、CAP模拟场景举例理解三、CAP原理证明为什么不能同时满足(下面举例说明)3.1 必须满足分区容错性P下的处理方式3.2 不是必须满足分区容…...

【聚类】K-modes和K-prototypes——适合离散数据的聚类方法

应用场景: 假设一批数据,每一个样本中,有唯一标识(id)、品类(cate_id)、受众(users, 小孩、老人、中年等)等属性,希望从其中找出一些样本,使得这…...

Python-炸弹人【附完整源码】

炸弹人 炸弹人是童年的一款经典电子游戏,玩家控制一个类似"炸弹人"的角色,这个角色可以放置炸弹,并在指定的时间内引爆它们消灭敌人以达到目标,此游戏共设有两节关卡,代码如下: 运行效果&#x…...

CAPL字符串函数进阶:用strstr_off和substr_cpy_off高效解析CANdb++信号描述符

CAPL字符串函数进阶:用strstr_off和substr_cpy_off高效解析CANdb信号描述符 在汽车电子测试领域,CANdb数据库导出的信号描述信息往往包含大量冗余内容。面对"EngineSpeed:32|RPM[0,8000]"这类复杂字符串,传统字符串处理方法需要编写…...

云音乐歌词获取神器:一键下载网易云与QQ音乐高品质LRC歌词

云音乐歌词获取神器:一键下载网易云与QQ音乐高品质LRC歌词 【免费下载链接】163MusicLyrics 云音乐歌词获取处理工具【网易云、QQ音乐】 项目地址: https://gitcode.com/GitHub_Trending/16/163MusicLyrics 还在为寻找准确的音乐歌词而烦恼吗?这款…...

Zotero茉莉花插件:3大核心功能彻底解决中文文献管理难题

Zotero茉莉花插件:3大核心功能彻底解决中文文献管理难题 【免费下载链接】jasminum A Zotero add-on to retrive CNKI meta data. 一个简单的Zotero 插件,用于识别中文元数据 项目地址: https://gitcode.com/gh_mirrors/ja/jasminum 还在为Zotero…...

CTFd平台集成MCP协议:AI助手赋能CTF赛事智能运维实践

1. 项目概述:CTFd与MCP的融合实践最近在安全圈和CTF(Capture The Flag,夺旗赛)赛事运维圈子里,一个名为AaryaBhusal/ctfd-mcp的项目引起了我的注意。乍一看,这像是一个针对CTFd平台的插件或扩展&#xff0c…...

别再为FDC2214数据抖动发愁了!一个接地气的屏蔽线替代方案与差分测量实战

FDC2214抗干扰实战:差分测量与数据稳定化技巧 在电容式传感项目中,FDC2214作为一款高分辨率多通道电容数字转换器,常被用于纸张计数、液位检测等场景。然而实际应用中,工程师们最头疼的莫过于数据抖动问题——导线轻微移动、环境…...

如何在JavaScript中快速生成专业的PowerPoint演示文稿

如何在JavaScript中快速生成专业的PowerPoint演示文稿 【免费下载链接】PptxGenJS Build PowerPoint presentations with JavaScript. Works with Node, React, web browsers, and more. 项目地址: https://gitcode.com/gh_mirrors/pp/PptxGenJS PptxGenJS是一个功能强大…...

VoWiFi 核心网元与信令流程全解析

1. VoWiFi技术入门:从Wi-Fi打电话的秘密 第一次用手机连Wi-Fi打电话时,我盯着信号栏的"Wi-Fi Calling"标志愣了半天——这玩意儿居然真能绕过蜂窝网络?后来才知道,这就是VoWiFi(Voice over Wi-Fi&#xff0…...

SwiftHTTP文件上传完全指南:从基础到企业级应用

SwiftHTTP文件上传完全指南:从基础到企业级应用 【免费下载链接】SwiftHTTP Thin wrapper around NSURLSession in swift. Simplifies HTTP requests. 项目地址: https://gitcode.com/gh_mirrors/sw/SwiftHTTP 在iOS和macOS开发中,SwiftHTTP文件上…...

3步解锁PotPlayer字幕翻译:让外语视频不再难懂

3步解锁PotPlayer字幕翻译:让外语视频不再难懂 【免费下载链接】PotPlayer_Subtitle_Translate_Baidu PotPlayer 字幕在线翻译插件 - 百度平台 项目地址: https://gitcode.com/gh_mirrors/po/PotPlayer_Subtitle_Translate_Baidu 还在为看不懂的外语视频字幕…...

Honey Select 2终极汉化补丁:一站式解决语言障碍与功能扩展难题

Honey Select 2终极汉化补丁:一站式解决语言障碍与功能扩展难题 【免费下载链接】HS2-HF_Patch Automatically translate, uncensor and update HoneySelect2! 项目地址: https://gitcode.com/gh_mirrors/hs/HS2-HF_Patch 想象一下,你刚刚下载了备…...