第十周:机器学习笔记

第十周机器学习周报

  • 摘要
  • Abstract
  • 机器学习——self-attention(注意力机制)
    • 1. 为什么要用self-attention
    • 2. self-attention 工作原理
      • 2.1 求α的两种方式
      • 2.2 attention-score(关联程度)
  • Pytorch学习
    • 1. 损失函数代码实战
      • 1.1 L1loss(绝对值平均差)
      • 1.2 MSELoss(均方误差)
      • 1.3 CrossEntropyLoss(交叉熵损失)
    • 2. 反向传播算法代码实战
  • 总结

摘要

这一周作者主要对注意力机制进行了学习,其中了解了引入注意力机制的原因、注意力机制的使用场景以及注意力机制的原理,此外在pytorch的学习中,作者对三种计算损失函数的方式,比如,绝对平均值误差、均方误差、交叉熵损失进行了代码实战学习。

Abstract

During this week, attention mechanisms were studied. The reasons for introducing attention mechanisms, the scenarios in which they are utilized, and the principles of attention mechanisms were understood. Additionally, in the study of PyTorch, practical coding exercises were conducted on three approaches to calculating loss functions, namely, absolute mean error, mean squared error, and cross-entropy loss.

机器学习——self-attention(注意力机制)

1. 为什么要用self-attention

我们之前学习的案例的输入都是只有1个vector
但是世界那么复杂
总会有多个很长的vector或者每次input的vector的个数不是固定的时候
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

2. self-attention 工作原理

在这里插入图片描述
在这里插入图片描述

2.1 求α的两种方式

在这里插入图片描述

2.2 attention-score(关联程度)

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

Pytorch学习

1. 损失函数代码实战

前面的学习周报我们学习了损失函数,所以这周我们需要在Pytorch中学习它,顺便做一个复习。
在这里插入图片描述
损失函数就是用来衡量误差的,因为我们在训练的时候,有实际值和训练出来的值。我们要知道模型训练出来的结果的好坏,就需要用损失函数来进行衡量,从而不断优化我们的模型参数,使其效果更好。
例如,拿我们平时的做试卷的答题来说,output就是答题结果;而target为卷面分数。
因此LOSS告诉我们离满分还有70分的差距。
其功能一就是:告知我们输出结果与目标之间差距
在这里插入图片描述
经过损失函数我们知道了我们需要提升的地方(例如:加强解答题的训练),于是我们下一次解答题提高了10分。
其功能二就是:为模型的改进提供依据,其是通过反向传播完成的
在这里插入图片描述
常见的损失函数如下
其中大多数都在我们之前的周报内容中学习过,如下图所示:在这里插入图片描述

1.1 L1loss(绝对值平均差)

MAE,之前的周报有说过,就不详细说了
详情如下:
其中要注意reduction
为mean就是求所有的L(误差)平均值,为sum就所有的L(误差)求和
默认为mean
在这里插入图片描述
其中特别要注意这里的shape,target要与input一致
在这里插入图片描述

import torchfrom torch import nninputs = torch.tensor([1, 2, 3], dtype=torch.float32)
targets = torch.tensor([1, 2, 5], dtype=torch.float32)inputs = torch.reshape(inputs, (1, 1, 1, 3))
targets = torch.reshape(targets, (1, 1, 1, 3))loss = nn.L1Loss()
result = loss(inputs, targets)print(result)

在这里插入图片描述

1.2 MSELoss(均方误差)

就是求差再平方
reduction意义同上
在这里插入图片描述
代码如下:

import torchfrom torch import nninputs = torch.tensor([1, 2, 3], dtype=torch.float32)
targets = torch.tensor([1, 2, 5], dtype=torch.float32)inputs = torch.reshape(inputs, (1, 1, 1, 3))
targets = torch.reshape(targets, (1, 1, 1, 3))# 均方误差
loss2 = nn.MSELoss()
result2 = loss2(inputs, targets)print(result2)

在这里插入图片描述

1.3 CrossEntropyLoss(交叉熵损失)

这个比较复杂,但是之前的周报中也有讲过

常用于分类问题中,分类问题有C个类(如CIFAR-10有10个类别)
计算公式如下:
在这里插入图片描述
公式解释如下:
比如有3分类问题,dog、person、cat
在这里插入图片描述
log主要是为了增强分类效果
因为当为[0.8,0.9,0.7]的时候,不加入log就差距不大,分类效果就差
代码如下:

