【动手学深度学习】--03.多层感知机MLP

news2024/11/17 1:35:27

文章目录

  • 多层感知机
    • 1.原理
      • 1.1感知机
      • 1.2多层感知机MLP
      • 1.3激活函数
    • 2.从零开始实现多层感知机
      • 2.1初始化模型参数
      • 2.2激活函数
      • 2.3 模型
      • 2.4损失函数
      • 2.5训练
    • 3.多层感知机的简洁实现
      • 3.1模型
      • 3.2训练

多层感知机

1.原理

官方笔记:多层感知机

1.1感知机

image-20230715200522222

训练感知机

image-20230715200549275

收敛定理

image-20230715200816823

问题:感知机不能拟合XOR问题,它只能产生线性分割面

image-20230715200931440

总结:

  • 感知机是一个二分类模型,是最早的AI模型之一
  • 它的求解算法等价于使用批量大小为1的梯度下降
  • 它不能拟合XOR函数,导致的第一次AI寒冬

1.2多层感知机MLP

单隐藏层

image-20230715201736041

image-20230715203538989

image-20230715203550713

1.3激活函数

激活函数(activation function)通过计算加权和并加上偏置来确定神经元是否应该被激活, 它们将输入信号转换为输出的可微运算。 大多数激活函数都是非线性的。 由于激活函数是深度学习的基础,下面简要介绍一些常见的激活函数。

ReLU激活函数

image-20230715203659207

image-20230715203727738

Sigmoid函数

image-20230715203750511

image-20230715203758375

tanh函数

image-20230715203816645

image-20230715203823531

总结:

  • 多层感知机使用隐藏层和激活函数来得到非线性模型
  • 常用激活函数是Sigmoid、Tanh、ReLU
  • 使用Softmax来处理多分类
  • 超参数为隐藏层数,和各个隐藏层大小

2.从零开始实现多层感知机

继续使用Fashion-MNIST图像分类数据集

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)

2.1初始化模型参数

回想一下,Fashion-MNIST中的每个图像由28×28=784个灰度像素值组成。 所有图像共分为10个类别。 忽略像素之间的空间结构, 我们可以将每个图像视为具有784个输入特征 和10个类的简单分类数据集。 首先,我们将实现一个具有单隐藏层的多层感知机, 它包含256个隐藏单元。 注意,我们可以将这两个变量都视为超参数。通常,我们选择2的若干次幂作为层的宽度。 因为内存在硬件中的分配和寻址方式,这么做往往可以在计算上更高效。注意,对于每一层我们都要记录一个权重矩阵和一个偏置向量

num_inputs, num_outputs, num_hiddens = 784, 10, 256

W1 = nn.Parameter(torch.randn(
    num_inputs, num_hiddens, requires_grad=True) * 0.01)
b1 = nn.Parameter(torch.zeros(num_hiddens, requires_grad=True))
W2 = nn.Parameter(torch.randn(
    num_hiddens, num_outputs, requires_grad=True) * 0.01)
b2 = nn.Parameter(torch.zeros(num_outputs, requires_grad=True))

params = [W1, b1, W2, b2]

这里对权重系数W1,W2进行最后的乘0.01运算,是因为randn默认从(mean(均值) = 0, std(方差) = 1)的正态分布随机取值,乘0.01可以使方差变小,取值更稳定平滑

能不能把W和b的值都设置为0? ——>显然不行,此时梯度消失,就没法根据反向传播来更新参数的大小从而学习

2.2激活函数

torch.zeros_like() :生成和括号内变量维度维度一致的全是零的tensor。

def relu(x):
    a = torch.zeros_like(X)
    return torch.max(X,a)

2.3 模型

因为我们忽略了空间结构, 所以我们使用reshape将每个二维图像转换为一个长度为num_inputs的向量。

def net(X):
    X = X.reshape((-1,num_inputs))
    H = relu(X@W1 + b1) # 这里“@”代表矩阵乘法
    return (H@W2 + b2)

2.4损失函数

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

这里损失函数必须加入reduction = ‘none’,可以保留每轮损失函数的梯度,才可以让我们最后画图

2.5训练

