练习4-权重衰减(李沐函数简要解析)

环境:练习1的环境

代码详解

0.导入库

import torch
from torch import nn
from d2l import torch as d2l

1.初始化数据
这里初始化出train_iter test_iter 可以查一下之前的获取Fashion数据集后的数据格式与此对应

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
train_data = d2l.synthetic_data(true_w, true_b, n_train)
train_iter = d2l.load_array(train_data, batch_size)
test_data = d2l.synthetic_data(true_w, true_b, n_test)
test_iter = d2l.load_array(test_data, batch_size, is_train=False)

2.简洁实现

这补充个多层的写法
optimizer = torch.optim.SGD([
{“params”: net[0].weight, “weight_decay”: wd},
{“params”: net[0].bias},
{“params”: net[1].weight, “weight_decay”: wd},
{“params”: net[1].bias},
{“params”: net[2].weight, “weight_decay”: wd},
{“params”: net[2].bias}
], lr=lr)

def train_concise(wd):#定义了一层线性层模型,输入特征个数是num_inputs(怎么来的?) 输出个数是1net=nn.Sequential(nn.Linear(num_inputs,1)) for param in net.parameters():#初始化w,b 按照(均值为0,方差为1)来初始化,b会被随机初始化为较小的值param.data.normal_()#定义损失函数loss=nn.MSELoss(reduction='none')num_epochs,lr=100,0.03#定义优化器(这里开始设置限制w^2对于损失函数的影响大小了 -> wd)#这段代码包含了神经网络第一层的所有参数,并且为这些参数应用了不同的设置或限制#因为这个模型只有一层trainer=torch.optim.SGD([{"params":net[0].weight,'weight_decay': wd},{"params":net[0].bias}], lr=lr)#x轴是epochs y轴是loss #x轴设置范围从第五轮到 最后一轮  y轴设置对数标度 对数标度:对原始数据进行对数变换后显示的#legend=['train', 'test']: 这为图表设置了图例,标识两条曲线分别代表训练集("train")和测试集("test")的损失值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增加数据点 epoch,训练平均损失,测试平均损失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)

重点理解

1.权重衰减是怎么做到的:
Loss=Loss+lamb/2 * (w^2)
当w越大Loss越大,Loss越大,越要减小,也同时减小w
在这里插入图片描述

2.原理:
多个函数下如何算最值

3.代码实现:
trainer=torch.optim.SGD([
{“params”:net[0].weight,‘weight_decay’: wd},
{“params”:net[0].bias}], lr=lr)

参考视频:
https://www.bilibili.com/video/BV1Z44y147xA/?spm_id_from=333.999.0.0&vd_source=302f06b1d8c88e3138547635c3f4de52

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/758240.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

三款.NET代码混淆工具比较分析:ConfuserEx、Obfuscar和Ipa Guard

随着.NET应用程序的广泛应用,保护知识产权和防止逆向工程的需求逐渐增长。本文将详细介绍三款知名的.NET代码混淆工具:ConfuserEx、Obfuscar和Ipa Guard,帮助读者全面了解其功能特点和应用场景。 一、ConfuserEx ConfuserEx是一个.NET代码混…

文件太大无法拷贝到u盘怎么办?可能是这个隐藏原因~

有时候我们新买的U盘,明明有64G的存储空间,怎么一个4.5G的视频想保存到U盘里会提示“文件太大”无法保存呢? 常见的U盘格式有FAT、FAT32、NTFS等,其中FAT32不支持存储单个文件体积大于4G的文件。下面教大家如何对U盘格式进行检测呢…

二开飞机机器人群发,实现自动给多个频道发送消息

