MLP 多层感知机

news2024/9/24 2:33:31

为了拟合更特殊的函数,在网络中加入多个隐藏层,克服线性的限制。最后一层可以看作线性predictor。

一、

1.最简单流程

输入x矩阵,含有n个样本,每个样本有d个特征。经过隐藏层H将维度转化为h,在经过最后的输出层O将维度转化为q。

2.当我们添加了多个隐藏层时,如果只是对上一层的输出做一个简单的映射,可以发现:

合并隐藏层后其实等价于单层的模型。

所以,需要在每个隐藏单元输出应用激活函数σ(常用包括 relu 0~1,sigmoid 0~1,tanh -1~1),这样就避免了上述的退化情况。

3.如果是全连接的网络,每个神经元都依赖于所有输入的值。所以理论上只有一个隐藏层也可以通过足够的神经元和权重,拟合任意函数。

不过,使用更深(而不是更广)的网络,可以更容易的拟合函数。

4.代码实现

· 初始化w、b

· def relu(X):

    a = torch.zeros_like(X) # 创建一个与X形状相同且元素全为0的张量

    return torch.max(X, a)

· def net(X):

    X = X.reshape((-1, num_inputs)) # 将每张图片都拉平成一个一维的向量

    H = relu(X@W1 + b1)  # 这里“@”代表矩阵乘法

    return (H@W2 + b2)

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

· updater = torch.optim.SGD(params, lr=lr)

· d2l.train_ch3(net, train_iter, test_iter, loss, num_epochs, updater)

5.总结

· 对于相同的分类问题,多层感知机的实现与softmax回归的实现相同,只是多层感知机的实现里增加了带有激活函数的隐藏层。

· 不同的层数、激活函数、权重,都会影响模型acc。

二、过拟合 欠拟合

1.在监督学习中(有监督学习指的是 我们知道每个样本的结果 如回归,无监督学习指的是 不知道/没有样本的结果 如聚类降维),我们假设train set和test set是独立同分布的。

2.介绍几个倾向于影响模型泛化的因素

· 可调整参数的数量。当可调整参数的数量(有时称为自由度)很大时,模型往往更容易过拟合。因为容易受到噪声的影响而拟合歪了。

· 参数采用的值。当权重的取值范围较大时,模型可能更容易过拟合。

· 训练样本的数量。即使模型很简单,也很容易过拟合只包含一两个样本的数据集。而过拟合一个有数百万个样本的数据集则需要一个极其灵活的模型。

3.验证集

实际应用中,测试集只会使用一次。所以我们会通过验证集确定一个最好的超参数,最后再测试。

我记得验证集是从训练集里分出来的,测试集是单独的。

4.K折交叉验证

当训练数据稀缺时,我们甚至可能无法提供足够的数据来构成一个合适的验证集。这个问题的一个流行的解决方案是采用K折交叉验证。

这里,原始训练数据被分成K个不重叠的子集。然后执行K次模型训练和验证,每次在K-1个子集上进行训练,并在剩余的一个子集(在该轮中没有用于训练的子集)上进行验证。最后,通过对K次实验的结果取平均来估计训练和验证误差。

5.生成数据集的代码

features = np.random.normal(size=(n_train + n_test, 1)) # 生成特征

np.random.shuffle(features)

poly_features = np.power(features, np.arange(max_degree).reshape(1, -1))  # 多项式特征

for i in range(max_degree): # gamma函数重新缩放

    poly_features[:, i] /= math.gamma(i + 1)  # gamma(n)=(n-1)!

# labels的维度:(n_train+n_test,)

labels = np.dot(poly_features, true_w) #点乘

labels += np.random.normal(scale=0.1, size=labels.shape) # 添加噪声

当使用reshape(1, -1)时,NumPy会根据原始数组的形状和1这个参数,自动计算出合适的列数,使得改变形状后的数组元素个数不变。

三、范数与权重衰减

注解:为了防止过拟合 提高泛化性,使用权重衰减的方法。