num_epochs,lr = 10,0.1
updater = torch.optim.SGD(params,lr = lr)
d2l.train_ch3(net,train_iter,test_iter,loss,num_epochs,updater)

image-20230715205329773

d2l.predict_ch3(net, test_iter)

image-20230715205404734

3.多层感知机的简洁实现

3.1模型

添加了2个全连接层(之前我们只添加了1个全连接层)。 第一层是隐藏层,它包含256个隐藏单元,并使用了ReLU激活函数。 第二层是输出

nn.Flattern()函数详解

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

net = nn.Sequential(nn.Flatten(),
                    nn.Linear(784, 256),
                    nn.ReLU(),
                    nn.Linear(256, 10))

def init_weights(m):
    if type(m) == nn.Linear:
        nn.init.normal_(m.weight, std=0.01)

net.apply(init_weights);

不需要自己定义平滑层以及定义ReLU激活函数

3.2训练

batch_size, lr, num_epochs = 256, 0.1, 10
loss = nn.CrossEntropyLoss(reduction='none')
trainer = torch.optim.SGD(net.parameters(), lr=lr)

train_iter, test_iter = d2l.load_data_fashion_mnist(batch_size)
d2l.train_ch3(net, train_iter, test_iter, loss, num_epochs, trainer)

image-20230715205910210

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

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

相关文章

SEO 基础知识? 2023学习SEO最佳指南

文章目录 搜索引擎优化基础知识什么是搜索引擎优化?为什么搜索引擎优化很重要?SEO有什么好处?如何做搜索引擎优化关键词研究内容优化网站结构优化(页面SEO)外部链接优化移动优化分析和迭代(技术SEO) 为 SEO 成功做好准…

蓝牙技术|低功耗蓝牙和LE Audio助力游戏设备行业发展

去年,蓝牙技术联盟官方宣布推出LE Audio,它以BLE为基础,旨在更好地兼顾音频质量和低功耗,以在多种潜在应用中显著增强用户体验。这在游戏行业中引起了轰动,由于其延迟显著降低,LE Audio在增强游戏体验方面展…

单片机第一季:零基础9——直流电机和步进电机

目录 1,直流电机 2,步进电机 1,直流电机 直流电机是指能将直流电能转换成机械能(直流电动机)或将机械能转换成直流电能(直流发电机)的旋转电机。它是能实现直流电能和机械能互相转换的电机。…

Jenkins的安装部署以及基本使用

前言: 今天有空大概记录的一个作为一个测试人员日常中Jenkins的使用。 一、环境准备 在安装使用Jenkins前我们要先安装jdk,这里博主选择的是jdk11。我们先删除旧的jdk然后安装全新的jdk。 1、先看下当前我们的jdk版本。 2、查看jdk安装路径&#xff1…

Simulink仿真模块 - Unit Delay

Unit Delay:将信号延迟一个采样期间 在仿真库中的位置为:Simulink / Discrete HDL Coder / Discret 模型为: 双击模型打开参数设置界面,如图所示: 说明 Unit Delay 模块按指定的采样期间保持和延迟输入。当放置于迭代子系统中时,该模块将其输入保持并延迟一个迭代。此…

视频文件一键批量去除水印需要用到什么剪辑软件

刚接触视频剪辑这个行业的小伙伴在找视频素材的过程中,如果发现视频带有水印是不是非常头疼,不知道怎么处理这件事。那今天我们就来聊聊怎么才能快速批量去除视频的水印呢?今天小编给大家带来一个好方法,一起来看看吧。 一、首先我…

Redis实战案例17-Redisson可重入的原理

可重入原理分析 为什么自定义的Redis实现分布式锁不能实现可重入 method1中调用了method2方法,属于是同一线程内的操作,但是当method1中获取了锁之后,method2中就无法获取锁了,这就是同一线程无法实现可重入; 如何解决…

Windows上查看服务器上tensorboad内容

文章目录 前言一、SSH的设置二、tensorboard命令 前言 本篇文章是针对于局域网内的服务器的tensorboard可视化,由于设置方式稍微有点复杂,导致我每次隔了一段时间之后,就不知道该怎么查看tensorboard了,每次都要百度搜一大堆资料…

