第四章mlp

生成数据集

读取数据集

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填充,否则求均值的时候就不是原先数据的均值了

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

A2Attention模型介绍

A2Attention的核心思想是首先将整个空间的关键特征收集到一个紧凑的集合中&#xff0c;然后自适应地将其分布到每个位置&#xff0c;这样后续的卷积层即使没有很大的接收域也可以感知整个空间的特征。第一级的注意力集中操作有选择地从整个空间中收集关键特征&#xff0c;而第二…

Rocky DEM 高尔顿板 小球掉落正态分布模拟

Rocky DEM 高尔顿板 小球掉落正态分布模拟 前言一、外部三维模型的建立二、导入到Rocky中并设置1.导入外部三维模型2.打开3D视图3.添加颗粒入口界面4.添加颗粒并设置属性5.设置颗粒与墙壁的碰撞属性6.设置颗粒入口流量7.求解 三、动画序列设置并导出 前言 刚开始学习离散元软件…

MyBatis 反射工具箱:带你领略不一样的反射设计思路

反射是 Java 世界中非常强大、非常灵活的一种机制。在面向对象的 Java 语言中&#xff0c;我们只能按照 public、private 等关键字的规范去访问一个 Java 对象的属性和方法&#xff0c;但反射机制可以让我们在运行时拿到任何 Java 对象的属性或方法。 有人说反射打破了类的封装…

[IJKPLAYER]基于DEMO分析IJKPLAYER(整理版本)

背景 博主主要是从事C语言开发&#xff0c;因此本文着重强调FFMPEG部分&#xff0c;关于JAVA应用和框架层只是一笔带过。IJKPLAYER的实质是对FFMPEG项目中的ffplayer程序进行的二次封装&#xff0c;通过JNI方式完成对外提供JAVA接口。 1.目录结构 activities:包含了demo的所有…

【设计原则篇】聊聊开闭原则

开闭原则 其实就是对修改关闭&#xff0c;对拓展开放。 是什么 OCP&#xff08;Open/Closed Principle&#xff09;- 开闭原则。关于开发封闭原则&#xff0c;其核心的思想是&#xff1a;模块是可扩展的&#xff0c;而不可修改的。也就是说&#xff0c;对扩展是开放的&#xf…

单电源供电的运放如何增加直流偏置

在一些单电源供电的运放电路中&#xff0c;输入信号可能是交流信号&#xff0c;有正也有负&#xff0c;如果输入信号直接接到运算放大电路&#xff0c;则运放不会输出负电压&#xff0c;只有正电压&#xff0c;从而不能实现信号的调理&#xff1b; 这时我们就需要给运放添加直流…

css选择器

目录 1.什么是css? 2.选择器分类 2.1类选择器 2.3id选择器 2.3通配符选择器 3.字体样式 3.1字体大小 3.2字体粗细 3.3字体系列 3.4font属性连写 3.5样式的层叠问题 4.文本样式 4.1文本缩进 4.2文本水平对齐方式 4.3文本修饰 5.行高 6.垂直居中 7.margin:0 au…

【JAVA】去掉 if...else 的七种绝佳之法...

文章目录 前言方法一&#xff1a;提前 return方法二&#xff1a;枚举方案三&#xff1a;Optional 判空方案四&#xff1a;表驱动法方案五&#xff1a;策略模式 工厂方法方案六&#xff1a;责任链模式方案七&#xff1a;Function总结 前言 我相信小伙伴一定看过多篇怎么去掉 i…

Libhybris之线程局部存储TLS实例(五)

简介&#xff1a; CSDN博客专家&#xff0c;专注Android/Linux系统&#xff0c;分享多mic语音方案、音视频、编解码等技术&#xff0c;与大家一起成长&#xff01; 优质专栏&#xff1a;Audio工程师进阶系列【原创干货持续更新中……】&#x1f680; 人生格言&#xff1a; 人生…

Redis应用之二分布式锁

一、前言 前一篇 Redis应用之一自增编号 我们主要介绍了使用INCR命令来生成不重复的编号&#xff0c;今天我们来了解Redis另外一个命令SET NX的用途&#xff0c;对于单体应用我们可以简单使用像synchronized这样的关键字来给代码块加锁&#xff0c;但对于分布式应用要实现锁机…

