第四章mlp

news2025/1/11 0:02:03

生成数据集

读取数据集

data.TensorDataset(*data_arrays)

mlp训练

loss = nn.CrossEntropyLoss(reduction='none')

在这里插入图片描述

我要掌握所有人脖颈上的绳

权重衰减

简单概述就是在标准意义的loss函数(label值和计算值的差别)中再加上一个 惩罚项,为什么要加,
有种loss函数,或许我说的是SVM,在进行分类任务时,分类结果,正确类别要比别的类别 概率高,且要高过一个阈值,🔺theta,就算这个类别贡献的loss为0

这样一来,因为我们要训练优化的是我们的权重矩阵和偏置向量嘛,权重矩阵 的可能性就会很多,权重矩阵乘上一个标量照样可以使得 loss值一样小,改为0的项还是为0
可能会导致,过拟合(参数复杂,数据过少),于是 权重衰减,降低模型的复杂度,于是给loss函数加上一项,权重举证的L2范数正则化

暂退法

以p的概率将隐藏单元置为零时

不能过度依赖于h1, . . . , h5的任何一个元素

assert 0 <= dropout <= 1 断言语句
详细介绍assert model[i].weight_g is not None用法

assert(断言),判断assert后的表达式是否为true,若为true就继续执行下面的代码,若为false,则触发异常

在给定的代码中,assert model[i].weight_g is not None 是一个断言语句,用于在代码中进行条件检查。它用于确保模型 model 的第 i 个子模块具有名为 “weight_g” 的属性,并且该属性的值不为 None。

断言语句在程序中用于检查条件是否满足,如果条件为真,则程序继续执行;如果条件为假,则会引发 AssertionError 异常,并中断程序的执行。

在给定的断言语句中,model[i] 表示模型 model 的第 i 个子模块。model[i].weight_g 表示第 i 个子模块的属性 “weight_g”。通过检查 is not None,断言语句确保该属性的值不为 None。

这种用法通常在开发和调试过程中使用,用于验证程序的假设和前提条件。在深度学习中,断言语句常用于检查模型的属性、参数或状态,以确保模型的正确性和一致性。

下面是一个示例,演示了断言语句的使用:

class MyClass:
    def __init__(self, value):
        self.value = value

my_obj = MyClass(10)

assert my_obj.value > 0
print("Assertion passed")  # 输出: Assertion passed

assert my_obj.invalid_attr is not None
print("Assertion passed")  # 不会执行,引发 AssertionError


需要注意的是,断言语句在生产环境中通常是关闭的,因为它们会对程序的性能产生一定的影响。因此,断言通常在开发、调试和测试阶段使用,用于验证程序的正确性和健壮性。
来自此处

1.assert断言函数

assert断言是声明其布尔值必须为真的判定,如果发生异常就说明表达示为假。用来测试表示式,其返回值为假,就会触发异常。

assert os.path.exists(root), "dataset root: {} does not exist.".format(root)
#os.path.exists(root)为false是执行逗号后语句
assert os.path.exists(json_path), json_path + " does not exist."

原文链接:https://blog.csdn.net/lxh248866/article/details/121458354

mask = (torch.rand(X.shape) > dropout).float()
def dropout_layer(X, dropout):
assert 0 <= dropout <= 1
# 在本情况中,所有元素都被丢弃
if dropout == 1:
return torch.zeros_like(X)
# 在本情况中,所有元素都被保留
if dropout == 0:
return X
mask = (torch.rand(X.shape) > dropout).float()
return mask * X / (1.0 - dropout)

mask可以理解成一个布尔型的张量,每一个值表示X对应下标的值是否要dropout

多敲了个n,randn是正态分布(均值为0方差为1的高斯分布),rand均匀分布
应该是rand吧?randn会出现小于0的值
前面说的应该有问题,randn是输出的是标准正态分布,rand才是输出的0到1的均匀分布

  1. 之后用该0 1矩阵乘以原矩阵,形状一致对应位置元素相乘,乘1保持不变,乘0就变0,相当于数据被dropout了,个人理解是这个过程
    randn是mean=0,std=1的正态分布

