基于Pytorch深度学习——多层感知机

本文章来源于对李沐动手深度学习代码以及原理的理解,并且由于李沐老师的代码能力很强,以及视频中讲解代码的部分较少,所以这里将代码进行尽量逐行详细解释
并且由于pytorch的语法有些小伙伴可能并不熟悉,所以我们会采用逐行解释+小实验的方式来给大家解释代码

大家可能对多层感知机这个名字还比较陌生,但是它还有一个让我们比较熟悉的名字全连接神经网络,我们后面还会讲解其他形式的神经网络,如卷积神经网络、循环神经网络等等

导入模块以及数据集

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

batch_size = 256
train_iter,test_iter = d2l.load_data_fashion_mnist(batch_size)

在这里我们仍然fashion_mnist数据集来进行本次的demo

随机初始化参数

# 由于输入的是图片,图片计算机读取的时候是按照像素读取而不是张数
# 所以inputs和outputs和hiddens都会比较大,因为它们是以像素作为基本单元的
# 模型的训练和预测的速率也会比较慢
num_inputs = 784
num_outputs = 10
num_hiddens = 256

W1 = nn.Parameter(torch.randn(num_inputs,num_hiddens,requires_grad = True))
b1 = nn.Parameter(torch.zeros(num_hiddens,requires_grad=True))
W2 = nn.Parameter(torch.randn(num_hiddens,num_outputs,requires_grad = True))
b2 = nn.Parameter(torch.zeros(num_outputs,requires_grad=True))
params = [W1,b1,W2,b2]

这里的随机初始化参数在我们前面已经讲解过了,但是我们需要的是注意这些参数的维度,我们可以根据李沐老师的课程,得到多层感知机的一个很重要的讲解图片

小实验/参数的维度

我们就随便用上面初始化的一个参数举例子,我们这里就拿W1进行举例

W1 = nn.Parameter(torch.randn(num_inputs,num_hiddens,requires_grad = True))

W1的维度为(num_inputs × num_hiddens)的一个张量,所以针对于这样初始化维度的一个矩阵,我们后面如果要进行线形层运算的话,根据矩阵运算的性质,我们应该将W1左乘输入X矩阵才可以,即
Y = X W + B Y=XW+B Y=XW+B

激活函数

为了让整个模型不是完全线性的模型,我们要引入一个非线性的激活函数,比如Sigmoid函数,但是我们这里采用另一种函数,名字叫做ReLU函数,函数的图像如下:
在这里插入图片描述
这个激活函数可以让我们在模型的训练过程中收敛速度加快
tips:其实每个激活函数的作用都相差不大,我们没有很大的必要把它当一个重要的超参数去看待

模型的实现

# 实现模型
def net(X):
    X = X.reshape((-1,num_inputs))
    H = relu(X @ W1 + b1)
    return (H @ W2 + b2)

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

在这个代码里面,我们采用逐行讲解的方式来进行

逐行讲解

X = X.reshape((-1,num_inputs))

首先,为了完成矩阵的乘法,我们需要先把输入的X给reshape为一个二维的矩阵,并且我们一定需要指定的是这个矩阵的第二个维度的参数,因为我们需要把它和一个(num_inputs × num_hiddens)维度的矩阵右乘

H = relu(X @ W1 + b1)

对于初学者而言,可能这一句话有一点难理解,这里我们是将矩阵的结果进行了一次relu函数,这个过程和我们多层感知机的运作过程相关,多层感知机的运作过程李沐老师的课里面有提到过,我这里可以用两个公式来进行概括
H = X W + B Y = R e L U ( H ) H = XW+B\\ Y = ReLU(H) H=XW+BY=ReLU(H)
利用这两个公式,我们可以看出先利用输入和权重算出X,再利用我们的激活函数来算出输出(也就是下一层的输入)

优化器

num_epochs = 10
lr = 0.1
updater = torch.optim.SGD(params,lr=lr)