频道1 频道2 二开代码部分: const CChatIdListprocess.env.CHANNEL_CHAT_ID_LIST; var channelChatIdArray CChatIdList.split(,);channelChatIdArray.forEach(function(item) {console.log(item); // 这里可以替换为您需要对数组中每个值进行的操作bot.sendM…

个人开发App成功上架手机应用市场的关键步骤

目录 1. 苹果审核和APP备案 2. APP上架操作步骤 3. 审核和发布 4. 上线工作 总结 参考资料 在当前移动应用市场竞争激烈的背景下,个人开发App如何成功上架成为开发者们必须面对的重要任务。本文将重点介绍自建App上架至手机应用市场的流程,包括苹果…

String类型详解

1. Java为何要创造String类 在C语言中,是没有String这个类型的,通常使用字符数组中存放一个个字符,再加上最后一个\0来表示/存放一个字符串.也可以使用一个字符指针指向字符串的首元素,直到遇到\0停止,再加上C语言头文件string.h中封装的函数,对于字符串的操作已经够用了. Java…

学完Python的7大就业方向,哪个赚钱最多?

“ 我想学Python,但是学完Python后都能干啥 ?” “ 现在学Python,哪个方向最简单?哪个方向最吃香 ?” “ …… ” 相信不少Python的初学者,都会遇到上面的这些问题。大家都知道Python很吃香,薪资…

进程管理与计划任务管理

进程管理 1、查看进程 静态 ps -auxps -elf 动态 top pgrep 查看特定条件的进程 pgrep -l “log” pgrep -l "ssh"pgrep -l -U redhat pstree 查看进程树 pstree -aup 所有用户、进程id\详细信息pstree -ap redhat 查看redhat用户的进程 任务调…

如何实现在固定位置的鼠标连点

鼠大侠的鼠标连点功能是免费的 浏览器搜索下载鼠大侠,指定连点间隔和启动快捷键 点击设置,指定点击位置

Linux 常用操作命令大全

目录 一、命令大集合 1.1 whereis 1.2 which 1.3 sudo 1.4 grep 1.5 free 1.6 top 动态显示进程的状态 1.7 ps 静态显示进程信息 1.8 df 1.9 iostat 看IO性能状态 1.10 yum安装插件命令 1.11 rpm 1.12 scp远程拷贝 1.13 uname 二、linux网络命令 2.1 centos7 防火…

SpringCloudAlibaba Nacos配置及应用

Nacos搭建及配置 nacos本机服务搭建 windows上搭建单机nacos: Releases alibaba/nacos GitHub 下载安装包 下载本地,解压,直接运行(保证安装包的绝度路径只有英文字符,有中文会导致运行失败)&#xff…

开发语言详解(python、java、Go(Golong)。。。。)

是语言决定行业,还是行业决定语言,说不清,只是觉得,当你做这一行的时候,如果你还有精力感兴趣的话,可以再做些了解,一下是自己个人见解以及官网做的整合。希望对大家有用。 目录 Python 概念&…

MySQL 多表查询与事务的操作

一,多表联查 有些数据我们已经拆分成多个表,他们之间通过外键进行连接.当我们要查询两个表的数据,各取其中的一列或者多列. 这时候就需要使用多表联查. 数据准备: # 创建部门表 create table dept(id int primary key auto_increment,name varchar(20) ) insert into dept (n…

DevEco Studio 项目创建

安装DevEco Studio后开始使用,双击桌面DevEco Studio 快捷方式弹出界面: 选择Application —> Empty Ability,点击Next 项目配置 Project name:工程的名称,可以自定义,由大小写字母、数字和下划线组成。…

vscode搜索总是搜到修改记录文件如何处理

如图每次搜索出来的结果总是有好多编辑记录中的文件,给自己找文件及提交代码时带来很大困扰,每次都得删特别麻烦。 解决办法: 如上图在插件里找到 local history 点击 ”禁用“ 即可。以后再编辑代码就不会产生修改记录文件了。 如果直接搜索…

深入浅出前端本地储存

引言 2021 年,如果你的前端应用,需要在浏览器上保存数据,有三个主流方案: CookieWeb Storage (LocalStorage)IndexedDB 这些方案就是如今应用最广、浏览器兼容性最高的三种前端储存方案 今天这篇文章就聊一聊这三种方案的历史…

前端Prettier 插件的使用配置(详细)

各个参数代表的意思:printWidth:每行代码的最大长度限制。 tabWidth:选项用于控制制表符的宽度。 useTabs:指定是否使用制表符代替空格。 semi:指定是否在语句的末尾添加分号。 singleQuote:指定是否使用单引号或双引号…

【Java程序员福音】每个 Java 开发人员都应该知道的 10 个基本工具

我试图在代码库,项目规划,构建和部署,测试自动化和基础设施自动化中包含工具。作为负责端到端管理项目的高级 Java 开发人员,这些工具将帮助您更有效地完成工作。 让我们看到 Java 程序员的一些基本工具 1、Git 我认为 Git 和 Github 应该是所有 Java 程序员应该学习和掌…

②免费AI软件开发工具测评:通义灵码 VS 码上飞

前言 我又双叒叕来测评了!上次给大家带来的是iFlyCode和CodeFlying两款产品的测评,受到了大家的一致好评~ 今天咱就继续来聊聊,这次我们选的的对象是通义灵码和码上飞,从名字上也能看到出来这两款产品一定是跟软件开发有关系的&…

Zerotier 异地组网方案初探

前言 我之前想要异地组网的话,一般都采用内网穿透的方法,但是这个内网穿透有弊端就是都是要通过公网服务器转发流量,对于大流量的传输就比较不方便,我发现了Zerotier 这个工具非常的好用,是基于p2p的 这是一个类似于…