大于dropout就是留下,小于等于dropout就是丢弃,所以丢弃的概率就是dropout

nn.Linear(输入输出neurals两个参数?)
self.lin1 = nn.Linear(num_inputs, num_hiddens1)
self.lin2 = nn.Linear(num_hiddens1, num_hiddens2)
self.lin3 = nn.Linear(num_hiddens2, num_outputs)
self.relu = nn.ReLU()
深度学习框架的高级API

nn.Sequential 把各层封装起来的容器? 记得是lists of layers

net = nn.Sequential(nn.Flatten(),
nn.Linear(784, 256),
nn.ReLU(),
# 在第一个全连接层之后添加一个dropout层
nn.Dropout(dropout1),
nn.Linear(256, 256),
nn.ReLU(),
# 在第二个全连接层之后添加一个dropout层
nn.Dropout(dropout2),
nn.Linear(256, 10))
梯度,导数是对角矩阵?

输出层为向量,其中一个标量只对应一列权重,对其他输出标量的权重列导数为零,所以是对角矩阵

假设Wh输出一个向量, Relu相当于把向量中大于0的保留, 小于0的变成零。 也就是一个对角矩阵(除了对角线全是0)乘以Wh的效果。这里求导用了链式法则。

在这里插入图片描述
pandas真好,还能把列的名称告诉你哈哈哈哈

train_data = pd.read_csv(d2l.download('kaggle_house_train', cache_dir='./pytorch_data'))
all_features = pd.concat((train_data.iloc[:, 1:-1], test_data.iloc[:, 1:]))

【技巧1】把认为没关系的特征给去掉!
这里的traindata不是干掉了第一列和最后一列吗
train提取除了第1列(即代码的第0列)和最后一列之外的数据
列表的1:-1表示从第二个元素开始到倒数第二个元素结束,即不包括第一个和最后一个元素

因为后面那个本身就缺少价格特征,所以少了一列,而前面那个加了-1,但是不会取-1这一列,所以这样这俩列数就相等了

train比test多最后一列标号,所以多删掉最后一列
train_data的最后一列是label,就是房价,不是训练用的特征,所以要拿掉;但是在test_data里面没有

这里为什么要把train_data和test_data合并呢?

特征缩放:使得特征的值在[-1,1]之间。好处是梯度下降的快一点

pandas的object是python里的str,不是str文本就是数值

numeric_features = all_features.dtypes[all_features.dtypes != 'object'].index

因为是比赛,可以得到测试集,就把测试集和训练集一起算方差

归一化其实不应该用训练和测试集的期望和方差,,这里只不过把官方给的训练和测试集统一变成训练集了

all_features[numeric_features] = all_features[numeric_features].apply(
lambda x: (x - x.mean()) / (x.std()))

把均值变成0方差变成1

这个地方其实是要注意的,因为normalization应该统一用train set的均值和方差

为什么不在算均值之前先填充na值呢

先归一化再填补0不会让数据产生误差(从均值和方差的公式中可以得出),反而可以减少运算量
pandas算均值时会自动忽略值为NaN的项,不能先用0填充,否则求均值的时候就不是原先数据的均值了

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

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

相关文章

Java实现深拷贝的方式

文章目录 1. 实现 Cloneable 接口并重写 clone() 方法2. 使用序列化和反序列化实现深拷贝3. 第三方工具(1) Apache Commons BeanUtils 库(2) Apache Commons Lang 库(3) Spring Framework(4) Kryo 序列化库(5) FST 序列化库 1. 实现 Cloneable 接口并重写 clone() 方法 在 Jav…

科研绘图与学术图表绘制:从入门到精通

&#x1f482; 个人网站:【工具大全】【游戏大全】【神级源码资源网】&#x1f91f; 前端学习课程&#xff1a;&#x1f449;【28个案例趣学前端】【400个JS面试题】&#x1f485; 寻找学习交流、摸鱼划水的小伙伴&#xff0c;请点击【摸鱼学习交流群】 一、入门篇 1.1 软件介…