在这个代码里面,我们采用了训练轮数为10轮,学习率为0.1,然后优化器我们还是采用前面的随机梯度下降的方法

模型的训练

train_ch3(net,train_iter,test_iter,loss,num_epochs,trainer)

在这里插入图片描述

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

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

相关文章

Visio 2021 (64bit)安装教程

Visio 2021 (64bit)安装教程 ​ 通知公告 Visio 2021 (64位) 是一款流程图和图表设计工具,主要用于创建和编辑各种类型的图表和图形。它提供了一个直观的界面和丰富的功能,可以帮助用户快速绘制专业的流程图、组织结构图、网络图、平面图、数据库模型等。 具体来说,Visio 20…

Go 语言数组

Go 语言提供了数组类型的数据结构。 数组是具有相同唯一类型的一组已编号且长度固定的数据项序列,这种类型可以是任意的原始类型例如整型、字符串或者自定义类型。 相对于去声明 number0, number1, ..., number99 的变量,使用数组形式 numbers[0], num…

Spring Cloud——Circuit Breaker上篇

Spring Cloud——Circuit Breaker上篇 一、分布式系统面临的问题1.服务雪崩2.禁止服务雪崩故障 二、Circuit Breaker三、resilience4j——服务熔断和降级1.理论知识2.常用配置3.案例实战(1)COUNT_BASED(计数的滑动窗口)&#xff0…

Spring Cloud——OpenFeign

Spring Cloud——OpenFeign 一、OpenFeign能干嘛二、OpenFeign的基本使用三、Feign的高级特性1.OpenFeign超时控制2.OpenFeign重试机制3.OpenFeign之性能优化HttpClient54.OpenFeign请求和响应压缩5.OpenFeign之Feign日志打印 四、参考 OpenFeign是一个声明式的Web服务客户端。…

Android --- 消息机制与异步任务

在Android中,只有在UIThread(主线程)中才能直接更新界面, 在Android中,长时间的工作联网都需要在workThread(分线程)中执行 在分线程中获取服务器数据后,需要立即到主线程中去更新UI来显示数据, 所以,如…

程序员的五大方法论

前言: 最近看了一篇总结程序员学习,晋升方法的文章,颇有感想,决定分享给大家,原文地址:给程序员的5条学习方法论 (qq.com)https://mp.weixin.qq.com/s/xVFlF9qTf9c74Emmdm0DqA 在繁忙的工作中,持…

如何在postman上提交文件格式的数据

如何在postman上提交文件格式的数据 今天在写一个文件上传的功能接口时,想用postman进行提交,花了些时间才找到在postman提交文件格式的数据。记录一下吧! 1.打开postman,选择POST提交方式,然后在Params那一行的Head…

代码随想录算法训练营DAY45|C++动态规划Part7|70.爬楼梯(进阶版)、322. 零钱兑换、279.完全平方数

文章目录 70.爬楼梯(进阶版)322. 零钱兑换思路CPP代码 279.完全平方数思路CPP代码 70.爬楼梯(进阶版) 卡码网:57. 爬楼梯 文章讲解:70.爬楼梯(进阶版) 322. 零钱兑换 力扣题目链接 文章讲解:322…

安装英伟达nvidia p4计算卡驱动@FreeBSD14

FreeBSD也能跑cuda AI训练拉! 在FreeBSD安装好pytorch和飞桨cpu版本后,尝试安装英伟达nvidia p4计算卡驱动。毕竟全靠cpu速度太慢了,还是GPU快啊!在磕磕绊绊几天后,终于成功成功安装好nvidia p4的cuda驱动&#xff0c…

从零开始:Django项目的创建与配置指南

title: 从零开始:Django项目的创建与配置指南 date: 2024/5/2 18:29:33 updated: 2024/5/2 18:29:33 categories: 后端开发 tags: DjangoWebDevPythonORMSecurityDeploymentOptimization Django简介: Django是一个开源的高级Python Web框架&#xff…