安达发|选择APS排程系统一定要注意这五大问题

随着信息技术的迅速发展,云计算已成为企业信息化建设的重要领域。在云计算中,aps是企业服务器环境中常见的虚拟化解决方案。然而,市场上有许多aps系统可供选择,企业在选择合适的系统时需要综合考虑多种因素。本论文将从这个五个角…

nacos十分钟快速搭建

简介 nacos是阿里巴巴开源的微服务基础组件,充当微服务架构中的配置中心和注册中心,nacos可单独作为配置中心或者注册中心 目录结构 bin,bin工具 conf,配置文件 target,nacos的jar包 安装 机器环境:cen…

清洁机器人规划控制方案

清洁机器人规划控制方案 作者联系方式Forrest709335543qq.com 文章目录 清洁机器人规划控制方案方案简介方案设计模块链路坐标变换算法框架 功能设计定点自主导航固定路线清洁区域覆盖清洁贴边沿墙清洁自主返航回充 仿真测试仿真测试准备定点自主导航测试固定路线清洁测试区域…

Redis数据类型 — Hash

目录 Hash内部实现 源码片段 Hset执行函数 创建hash对象 尝试转换存储空间的编码 遍历把键值对根据存储空间格式进行存储起来 Hash 是一个键值对(key - value)集合,Hash 特别适合用于存储对象。 Hash内部实现 Hash 类型的底层数据结构…

[Error] graphics.h: No such file or directory

原因:系统编译器找不到graphics.h文件,graphics.h这个文件就类似Java里面的jar包,也相当于Python里面pip安装的依赖包,graphics.h是样式设计文件,需要放到编译的文件夹里面 解决办法: 1.从该网址下载graphi…

Talk | 天津大学博士生赵煜:从平面图像中理解空间语义 - 视觉空间位置描述

本期为TechBeat人工智能社区第512期线上Talk! 北京时间7月12日(周三)20:00, 天津大学博士生—赵煜的Talk已准时在TechBeat人工智能社区开播! 他与大家分享的主题是: “从平面图像中理解空间语义-视觉空间位置描述”,他与大家探讨了…

Html基础知识学习——兼容问题与解决方法(十六)

文章目录 1.计算一定要精确,不要让内容的宽高超出我们设置的宽高,在IE6下内容会撑开设置好的宽高2.元素浮动,宽度需要内容撑开,就给里面的块元素都加浮动3.在ie6.ie7下元素要浮动并在同一行 就给这些元素都加浮动4.注意标签嵌套规…

数学建模-典型相关分析

上节回顾 论文:常州大学一等奖淡水养殖… 要进行 pearson 相关系数 画散点图、折线图看是否相关检验正态分布满足上述,利用pearson相关系数 刚开始推导不会没关系,会应用就行,推导过程略,之后学习了后续知识&#xff…

JS基础教程

一、JS简介 1.1 学习内容 JavaScript(简称“JS”) 是一种具有函数优先的轻量级,解释型或即时编译型的编程语言。它是作为开发Web页面的脚本语言而出名,JavaScript 基于原型编程、多范式的动态脚本语言,并且支持面向对…

复习之系统定时任务及延迟任务

一、延迟任务(一次性的) 1. 延迟任务的设定 at 时间 :具体时间设定延迟任务 设定成功后“ ctrl d "发起任务," ctrl c " 取消。 at -l :查看延迟任务at -c 1 :查看序号为1 的延迟…

第四次CCF计算机软件能力认证

第一题:图像旋转 旋转是图像处理的基本操作,在这个问题中,你需要将一个图像逆时针旋转 90 度。 计算机中的图像表示可以用一个矩阵来表示,为了旋转一个图像,只需要将对应的矩阵旋转即可。 输入格式 输入的第一行包含两…

MySQL(二)索引原理以及优化

MySQL系列文章 MySQL(一)基本架构、SQL语句操作、试图 MySQL(二)索引原理以及优化 MySQL(三)SQL优化、Buffer pool、Change buffer MySQL(四)事务原理及分析 MySQL(五&a…