云原生Kubernetes系列 | 通过容器互联搭建wordpress博客系统

云原生Kubernetes系列 | 通过容器互联搭建wordpress博客系统 通过容器互联搭建一个wordpress博客系统。wordpress系统是需要连接到数据库上的&#xff0c;所以wordpress和mysql的镜像都是需要的。wordpress在创建过程中需要指定一些参数。创建mysql容器时需要把mysql的数据保存…

(论文阅读31/100)Stacked hourglass networks for human pose estimation

31.文献阅读笔记 简介 题目 Stacked hourglass networks for human pose estimation 作者 Alejandro Newell, Kaiyu Yang, and Jia Deng, ECCV, 2016. 原文链接 https://arxiv.org/pdf/1603.06937.pdf 关键词 Human Pose Estimation 研究问题 CNN运用于Human Pose E…

YOLOv8-Seg改进:分割注意力系列篇 | 上下文增强和特征细化注意力ContextAggregation

🚀🚀🚀本文改进:多头上下文集成(Context Aggregation)的广义构建模块 ,引入YOLOv8二次创新; 🚀🚀🚀Context Aggregation小目标分割&复杂场景首选,实现涨点 🚀🚀🚀YOLOv8-seg创新专栏:http://t.csdnimg.cn/KLSdv 学姐带你学习YOLOv8,从入门到创…

⑥ 【MySQL函数】字符串函数、数值函数、日期函数、流程函数

个人简介&#xff1a;Java领域新星创作者&#xff1b;阿里云技术博主、星级博主、专家博主&#xff1b;正在Java学习的路上摸爬滚打&#xff0c;记录学习的过程~ 个人主页&#xff1a;.29.的博客 学习社区&#xff1a;进去逛一逛~ MySQL函数 ⑥ 字符串函数、数值函数、日期函数…

【社会网络分析第5期】gephi使用指南

gephi数据可视化 gephi数据可视化1、软件安装2、数据处理与导入&#xff08;1&#xff09;导入节点&#xff08;2&#xff09;导入边&#xff08;3&#xff09;改变节点的颜色&#xff08;4&#xff09;根据pagerank调整节点的大小&#xff08;5&#xff09;根据pagerank调整边…

笔记本分屏怎么操作?3个方法提高工作效率!

“有朋友知道笔记本怎么才能实现分屏吗&#xff1f;我在工作时&#xff0c;经常需要来回切换屏幕&#xff0c;效率真的太低了&#xff0c;有什么方法可以实现两个屏幕同时使用吗&#xff1f;” 在现代生活中&#xff0c;多任务处理已成为常态&#xff0c;而笔记本分屏技术为用户…

放假通知!2024年全国中小学寒假时间发布!

进入冬季&#xff0c; 学生们都迫不及待地 期盼着寒假的到来。 近日&#xff0c;全国多地已经明确了 2024年中小学寒假的起止时间。 一起来看看你所在的城市寒假放几天 北京 据“首都教育”微信公众号消息&#xff0c; 普通中小学、中等职业学校 义务教育阶段2024年寒…

JTS: 21 MinimumBoundingCircle 最小包裹圆

文章目录 版本代码 版本 org.locationtech.jts:jts-core:1.19.0 链接: github 代码 package pers.stu.algorithm;import org.locationtech.jts.algorithm.MinimumBoundingCircle; import org.locationtech.jts.geom.Coordinate; import org.locationtech.jts.geom.Geometry; …

ReportLab创建合同PDF

一、前言 有一个项目需要将电子签名后的报价合同和生成的发票发送给客户&#xff0c;这种发送给客户的文件一般都是使用PDF格式&#xff0c;主要是因为PDF特别适合阅读且不同平台打开文件格式不会变形&#xff0c;不过要在程序中生成PDF还是比较麻烦的&#xff0c;我们的发票是…