The Role of Subgroup Separability in Group-Fair Medical Image Classification

文章目录 The Role of Subgroup Separability in Group-Fair Medical Image Classification摘要方法实验结果 The Role of Subgroup Separability in Group-Fair Medical Image Classification 摘要 研究人员调查了深度分类器在性能上的差异。他们发现,分类器将个…

PHP源码_最新在线工具箱网站系统源码

项目运行截图 源码贡献 https://githubs.xyz/boot?app41 部分数据库表 SET NAMES utf8mb4; SET FOREIGN_KEY_CHECKS 0;-- ---------------------------- -- Table structure for toolbox_category -- ---------------------------- DROP TABLE IF EXISTS toolbox_category…

【网络原理】HTTP 协议的基本格式和 fiddler 抓包工具的用法

系列文章目录 【网络通信基础】网络中的常见基本概念 【网络编程】网络编程中的基本概念及Java实现UDP、TCP客户端服务器程序(万字博文) 【网络原理】UDP协议的报文结构 及 校验和字段的错误检测机制(CRC算法、MD5算法) 【网络…

下载安装 VisualVM

1、下载安装 VisualVM 第1步:下载地址:https://visualvm.github.io/ 第2步:解压到制定位置 第3步:指定jdk路径 下载完成后,在etc文件夹下找到visualvm.conf文件,设置jdk路径visualvm_jdkhome"D:\ITS…

ICode国际青少年编程竞赛- Python-1级训练场-路线规划

ICode国际青少年编程竞赛- Python-1级训练场-路线规划 1、 Dev.step(3) Dev.turnLeft() Dev.step(4)2、 Dev.step(3) Dev.turnLeft() Dev.step(3) Dev.step(-6)3、 Dev.step(-2) Dev.step(4) Dev.turnLeft() Dev.step(3)4、 Dev.step(2) Spaceship.step(2) Dev.step(3)5、…

ElasticSearch教程入门到精通——第一部分(基于ELK技术栈elasticsearch 8.x新特性)

ElasticSearch教程入门到精通——第一部分(基于ELK技术栈elasticsearch 8.x新特性) 1. ElasticSearch安装(略)2. ElasticSearch基础功能2.1 索引操作2.1.1 创建索引2.1.2 Head 索引2.1.3 查询索引2.1.3.1 查询单独索引2.1.3.2 查询…

【MATLAB】GUI初步设计

MATLAB界面设计 前言一、基本步骤1.1 创建GUI文件1.2 界面设计 总结 前言 为了完成图像处理的作业,简直就是生活不易啊 找到一个很棒的教学视频 基于MATLAB的GUI界面设计流程讲解 一、基本步骤 1.1 创建GUI文件 由于在写博文之前我已经创建好文件了,…

邊緣智能2024—AI開發者峰會(5月9日)數碼港即將啟幕

隨著 AI (人工智能)技術的飛速發展,我們正迎來邊緣計算智能化與分布式AI深度融合的新時代,共同演繹分布式智能創新應用的壯麗篇章。"邊緣智能2024 - AI開發者峰會"將聚焦於這一前沿領域,探討如何通過邊緣計算…

中国发布首个汽车大模型标准

🦉 AI新闻 🚀 中国发布首个汽车大模型标准 摘要:中国信息通信研究院于4月28日发布了国内首个汽车大模型标准,标志着汽车行业正式迈向“人工智能+”时代。该标准包含三个核心能力域:场景丰富度、能力支持度…

Pytorch学习笔记——环境配置安装

1、下载和配置环境 Anacodna必备(工具包里面都包含的有,集成与运用科学分析的软件,比较方便) 点击这个网页:Download Now | Anacondahttps://www.anaconda.com/download/success 按照教程安装(教程可以自己在网上搜…
最新文章