select在标准输出和套接字上进行监控

selectServerInTCPIPbook.c的内容如下&#xff1a; #include <stdio.h> #include <stdlib.h> #include <string.h> #include <unistd.h> #include <arpa/inet.h> #include <sys/socket.h> #include <sys/time.h> #include <sys/…

kubernetes--Pod进阶

目录 一、资源限制&#xff1a; 1. 资源限制的两种规范&#xff1a; 2. Pod 和 容器 的资源请求和限制&#xff1a; 3. CPU 资源单位&#xff1a; 4. 内存资源单位 &#xff1a; 5. 资源限制示例&#xff1a; 二、健康检查&#xff1a;探针&#xff08;Probe&#xff09; 1. 探…

5. HTML常用标签

5.1 标签语义 学习标签是有技巧的&#xff0c;重点是记住每个标签的语义。简单理解就是指标签的含义。即这个标签是用来干嘛的。 根据标签的语义&#xff0c;在合适的地方给一个最为合理的标签。可以让页面结构给清晰。 5.2 标题标签 <h1>-<h6>(重要) HTML提供了…

【cfeng-work】架构演进和漫谈

架构漫谈和入门 内容管理 intro分层架构MVC模式分层架构大数据时代的复杂架构 前端架构后端架构运维端架构持续演进变化 本文主要是自己接触架构的一些输出漫谈 cfeng 在work中某次负责了后端一个服务的上线&#xff0c;多个模块一起上&#xff0c;结果上线失败&#xff0c;幸运…

Mysql 和 Redis 数据如何保持一致

先阐明一下Mysql和Redis的关系&#xff1a;Mysql是数据库&#xff0c;用来持久化数据&#xff0c;一定程度上保证数据的可靠性&#xff1b;Redis是用来当缓存&#xff0c;用来提升数据访问的性能。 关于如何保证Mysql和Redis中的数据一致&#xff08;即缓存一致性问题&#xf…

Python实现WOA智能鲸鱼优化算法优化卷积神经网络回归模型(CNN回归算法)项目实战

说明&#xff1a;这是一个机器学习实战项目&#xff08;附带数据代码文档视频讲解&#xff09;&#xff0c;如需数据代码文档视频讲解可以直接到文章最后获取。 1.项目背景 鲸鱼优化算法 (whale optimization algorithm,WOA)是 2016 年由澳大利亚格里菲斯大学的Mirjalili 等提…

适用于WPF的设计模式

适用于WPF的设计模式 讨论“XAML能不能写逻辑代码”这个问题。我发现这是个有歧义的问题。这个问题可以有两种意思&#xff1a; XAML能不能用来写逻辑代码&#xff1f; XAML文件里能不能包含逻辑代码&#xff1f; 对于第一种意思——XAML是一种声明性语言&#xff0c;就是用来…

Adobe家里那点事儿~~~

今天&#xff0c;我们来谈谈关于Adobe全家桶中Photoshop的故事。 Adobe Photoshop&#xff0c;简称PS。其定位是一款图像处理软件。他主要处理以像素所构成的数字图像。也就是说我们常见的非矢量图片。 Photoshop的专长在于图像处理&#xff0c;而不是图形的创作。他是对已有的…

项目应用多数据源动态切换(动态切换数据库连接)

文章目录 前言准备阶段具体配置功能展示注解方式切换数据源代码方式切换数据源优化方式 动态添加删除数据源事务问题参考文章 前言 最近公司的权限项目要实现多租户的功能&#xff0c;于是就要做数据隔离以确保每个租户的数据的安全性&#xff0c;但是项目中也要动态的提供能够…

动态修改hosts

前言 因工作需要频繁变更hosts&#xff0c; 故须自己实现一个动态管理器&#xff0c; 市面上其实已经有了类似的软件&#xff0c;比如switchhosts!但因为不好集成其他功能&#xff08;如远程连接KVM&#xff09;&#xff0c;所以还是决定自己开发一套。 原理 使用之前强烈建…