它是通过给损失函数增加模型权重L2范数的惩罚(penalty)来让模型权重不要太大,以此来减小模型的复杂度,从而抑制模型的过拟合。  因为上文提过,权重的取值过大也会导致过拟合。

简洁实现:

DL将权重衰减集成到优化器中

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() #在l上进行反向传播

            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())

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

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

相关文章

浙江搞一场知识竞赛活动要多少钱

浙江省属于国内比较富裕地方,消费相比其他地方较高,在那里举办一场知识竞赛活动根据规模划分:小型知识竞赛的预算大致在2-3万;中型知识竞赛活动3-10万之间,高端知识竞赛10至30万元之间或更高。以上费用均未考虑场地和选…

十年电商经验分享:从0-1打单品保姆级教程(下)

接着上一篇《十年电商经验分享:从0-1打单品保姆级教程(上)》,各位觉得有参考意义的商家朋友们可以点赞收藏一下。 5、制作 sku 图片以及 sku 名称卖点 这里很多商家可能不太注意,这个也是优化转化率最好的一块内容&a…

【数据结构与算法 | 灵神题单 | 删除链表篇】力扣2487, 237

1. 力扣2487:从链表中删除节点 1.1 题目: 给你一个链表的头节点 head 。 移除每个右侧有一个更大数值的节点。 返回修改后链表的头节点 head 。 示例 1: 输入:head [5,2,13,3,8] 输出:[13,8] 解释:需…

数字影像产业基地:绿色、智能、创新,如何并存发展?

在当今快速发展的时代,数字影像产业基地正以独特的魅力展现着绿色、智能、创新并存发展的崭新风貌。 绿色,是数字影像产业基地的底色。随着环保意识的不断提高,基地积极践行绿色发展理念。 智能,是数字影像产业基地的核心竞争力。…

4 个步骤带你快速上手 Einstein Copilot for Tableau

如果你的企业仍未部署或希望迁移至 Tableau Cloud,可考虑订阅 Tableau 高级套件。 自 Einstein Copilot for Tableau 发布以来,相信部分用户已经尝试过在 Tableau Cloud 中借助 AI 对话助理,快速解决数据分析中的问题,获得更准确的…

儿童护眼灯哪个牌子好?五款眼科医生推荐的台灯分享

随着年级的升高和学习内容的增加,学生的休闲娱乐时间逐渐减少,相反,他们在书桌前度过的时间却越来越多。近年来,由于电子产品的广泛使用,我国青少年的用眼负担显著增加。据权威机构预测,到2050年&#xff0…

隧道裂缝混泥土裂缝裂痕检测数据集 5000张 带标注 voc

隧道裂缝混凝土裂缝裂痕检测数据集 数据集规模: 图像数量:5000张标注类型:裂缝检测(包括隧道内壁、桥梁、建筑结构中的裂缝)格式兼容性:支持VOC标注格式 数据集内容: 该数据集专门用于训练和…

鸿蒙HarmonyOS应用开发者高级认证重点知识详解

✍️作者简介:小北编程(专注于HarmonyOS、Android、Java、Web、TCP/IP等技术方向) 🐳博客主页: 开源中国、稀土掘金、51cto博客、博客园、知乎、简书、慕课网、CSDN 🔔如果文章对您有一定的帮助请&#x1f…

springboot(IDEA)开发pom配置文件引用本地jar包

pom配置信息 <dependency><groupId>com.huawei.gauss200</groupId><artifactId>gsjdbc200</artifactId><version>8.1.3.6</version></dependency>将jar包引入本地maven仓库 mvn install:install-file -DfileD:/iso/gsjdbc200…

C++(进阶 ) ---模板

1. 非类型模板参数 模板参数分为类型形参与非类型形参。 类型形参&#xff1a;出现在模板参数列表中&#xff0c;跟在class或者typename之类的参数类型名称。 非类型形参&#xff0c;就是用一个常量作为类(函数)模板的一个参数&#xff0c;在类(函数)模板中可将该参数当成常量…

实现绑定UDP端口的Server程序