MySQL最新2023年面试题及答案,汇总版(7)【MySQL最新2023年面试题及答案,汇总版-第三十七刊】

文章目录 MySQL最新2023年面试题及答案&#xff0c;汇总版(7)01、NOW() 和 CURRENT_DATE() 有什么区别&#xff1f;02、CHAR和VARCHAR的区别&#xff1f;03、主键索引与唯一索引的区别&#xff1f;04、MySQL中有哪些不同的表格&#xff1f;05、SQL的生命周期&#xff1f;06、你…

nginx四层tcp负载均衡及主备、四层udp负载均衡及主备、7层http负载均衡及主备配置(wndows系统主备、负载均衡)

准备工作 服务器上安装、配置网络负载平衡管理器 windows服务器热备、负载均衡配置-CSDN博客 在windows服务器上安装vmware17 在windows上利用vmware17 搭建centos7 mini版本服务器 设置好静态ip地址&#xff08;因为windows 服务器上的网络负载平衡管理器不支持dhcp的服务器…

【git】解决git报错:ssh:connect to host github.com port 22: Connection timed out 亲测有效

如题&#xff0c;git使用中突然报错 ssh:connect to host github.com port 22: Connection timed out 通过查阅各种资料&#xff0c;得知原因可能是由于电脑的防火墙或者其他网络原因导致ssh连接方式 端口22被封锁。 解决方法 一&#xff1a;抛弃ssh连接方式&#xff0c;使…

YOLOv8-Seg改进:卷积变体系列篇 | PConv,减少冗余计算和内存访问可以更有效地提取空间特征 | CVPR2023 FasterNet

🚀🚀🚀本文改进:PConv,减少冗余计算和内存访问可以更有效地提取空间特征,引入到YOLOv8,与C2f结合实现二次创新; 🚀🚀🚀PConv 亲测在多个数据集能够实现涨点,同样适用于小目标分割 🚀🚀🚀YOLOv8-seg创新专栏:http://t.csdnimg.cn/KLSdv 学姐带你学习…

第2关:多表查询

任务描述 join操作符编程要求测试说明 任务描述 本关任务&#xff1a; 使用join操作符实现多表查询。 join操作符 1.笛卡尔积&#xff0c;RXS 可直接转换为SQL语句 2.等值连接&#xff0c;记作 可直接转换为SQL语句 3.自然连接&#xff0c;记作 可转换为SQL语句 4.左外连接…

对这套BI零售数据分析方案心动,是零售人天性

零售数据分析做了这么多年&#xff0c;难道真的没累积点经验&#xff0c;摸索出一条又快又能满足绝大多数需求的数据分析捷径&#xff1f;别人不知道&#xff0c;奥威BI还真就有这么一套标准化的BI零售数据分析方案&#xff0c;不管是服装零售、医药连锁、商超都能利用这套方案…

基于springboot实现小学家校一体“作业帮”系统项目【项目源码】

基于springboot实现小学家校一体“作业帮”系统演示 Java语言简介 Java是由SUN公司推出&#xff0c;该公司于2010年被oracle公司收购。Java本是印度尼西亚的一个叫做爪洼岛的英文名称&#xff0c;也因此得来java是一杯正冒着热气咖啡的标识。Java语言在移动互联网的大背景下具…

如何在 macOS 中删除 Time Machine 本地快照

看到这个可用82GB&#xff08;458.3MB可清除&#xff09; 顿时感觉清爽&#xff0c;之前的还是可用82GB&#xff08;65GB可清除&#xff09;&#xff0c;安装个xcode都安装不上&#xff0c;费解半天&#xff0c;怎么都解决不了这个问题&#xff0c;就是买磁盘情理软件也解决不了…

JavaScript中this关键字实践

● 在全局中&#xff0c; this关键字表示全局窗口 console.log(this);● 在严格模式下&#xff0c;this不指向函数本身&#xff0c;在非严格模式下&#xff0c;this指向全局窗口 console.log(this);const calcAge function (birthYear) {console.log(2037 - birthYear);cons…