import torch
from torch import nn
# 交叉熵损失
x = torch.tensor([0.1, 0.2, 0.3])
y = torch.tensor([1])
x = torch.reshape(x, (1, 3))
loss_cross = nn.CrossEntropyLoss()result_cross = loss_cross(x, y)
print(result_cross)

在这里插入图片描述
在计算器中的结果一致,证明我们的理解没有偏差
log函数默认以自然对数10为底,而在matlab中log函数默认以自然对数e为底
在这里插入图片描述

import torch
import torchvision
from torch import nn
from torch.utils.data import DataLoader
from torch.utils.tensorboard import SummaryWriterdatasets = torchvision.datasets.CIFAR10(root='./datasets', train=False, transform=torchvision.transforms.ToTensor(),download=True)dataloader = DataLoader(datasets, batch_size=1)class Net(nn.Module):def __init__(self):super(Net, self).__init__()self.model1 = nn.Sequential(nn.Conv2d(3, 32, 5, 1, 2),nn.MaxPool2d(2, 2),nn.Conv2d(32, 32, 5, 1, 2),nn.MaxPool2d(2, 2),nn.Conv2d(32, 64, 5, 1, 2),nn.MaxPool2d(2, 2),nn.Flatten(),nn.Linear(1024, 64),nn.Linear(64, 10),)def forward(self, x):x = self.model1(x)return xnet = Net()
for data in dataloader:images, labels = dataoutputs = net(images)print(outputs)print(labels)

回顾一下CIFAR-10数据集:

FAR-10是一个更接近普适物体的彩色图像数据集。
CIFAR-10 是由Hinton 的学生Alex Krizhevsky 和Ilya Sutskever整理的一个用于识别普适物体的小型数据集。
一共包含10 个类别的RGB 彩色图片:
飞机( airplane )
汽车( automobile )
鸟类( bird )
猫( cat )
鹿( deer )
狗( dog )
蛙类( frog )
马( horse )
船( ship )
卡车( truck )。CIFAR-10数据集中每个图片的尺寸为32 × 32 ,每个类别有6000个图像,数据集中一共有50000 张训练图片和10000 张测试图片。

其索引以及其种类对应关系如下:
在这里插入图片描述
上代码输出结果:
在这里插入图片描述
可以发现这种形式的输出十分符合我们CrossEntropy的形式
输入如下代码:

import torch
import torchvision
from torch import nn
from torch.utils.data import DataLoader
from torch.utils.tensorboard import SummaryWriterdatasets = torchvision.datasets.CIFAR10(root='./datasets', train=False, transform=torchvision.transforms.ToTensor(),download=True)dataloader = DataLoader(datasets, batch_size=1)class Net(nn.Module):def __init__(self):super(Net, self).__init__()self.model1 = nn.Sequential(nn.Conv2d(3, 32, 5, 1, 2),nn.MaxPool2d(2, 2),nn.Conv2d(32, 32, 5, 1, 2),nn.MaxPool2d(2, 2),nn.Conv2d(32, 64, 5, 1, 2),nn.MaxPool2d(2, 2),nn.Flatten(),nn.Linear(1024, 64),nn.Linear(64, 10),)def forward(self, x):x = self.model1(x)return x# 引入交叉熵损失函数
loss_cross = nn.CrossEntropyLoss()net = Net()
for data in dataloader:images, labels = dataoutputs = net(images)print(outputs)print(labels)# 让结果经过一次损失函数result_loss = loss_cross(outputs, labels)print(result_loss)

其中某一张图片的结果如下:
经过交叉熵损失后,其结果为2.3372
在这里插入图片描述

2. 反向传播算法代码实战

反向传播复习:
原理:基于链式求导法则
所谓反向传播,就如下图所示:
因为我们计算L对y的偏导很难计算,所以我们要从结果往前推导
在这里插入图片描述

import torch
import torchvision
from torch import nn
from torch.utils.data import DataLoader
from torch.utils.tensorboard import SummaryWriterdatasets = torchvision.datasets.CIFAR10(root='./datasets', train=False, transform=torchvision.transforms.ToTensor(),download=True)dataloader = DataLoader(datasets, batch_size=1)class Net(nn.Module):def __init__(self):super(Net, self).__init__()self.model1 = nn.Sequential(nn.Conv2d(3, 32, 5, 1, 2),nn.MaxPool2d(2, 2),nn.Conv2d(32, 32, 5, 1, 2),nn.MaxPool2d(2, 2),nn.Conv2d(32, 64, 5, 1, 2),nn.MaxPool2d(2, 2),nn.Flatten(),nn.Linear(1024, 64),nn.Linear(64, 10),)def forward(self, x):x = self.model1(x)return x# 引入交叉熵损失函数
loss_cross = nn.CrossEntropyLoss()net = Net()
for data in dataloader:images, labels = dataoutputs = net(images)print(outputs)print(labels)# 让结果经过一次损失函数result_loss = loss_cross(outputs, labels)# 反向传播result_loss.backward()print(result_loss)