实现绑定UDP端口的Server程序 1. UDP Server的工作原理2. 伪代码3. C代码实现4. 代码解释5. 编译与运行在网络编程中,UDP(User Datagram Protocol)是一种无连接、不可靠的协议,相比于TCP,它提供了更简单的通信机制,适用于某些不要求可靠传输的应用场景。本文将介绍如何使…

<C++> set、map模拟实现

目录 一、适配器红黑树 二、红黑树再设计 1. 重新设计 RBTree 的模板参数 2. 仿函数模板参数 3. 正向迭代器 构造 operator*() operator->() operator!() operator() operator--() 正向迭代器代码 4. 反向迭代器 构造 operator* operator-> operator operator-- operat…

机械厂如何做好企业级数据治理系统落地

生产制造企业的数据治理面临着诸多难点与挑战&#xff0c;今天以某国营机械厂为例&#xff0c;分享机械制造企业数据治理经验。某机械厂是国家投资的国有大型企业&#xff0c;业务范围覆盖到零部件的研发、测试、生产制造&#xff0c;属于典型的离散制造企业。 鉴于近年来国家…

设计友好型相亲交友应用的关键要素揭秘

在设计一款友好型的相亲交友应用时&#xff0c;关键在于创造一个安全、舒适且高效的用户体验。以下是几个核心要素&#xff0c;它们共同构成了一个成功的相亲交友应用的基础&#xff08;编辑h17711347205&#xff09;。 1. 简洁直观的用户界面&#xff08;UI&#xff09; 用户…

【Java数据结构】泛型的进阶部分(泛型通配符)

1.❤️❤️前言~&#x1f973;&#x1f389;&#x1f389;&#x1f389; Hello, Hello~ 亲爱的朋友们&#x1f44b;&#x1f44b;&#xff0c;这里是E绵绵呀✍️✍️。 如果你喜欢这篇文章&#xff0c;请别吝啬你的点赞❤️❤️和收藏&#x1f4d6;&#x1f4d6;。如果你对我的…

protobuf使用

我下载的是 protobuf-27.4 以下使用vs2022 根据readme&#xff0c;执行如下命令 "C:\Program Files\CMake\bin\cmake.exe" -G "Visual Studio 17 2022" -DCMAKE_INSTALL_PREFIXC:\Users\x\Downloads\install C:\Users\x\Downloads\protobuf-27.4 -D…

【动态规划】子序列问题(数组中不连续的一段)

子序列问题 1.最长递增子序列2.摆动序列3.最长递增子序列的个数4.最长数对链 点赞&#x1f44d;&#x1f44d;收藏&#x1f31f;&#x1f31f;关注&#x1f496;&#x1f496; 你的支持是对我最大的鼓励&#xff0c;我们一起努力吧!&#x1f603;&#x1f603; 1.最长递增子序列…

Java+Swing学生信息管理系统

JavaSwing学生信息管理系统 一、系统介绍二、功能展示1.管理员登陆2.学生信息查询3.学生信息添加4.学生信息修改5.删除 三、系统实现1.StudentFrame .java 四、其它1.其他系统实现 一、系统介绍 该系统实现了管理员系统登陆、学生信息查询、学生信息添加、学生信息修改、学生信…

【代码随想录训练营第42期 Day55打卡 - 图论Part5 - 并查集的应用

目录 一、并查集 适用范围 三大基本操作 二、经典题目 题目&#xff1a;卡码网 107. 寻找存在的路径 题目链接 题解&#xff1a;并查集 三、小结 一、并查集 适用范围 动态连通性问题&#xff1a;并查集可以判断两个节点是否在同一个连通分量中&#xff0c;这在处理网络…

对耳朵伤害最小的耳机类型,开放式耳机最大程度保护耳道健康

开放式耳机是目前比较流行的耳机种类&#xff0c;其特点是通过采用海绵状的微孔发泡塑料制作透声耳垫&#xff0c;或利用骨传导、气传导等技术传音&#xff0c;不使用厚重的染音垫&#xff0c;没有与外界的隔绝感&#xff0c;佩戴者在享受音乐的同时&#xff0c;也能听到一部分…