深度学习pytorch--多层感知机(二)

多层感知机的从零开始实现

    • 获取和读取数据
    • 定义模型参数
    • 定义激活函数
    • 定义模型
    • 定义损失函数
    • 训练模型
    • 小结

我们已经从上一节里了解了多层感知机的原理。下面,我们一起来动手实现一个多层感知机。首先导入实现所需的包或模块。

import torch
import numpy as np

获取和读取数据

这里继续使用Fashion-MNIST数据集。代码和之前softmax回归是一样的,我们将使用多层感知机对图像进行分类。

定义模型参数

我们在3(softmax回归的从零开始实现)里已经介绍了,Fashion-MNIST数据集中图像形状为 28×2828 \times 2828×28,类别数为10。本节中我们依然使用长度为 28×28=78428 \times 28 = 78428×28=784 的向量表示每一张图像。因此,输入个数为784,输出个数为10。实验中,我们设超参数隐藏单元个数为256。

num_inputs, num_outputs, num_hiddens = 784, 10, 256W1 = torch.tensor(np.random.normal(0, 0.01, (num_inputs, num_hiddens)), dtype=torch.float,requires_grad=True)
b1 = torch.zeros(num_hiddens, dtype=torch.float,requires_grad=True)
W2 = torch.tensor(np.random.normal(0, 0.01, (num_hiddens, num_outputs)), dtype=torch.float,requires_grad=True)
b2 = torch.zeros(num_outputs, dtype=torch.float,requires_grad=True)

定义激活函数

这里我们使用基础的max函数来实现ReLU,而非直接调用relu函数。

def relu(X):return torch.max(input=X, other=torch.tensor(0.0))

定义模型

同softmax回归一样,我们通过view函数将每张原始图像改成长度为num_inputs的向量。然后我们实现上一节中多层感知机的计算表达式。

def net(X):X = X.view((-1, num_inputs))H = relu(torch.matmul(X, W1) + b1)return torch.matmul(H, W2) + b2

定义损失函数

为了得到更好的数值稳定性,我们直接使用PyTorch提供的包括softmax运算和交叉熵损失计算的函数。

loss = torch.nn.CrossEntropyLoss()

训练模型

训练多层感知机的步骤和之前训练softmax回归的步骤没什么区别。

小结

  • 可以通过手动定义模型及其参数来实现简单的多层感知机。
  • 当多层感知机的层数较多时,本节的实现方法会显得较烦琐,例如在定义模型参数的时候。

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

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

相关文章

jwt同一会话_在会话中使用JWT

jwt同一会话这个话题已经在黑客新闻,reddit和博客上讨论了很多次。 共识是–请勿使用JWT(用于用户会话)。 而且我在很大程度上同意对JWT的典型论点 , 典型的“但我可以使其工作……”的解释以及JWT标准的缺陷的批评 。 。 我不会…

表必须要有主键吗_玄关隔断什么材质好?玄关隔断必须要做吗?

为了避免一到门口就能够看到全部室内的东西,为了更好的保护家居的隐私,目前有很多人都会在玄关的位置加一个隔断,而玄关隔断什么材质好?在做玄关隔断的时候,有些人觉得做了隔断会太浪费空间了,而玄关隔断必须要做吗?…

深度学习pytorch--多层感知机(三)

使用pytorch框架实现多层感知机和实现softmax回归唯一的不同在于我们多加了一个全连接层作为隐藏层。它的隐藏单元个数为256,并使用ReLU函数作为激活函数。#模型的核心代码为:nn.Linear(num_inputs, num_hiddens),nn.ReLU(),nn.Linear(num_hiddens, num_outputs),

mysql 日期索引的使用_日期使用

mysql 日期索引的使用时区糟透了。 特别是夏令时。 我不介意像与此行为相关的编程错误那样,不停移动时钟或失去一个小时的睡眠。 更糟糕的是Java的旧日期/时间API。 Java社区通过JSR 310公开承认了这一点,该JSR 310代替了Java Date&Time API…

axure元件库 文件上传_手把手教你打造一套属于产品经理自己的元件库

之前有篇文章聊完了如何打造一套属于自己的原型图设计规范,今天咱们来聊聊如何打造一套属于自己的元件库。毕竟,每个追求效率的PM,总会拥有一个专属自己的Axure元件库,并不断打磨优化。今天就教大家一步一步创建属于自己的Axure元…

KMP算法笔记

1.KMP算法本质上就是对朴素匹配算法(BF)的一个优化,减少朴素匹配算法中不必要匹配的次数,核心代码和朴素匹配算法差不多,BF是移动字串逐个字符匹配,每次模式串(子串)匹配只移动一个字符单位,而KMP算法是每次模式串匹配…

正则表达式的非捕获性分组