可以看到,这里的grad(梯度)属性是有数值的。
在这里插入图片描述

总结

这一周因为开学,人在学校途中的原因,所以学习的内容相比之下少了很多。
作者主要对注意力机制进行了学习,其中了解了引入注意力机制的原因、注意力机制的使用场景以及注意力机制的原理,还学会了计算关联系数α的两种方法,分别是点积和additive,并学会了求attention-score(关联程度)与soft-max求出α‘,结合参数v,最后求和得到b
此外在pytorch的学习中,作者对三种计算损失函数的方式,比如,绝对平均值误差、均方误差、交叉熵损失进行了代码实战学习,对三种常用的loss function进行回顾,并代码实战。
希望开学后要加快学习的进度,继续学习注意力机制和李宏毅机器学习后面的视频以及pytorch中的反向传播的代码学习、以及优化器的代码实战。

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

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

相关文章

电路分析 ---- 加法器

1 同相加法器 分析过程 虚短: u u − R G R G R F u O u_{}u_{-}\cfrac{R_{G}}{R_{G}R_{F}}u_{O} u​u−​RG​RF​RG​​uO​ i 1 u I 1 − u R 1 i_{1}\cfrac{u_{I1}-u_{}}{R_{1}} i1​R1​uI1​−u​​; i 2 u I 2 − u R 2 i_{2}\cfrac{u_{…

如何判断小程序是运行在“企业微信”中的还是运行在“微信”中的?

如何判断小程序是运行在“企业微信”中的还是运行在“微信”中的? 目录 如何判断小程序是运行在“企业微信”中的还是运行在“微信”中的? 一、官方开发文档 1.1、“微信小程序”开发文档的说明 1.2、“企业微信小程序”开发文档的说明 1.3、在企业…

无线信道中ph和ph^2的场景

使用 p h ph ph的情况: Rayleigh 分布的随机变量可以通过两个独立且相同分布的零均值、高斯分布的随机变量表示。设两个高斯随机变量为 X ∼ N ( 0 , σ 2 ) X \sim \mathcal{N}(0, \sigma^2) X∼N(0,σ2)和 Y ∼ N ( 0 , σ 2 ) Y \sim \mathcal{N}(0, \sigma^2)…

终端协会发布《移动互联网应用程序(App)自动续费测评规范》

随着移动互联网的快速发展,App自动续费服务已成为许多应用的标配,但同时也引发了不少消费者的投诉和不满。为了规范这一市场行为,保护消费者的合法权益,电信终端协会(TAF)发布了《移动互联网应用程序&#…

代码随想录 刷题记录-28 图论 (5)最短路径

一、dijkstra(朴素版)精讲 47. 参加科学大会 思路 本题就是求最短路,最短路是图论中的经典问题即:给出一个有向图,一个起点,一个终点,问起点到终点的最短路径。 接下来讲解最短路算法中的 d…

网络层 V(IPv6)【★★★★★★】

一、IPv6 的特点 IP 是互联网的核心协议。现在使用的 IP(即 IPv4 ) 是在 20 世纪 70 年代末期设计的。互联网经过几十年的飞速发展,到 2011 年 2 月,IPv4 的地址已经耗尽, ISP 已经不能再申请到新的 IP 地址块了。我国在 2014 年…

梨花声音教育退费普通话学习技巧之了解文化背景

在学习普通话的过程中,了解中国的文化背景是不可或缺的一环。语言不仅是交流的工具,更是文化的载体。通过深入了解中国的历史、文化和社会背景,学习者可以更好地理解和掌握普通话,使语言学习变得更加生动有趣。本文将从几个方面详…

【iOS】属性关键字

目录 深浅拷贝 自定义类 容器类深拷贝 属性关键字 原子操作 atomic nonatomic 读写权限 readwrite readonly 内存管理 weak assign strong retian copy strong与copy 补充 属性关键字格式 ARC下property的默认属性 深浅拷贝 关于深浅拷贝,笔者在…

ClickHouse的安装教程

ClickHouse的安装教程 文章目录 ClickHouse的安装教程写在前面准备工作关闭防火墙CentOS 取消打开文件数限制安装依赖CentOS 取消 SELINUX 单机安装在 **node01** 的/opt/software 下创建 clickhouse 目录将下载的文件上传到 node01 的 /opt/software/clickhouse 目录下将安装文…

FPGA第 9 篇,Verilog 中的关键字和基数

前言 在 Verilog 中,关键字(Keywords)和基数(Radix)是语言的重要组成部分,它们有助于描述和定义硬件设计。上期分享了 Verilog 的基本使用,以及数据类型、逻辑值和算数运算符的简单应用&#x…

快手电商上线 “金秋赶蟹季” 活动,特别推出“蟹无忧”服务

金秋九月,正是品蟹好时节。为引入更多源头好蟹,快手电商发起了「金秋赶蟹季」溯源活动。为了让全国老铁提前品尝肥美的盘锦河蟹,9月3日,快手电商携手盘山县人民政府举行盘锦河蟹开捕仪式,并在快手小店 直播间进行全程直…

SprinBoot+Vue校园活动报名微信小程序的设计与实现

目录 1 项目介绍2 项目截图3 核心代码3.1 Controller3.2 Service3.3 Dao3.4 application.yml3.5 SpringbootApplication3.5 Vue3.6 uniapp代码 4 数据库表设计5 文档参考6 计算机毕设选题推荐7 源码获取 1 项目介绍 博主个人介绍:CSDN认证博客专家,CSDN平…

性能测试经典案例解析——政务查询系统

各位好,我是 道普云 一站式云测试SaaS平台。一个在软件测试道路上不断折腾十余年的萌新。 欢迎关注我的主页 道普云 文章内容具有一定门槛,建议先赞再收藏慢慢学习,有不懂的问题欢迎私聊我。 希望这篇文章对想提高软件测试水平的你有所帮…

docker拉取redis5.0.5并建立redis集群

1.配置文件 mkdir -p redis-cluster/7001/ mkdir -p redis-cluster/7002/ mkdir -p redis-cluster/7003/ mkdir -p redis-cluster/7004/ mkdir -p redis-cluster/7005/ mkdir -p redis-cluster/7006/cd redis-clustervim 7001/redis.confbind 0.0.0.0port 7001cluster-enabled…

IJCAI-信也科技杯全球AI大赛-华东师范大学亚军队伍分享

作者:彭欣怡(找不到工作版) 华东师范大学; 马千里(搬砖版) 虾皮; 指导:闫怡搏(科研版) 华东师范大学 比赛链接:https://ai.ppdai.com/mirror/goToMirrorDetailSix?mirrorId34 前言 这是我们首次参加语音领域的比赛,最初只是抱着…

C语言程序设计 笔记代码梳理 重制版

前言 第1章 C语言的流程 1.C程序经历的六个阶段 编辑(Edit)预处理(Preprocess)编译(Compile)汇编(Assemble)链接(Link)执行(Execute) 2.C语言编写代码到运行 都是先编译,后链接,最后运行。(.c ---> .obj --->.exe)这个过…

开发适合el-dialog的拉伸拖拽自定义指令和适配自定义的图片查看组件

目录 一、应用场景 二、开发流程 1.自定义指令 2.功能原理 3.难点 三、详细开发 四、总结 一、应用场景 我之前有开发过一个图片查看的组件,这个组件可在单页面打开,也可以在弹窗里打开,但是弹窗因为是比较固定,所以有一些…

常见限流算法-固定窗口、滑动窗口、漏桶、令牌桶

为什么需要限流 限流可以认为服务降级的一种,限流就是限制系统的输入和输出流量已达到保护系统的目的。一般来说系统的吞吐量是可以被测算的,为了保证系统的稳定运行,一旦达到的需要限制的阈值,就需要限制流量并采取一些措施以完成限制流量的目的。比如:延迟处理,拒绝处理…

OpenCV颜色空间转换(1)颜色空间转换函数cvtColor()的使用

操作系统:ubuntu22.04 OpenCV版本:OpenCV4.9 IDE:Visual Studio Code 编程语言:C11 算法描述 将图像从一个颜色空间转换到另一个颜色空间。 此函数将输入图像从一个颜色空间转换到另一个颜色空间。在进行 RGB 颜色空间之间的转换时&#x…

怎样查看电脑文件夹大小?文件夹数据丢失怎么找回

在日常使用电脑的过程中,‌我们经常需要查看文件夹的大小,‌以便更好地管理磁盘空间。‌然而,‌有时我们可能会遇到文件夹数据丢失的问题,‌这可能是由于误删除、‌系统错误或病毒感染等多种原因造成的。‌本文旨在介绍如何查看电…