非捕获性分组,通常由一对括号加上 ?: 加上子表达式组成,非捕获性分组不会创建反向引用,就好像没有括号一样。如下: var color "#808080"; var output color.replace(/#(?:\d)/,"$1""~~"); console.log(Re…

Spring Security并发会话控制示例教程–如何限制Java JEE Web应用程序中的用户会话数...

如果您不知道, Spring安全性可能会限制用户可以拥有的会话数。 如果要开发Web应用程序,尤其是Java JEE中的安全Web应用程序 ,则必须提出与在线银行门户相似的要求,例如, 每个用户一次只能有一个会话,或者每…

prometheus命令_Prometheus 入门

学习安装 Prometheus 监控和警报系统并编写它的查询。-- Michael Zamot(作者)Prometheus 是一个开源的监控和警报系统,它直接从目标主机上运行的代理程序中抓取指标,并将收集的样本集中存储在其服务器上。也可以使用像 collectd_exporter 这样的插件推送…

正则表达式的命名分组

语法格式&#xff1a;(?<name>…) 命名分组也是捕获性分组&#xff0c;它将匹配的字符串捕获到一个组名称或编号名称中&#xff0c;在获得匹配结果后&#xff0c;可通过分组名进行获取。 如下是一个python的命名分组的例子&#xff1a; import re data "#80808…

python--字符/文本编码解码笔记

字符/文本编码解码笔记1.字符问题编码和解码2.字节概要3.基本的编解码器编码类型史字符编码ASCII码GB2312以及其他编码UNICODE标准编码UTF-8编码4.了解编解码问题处理UnicodeEncoderError解决方法:处理UnicodeDecodeError解决方法5.修改源代码编码6.查看文件编码方式终端查看文…

neo4j cypher_Neo4j:Cypher – Neo.ClientError.Statement.TypeError:不知道如何添加Double和String...

neo4j cypher最近&#xff0c;我将支持Neo4j的应用程序从Neo4j 3.2升级到Neo4j 3.3&#xff0c;发现围绕类型强制的行为发生了有趣的变化&#xff0c;导致我的应用程序抛出了很多错误。 在Neo4j 3.2和更早版本中&#xff0c;如果将String添加到Double&#xff0c;它将把Double…

easyui数据表格显示复选框_【Excel技巧】使用控件一键切换实现单位元和万元随意显示...

工欲善其事&#xff0c;必先利其器。职场上亦是如此。Excel报表想要做得完美&#xff0c;首先肯定Excel要精通。做一份Excel报表&#xff0c;如果涉及到金额&#xff0c;当金额比较大&#xff0c;单位到底是用元还是万元&#xff0c;经常是大家纠结的一个问题。我们今天就来介绍…

正则表达式的固化分组

固化分组&#xff0c;又叫原子组。 语法格式&#xff1a;(?>…) 我们在使用非贪婪模式时&#xff0c;匹配过程中可能会进行多次的回溯&#xff0c;回溯越多&#xff0c;正则表达式的运行效率就越低。而固化分组就是用来减少回溯次数的。 实际上&#xff0c;固化分组 (?…

Requests库基本使用

requests库基本使用基本流程python中一个基于网络请求的模块&#xff0c;功能强大&#xff0c;简单便捷&#xff0c;效率极高&#xff0c;可以取代古老的urllib模块。作用&#xff1a;模拟浏览器向服务器发起请求。基本流程 1.指定URL2.对指定的URL发起请求(get或post)3.获取响…

tls 使用java生成_同时使用传入和传出连接时,相互TLS身份验证存在Java问题

tls 使用java生成在大多数企业环境中&#xff0c;应用程序之间的连接中使用某种形式的安全通信&#xff08;例如TLS或SSL&#xff09;。 在某些环境中&#xff0c; 相互&#xff08;双向&#xff09;身份验证也是一项非功能性要求。 有时将其称为双向SSL或双向TLS身份验证。 因…

正则表达式的环视实际应用案例

一、千位分隔符案例&#xff08;一&#xff09; 逆序环视和顺序环视结合应用。 **需求&#xff1a;**数字格式化成用 , 分隔的货币格式。 正则表达式&#xff1a;(?n)(?<\d)(?<!\.\d*)(?(\d{3})(\.|$)) 测试代码&#xff1a; double[] data new double[] { 0,…

软件工程专插本_2021年专插本部分招生专业(拟),广科/广东理工/华商/培正/松田/工商大!...

小师姐从各专插本交流群中收集到了6所院校的2021年本科插班生拟招生专业&#xff1a;广东理工学院、广东科技学院、广东财经大学华商学院、广州大学松田学院、广东培正学院、广东工商职业技术大学。ps&#xff1a;以下只是拟招生专业&#xff0c;具体还是以考试院公布的为准。另…

Requests库实战(一)---网页采集器

网页采集器User-Agent伪装完整代码功能&#xff1a;通过动态url来实现用户输入搜索关键字&#xff0c;返回搜索到的页面。User-Agent伪装 一种反爬机制。 原理&#xff1a;网站的服务器会检测对于请求的载体身份标识&#xff0c;如果检测到请求的载体身份标识为某一款浏览器&a…

ES6 对正则表达式的扩展

文章目录修饰符 y修饰符 uECMAScript 6.0&#xff08;以下简称 ES6&#xff09;是 JavaScript 语言的下一代标准&#xff0c;已经在 2015 年 6 月正式发布了。它的目标&#xff0c;是使得 JavaScript 语言可以用来编写复杂的大型应用程序&#xff0c;成为企业级开发语言。修饰符…