Chapter3 Pytorch与机器学习有关函数(一)

news2024/11/20 3:29:27

3.1 Tensor中统计学有关的函数

3.1.1 平均值、总和 、累积

1.测试结果1

import torch

a = torch.rand(2, 2)

print(a)
print(torch.mean(a,))
print(torch.sum(a))
print(torch.prod(a))

2.测试结果2:2 \times 3数组对第1维操作

import torch

a = torch.tensor([[1.0,2.0,3.0],[4.0,5.0,6.0]])

print(a)
print(torch.mean(a,dim=1))
print(torch.sum(a,dim=1))
print(torch.prod(a,dim=1))

3.测试结果3:2 \times 3数组对第0维操作

import torch

a = torch.tensor([[1.0,2.0,3.0],[4.0,5.0,6.0]])

print(a)
print(torch.mean(a,dim=0))
print(torch.sum(a,dim=0))
print(torch.prod(a,dim=0))

3.1.2 返回最值排序的索引值

import torch

a = torch.tensor([[1.0,2.0,3.0],[4.0,5.0,6.0]])

print(torch.argmax(a,dim=0))
print(torch.argmin(a,dim=0))

3.1.3 标准差、方差、中间数、众数

import torch

a = torch.tensor([[1.0,2.0,2.0],[4.0,5.0,6.0]])

print(torch.std(a))
print(torch.var(a))
print(torch.median(a))
print(torch.mode(a))

3.1.4 计算input的直方图

import torch

a = torch.rand(2,2)*10
print(a)
print(torch.histc(a,6,0,0))

        第二个参数是指将数据分成几个区间,第三个参数第四个参数默认是0表示以a中最小的值作为初始区间,最大的值作为结束区间。演示结果如下图:

3.1.5 返回频数(只支持一位tensor)

import torch

a = torch.randint(0,10,[10])
print(a)
print(torch.bincount(a))

0出现了..次,1出现了..次.....可以用来统计某一样别样本数量

3.1.6  分布函数torch.distributions

3.1.7 tensor中的随机抽样函数

 用随机数种子能够保证每次抽样的结果是一样的:

import torch

torch.manual_seed(1)

mean = torch.rand(1,2)
std = torch.rand(1,2)

print(torch.normal(mean,std))

3.2 tensor中与线性代数有关函数

3.2.1 tensor中的范数运算

 \sum |a-b|,\sum \sqrt{(a-b)^{2}},\sum \sqrt{(a-b)^{3}}norm:平方和相加开根号

import torch

a = torch.tensor([3.0,4.0])
b = torch.tensor([5.0,8.0])

print(a,b)
print(torch.dist(a,b,p=1))
print(torch.dist(a,b,p=2))
print(torch.dist(a,b,p=3))

print(torch.norm(a))

3.2.2 tensor与矩阵分解

3.2.2.1 矩阵分解介绍

3.2.2.2 EVD分解

         考研的时候考过,不细说。Q是特征向量矩阵,\Sigma是特征值矩阵。要求矩阵满秩。

         PCA与特征值分解(主成分分析):通过一个投影矩阵,将原始的n \times m维特征矩阵(n个特征m个样本,即每一个样本表示成n维向量)映射到k维(最终结果为k \times m)上去(通过投影矩阵k \times n来实现映射)来实现降维。

3.2.2.3 SVD分解

        由于EVD分解只针对满秩矩阵且必须是方阵,我们引出了SVD分解,对矩阵形状和秩没有要求。

         应用:LDA算法中,主要思想是在"新空间"让同类物体的间隔尽可能小,不同类别物体的间隔尽可能大。

         S_{B}描述为同类物体的协方差矩阵, S_{W}描述为不同类物体的协方差矩阵。优化目标是对代价函数求最大值。

 3.3 pytorch

3.3.1 Tensor的裁减运算

        对tensor中元素进行范围性的约束,一是将数据约束在比较小的范围中网络在参数学习中容易稳定,可以实现类似正则化的功能防止过拟合;二是防止梯度离散/梯度爆炸。

import torch

a = torch.rand(2,2)*10
print(a)

print(a.clamp(1,2))   #将数据处理到1-2之间
 

3.3.2  tensor的索引与数据筛选

 3.2.2.1 torch.where

        第一个参数是判断条件,如果满足判断条件选择第二个参数的数据,如果不满足选择第三个参数的数据。类似C++中的 a>b?a:b

import torch


a = torch.rand(4,4)
b = torch.rand(4,4)

print(a)
print(b)

out = torch.where(a>0.5,a,b)
print(out)

 3.2.2.2 torch.index_select

        我们用代码进行分析:

Chapter3 Pytorch与机器学习有关函数(一)

         我们初始化了一个4\times 4的张量,我们取出了第0、3、2行的数据到张量out中。

 3.2.2.3 torch.gather

        我们用代码进行分析:

import torch


a = torch.linspace(1,16,16).view(4,4)
print(a)

out  = torch.gather(a,dim=0,index=torch.tensor([[0,1,1,1],[0,1,2,2],[0,1,3,3]]))
print(out)

          我们初始化了一个4\times 4的张量,分别在第0维上找第 0 1 1 1个数据,即1 6 7 8,然后再取0 1 2 2 个数据......

        如果维度更高那么gather怎么用呢?

  3.2.2.4 torch.masked_select

import torch


a = torch.linspace(1,16,16).view(4,4)
print(a)

mask = torch.gt(a,8)
print(mask)

out  = torch.masked_select(a,mask)
print(out)

         很好理解,不多解释。

  3.2.2.5 torch.take

import torch

a = torch.linspace(1,16,16).view(4,4)
print(a)

out = torch.take(a,index = torch.tensor([0,15,13,10]))
print(out)

        很好理解,不多解释。

3.3.3 tensor的组合和拼接

3.3.3.1 torch.cat

import torch

a = torch.zeros((2,4))
b = torch.ones((2,4))

out = torch.cat((a,b),dim = 0)
print(out)

        我们看到我们在第0维上进行了拼接,原来是两个2\times 4,拼接完成变成了4\times 4的张量。

        我们再将维度修改成1,查看其运行结果。

3.3.3.2 torch.stack

import torch

a = torch.linspace(1,6,6).view(2,3)
b = torch.linspace(7,12,6).view(2,3)

out = torch.stack((a,b),dim = 0)
print(out)
print(out.shape)

         我们来解析一下这个size:

[[[ 1.,  2.,  3.],         [ 4.,  5.,  6.]],        [[ 7.,  8.,  9.],         [10., 11., 12.]]]

        第一维度就有两个数据:[[ 1.,  2.,  3.], [ 4.,  5.,  6.]][[ 7.,  8.,  9.][10., 11., 12.]]

        第二维度也是两个数据[ 1.,  2.,  3.], [ 4.,  5.,  6.]

        第三维度是三个数据1,2,3

        因此这个shape是2\times 2 \times 3的形式。

        而a是[ [1,2,3] ,[4,5,6]]的2\times 3形式,将a和b看作是两个独立的元素在第0维度进行拼接。

        那么如果在第一维度拼接是个什么样的结果呢?

import torch

a = torch.linspace(1,6,6).view(2,3)
b = torch.linspace(7,12,6).view(2,3)

out = torch.stack((a,b),dim = 1)
print(out)

print(out[:,0,:])
print(out[:,1,:])

print(out.shape)

         那么如果在第二维度拼接是个什么样的结果呢?

import torch

a = torch.linspace(1,6,6).view(2,3)
b = torch.linspace(7,12,6).view(2,3)

out = torch.stack((a,b),dim = 2)
print(out)

print(out[:,:,0])
print(out[:,:,1])

print(out.shape)

3.3.4 tensor的切片

3.3.4.1 torch.chunk

import torch

a = torch.rand((3,4))
print(a)

out = torch.chunk(a,2,dim=1)
print(out)

print(out[0],out[0].shape)
print(out[1],out[1].shape)

        对第一维度进行分割,即

        [[0.1813, 0.0810, 0.7142, 0.8603],
        [0.2262, 0.8307, 0.2050, 0.7882],
        [0.1058, 0.8872, 0.7148, 0.1272]]

        对大括号里面进行分割,我们一个括号选出两个组成新的张量,构成两个3\times 2的张量。

3.3.4.2 torch.split

1.和torch.chunk一样的调用方式

import torch

a = torch.rand((3,4))
print(a)

out = torch.split(a,2,dim=1)
print(out)

print(out[0],out[0].shape)
print(out[1],out[1].shape)

2.不平均分割

import torch

a = torch.rand((10,4))
print(a)

out = torch.split(a,3,dim=0)
print(len(out))

for t in out:
	print(t,t.shape)

3.第二种调用方式 :传入list列表,指定我们要切分的尺寸

import torch

a = torch.rand((10,4))
print(a)

out = torch.split(a,[1,3,6],dim=0)
print(len(out))

for t in out:
	print(t,t.shape)

3.3.5 tensor的变形操作

3.3.5.1 tensor.reshape

import torch

a = torch.rand((2,3))
print(a)

out = torch.reshape(a,(3,2))
print(out)

        简单来说,就是进行了简单的排列组合。

3.3.5.2 torch.t

import torch

a = torch.rand((2,3))
print(a)

out = torch.t(a)
print(out)

         对张量进行矩阵运算。

3.3.5.3 torch.transpose

1.用transpose求转置

        将两个维度相互交换:

import torch

a = torch.rand((2,3))
print(a)

out = torch.transpose(a,0,1)
print(out)

        交换a张量的第0维和第一维,相当于求转置。

2.用transpose实现高维交换

import torch

a = torch.rand((1,2,3))
print(a)

out = torch.transpose(a,0,1)
print(out)
print(out.shape)

3.3.5.4 torch.squeeze

        去除维度为1的维度。       

import torch

a = torch.rand((1,2,3))
print(a)


out = torch.squeeze(a)
print(out)
print(out.shape)

3.3.5.5 torch.unsqueeze  

        -1表示在最后一个维度进行拓展。

import torch

a = torch.rand((1,2,3))
print(a)


out = torch.unsqueeze(a,-1)
print(out)
print(out.shape)

3.3.5.6 torch.unbind  

        对维度进行删除,类似于tensor切分的过程:我们会拿到元组,和我们切分拿到的元组类似。

import torch

a = torch.rand((1,2,3))
print(a)


out = torch.unbind(a , dim=1)
print(out)

 tensor([[[0.4037, 0.2314, 0.8198], [0.5632, 0.1900, 0.5313]]])     1 \times 2 \times 3
(tensor([[0.4037, 0.2314, 0.8198]]), tensor([[0.5632, 0.1900, 0.5313]]))  (1 \times 3 ) * 2

        若对第三维进行切分,结果如下:(1 \times 2) *3

 

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

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

相关文章

【毕业设计】酒店评价情感倾向分析系统 - python 深度学习

文章目录0 前言1 概述2 项目所需模块3 数据3.1 数据说明3.1.1 字段说明3.2 数据处理3.2.1 分词处理3.2.3 停用词处理3.2.4 样本均衡3.2.5 建立多层感知机分类模型3.2.6 训练模型3.2.7 网络检测率以及检测结果4 最后0 前言 🔥 Hi,大家好,这里…

回归模型介绍

Datawhale开源学习,机器学习课程,项目地址:https://github.com/datawhalechina/leeml-notes 首先讲机器学习中的:回归,回归Regression可以做哪些东西呢? 股票预测 输入为以往股票走势,预测未来…

HTML标签(下)

一、表格标签 1. 表格的主要作用 表格主要用于显示、展示数据。可以让数据规整、有可读性、有条理。 2. 表格的基本语法 <table><tr><td>单元格内的文字</td>...</tr>... </table><table> </table>是用于定义表格的标签 …

nodejs+vue+elementui零食食品o2o商城系统

目 录 摘 要 1 Abstract 1 1 系统概述 4 1.1 概述 4 1.2课题意义 4 1.3 主要内容 4 2 系统开发环境 5 3 需求分析 7 3.1技术可行性&#xff1a;技术背景 7 3.2经济可行性 7 3.3操作可行性&#xff1a; 8 3.4系统设计规则 8 3.5…

对pure pursuit算法的理解和改进

算法实现 purepursuit的核心其实是一个曲率半径的几何计算。 (x, y)是转换到机器人坐标系上的路径点。L是lookahead distance。r是形成的圆弧半径。D是r和x之间的差值。 根据上面的图形&#xff0c;可以发现有下面的几何关系&#xff1a; 同时通过 y2D2r2y^2 D^2 r^2 y2D2r…

java项目-第134期ssm社团管理系统-java毕业设计

java项目-第134期ssm社团管理系统-毕业设计 【源码请到资源专栏下载】 今天分享的项目是《社团管理系统》 该项目分为前台和后台。主要分成两个角色&#xff1a;普通用户、管理员角色。 普通用户登录前台&#xff0c;看到社团官网发布的一些信息。 比如&#xff1a;首页、新闻…

如何在 .NET MAUI 中加载 json 文件?

引言: 按core传统方式添加 AddJsonFile(“appsettings.json”) 在windows平台和ssr工作正常,但是在 ios 和 android 无法用这种方式,因为资源生成方式不一样. 使用内置资源方式不够灵活而且 ios 平台会提示不能复制 json 文件到目录,于是进行了几天的研究,终于能正确使用了. 资…

1-STM32之GPIO点亮LED

我们在基础部分讲了有关GPIO的方面&#xff0c;从这章开始我们进入模块的讲解&#xff0c;从最开始的LED灯到各种传感器模块进行。专栏预计25个章节。后续可能会不定时的增加。 本专栏芯片为STM32F429 对于工程的移植和新建这里不做讲解&#xff0c;对工程建立不懂得&#xff0…

Vue3 - watch 侦听器(超详细使用教程)

前言 它之所以叫侦听器呢&#xff0c;是因为它可以侦听一个或多个响应式数据源&#xff0c;并在数据源变化时调用所给的回调函数。 大白话说呢&#xff0c;就是你传给 watch 侦听器一个响应式变量&#xff0c;然后当这个变量变化时&#xff0c;自动触发一个你定义的函数&#x…

超实用Word小技巧,常用但很少有人记得住

我们在日常工作中经常使用 Word 进行办公。以下常用Word提示可以为您的工作节省时间和精力&#xff0c;让我们来看看。 技巧一&#xff1a;如何纵向复制文本我们一般水平选择文本&#xff0c;你有没有想过垂直选择文本&#xff1f;先按住【Alt】键&#xff0c;然后拖动鼠标左键…

【Python百日进阶-WEB开发】Day179 - Django案例:11短信验证码

文章目录九、短信验证码9.1 短信验证码逻辑分析9.2 容联云通讯短信平台9.2.1 容联云通讯短信平台介绍9.2.2 容联云通讯短信SDK测试9.2.2.1 美多商城meiduo_mall.apps.verifications.libs中新建yuntongxun包&#xff0c;结构如下&#xff1a;9.2.2.2 ccp_sms.py代码9.2.2.3 CCPR…

一起来庆祝属于GISer的节日GIS DAY!

01 概述 作为一名GISer的你&#xff0c;有没有想过其实我们GISer也有自己的节日&#xff1f;这个节日便是GIS DAY&#xff0c;今年的GIS DAY恰在今天&#xff08;2022年11月16日&#xff09;。究竟什么是GIS DAY&#xff1f;这里为大家介绍一下这个节日。 02 什么是GIS DAY …

vue的移动端项目打包成手机的app软件apk格式

目录 前提准备&#xff1a; 1、vue项目npm run build打包成dist文件夹 2、注册hbuilderx账号&#xff0c;获取appid 步骤 一、创建h5app空模版 二、 将打包完成生成dist文件目录复制到新建的项目里 三、检测打包的index.html是否白屏 四、 配置manifest.js应用入口页面…

作为项目经理必须具备的能力

作为项目管理者&#xff0c;每天都要应对项目中的所有问题&#xff0c;安排任务&#xff0c;还要照顾下属的情绪。管理者应该怎么做。 1、计划制定 项目经理作为项目管理者&#xff0c;需要制定计划&#xff0c;合理化分配任务。 项目经理可以使用甘特图制定项目计划&#xf…

微服务feign接口声明的3种方式使用与分析

前言 feign调用方式是微服务调用最为广泛的使用方式&#xff0c;feign接口声明位置也是比较关键的一环。目前来说&#xff0c;feign的3种接口声明方式各自存在利弊&#xff0c;并不存在最优解决方案&#xff0c;只能根据需求去选择。本文中不作详细项目搭建过程&#xff0c;但…

做3D建模的女生多吗?揭露行业比列

有&#xff0c;但是不多&#xff0c;这是常态✅ 其实就像是IT领域的男女比例一样&#xff0c;但是也不是没有。更何况现在女孩子顶半边天&#xff0c;遇到领导是女生的也不少&#xff0c;未来的情况如何也不能完全的预估。 • ❤️事业是热爱做的事&#xff0c;工作是不得不做…

索引【MySQL】

1.1 概念 索引是一种特殊的文件&#xff0c;包含着对数据表里所有记录的引用指针。可以对表中的一列或多列创建索引&#xff0c; 并指定索引的类型&#xff0c;各类索引有各自的数据结构实现。 1.2 作用 数据库中的表、数据、索引之间的关系&#xff0c;类似于书架上的图书、…

简洁直观解释精确率、召回率、F1 值、ROC、AUC

混淆矩阵 当我们在做二分类预测时&#xff0c;把预测情况与实际情况的所有结果两两混合&#xff0c;结果就会出现以下4种情况&#xff0c;就组成了混淆矩阵。 P&#xff08;Positive&#xff09;&#xff1a;代表正样本N&#xff08;Negative&#xff09;&#xff1a;代表负样…

在vscode中开发sass教程:sass语法

sass官网&#xff1a;Sass世界上最成熟、稳定和强大的CSS扩展语言 | Sass中文网sass&#xff1a;世界上最成熟、最稳定、最强大的专业级css扩展语言&#xff01;sass是一个css的预编译工具&#xff0c;也就是能够更优雅的书写css&#xff1b;1、sass使用说明&#xff1a; 基于…

【毕业设计】后端实现——账单通过关键词简单分析收支

&#x1f308;据说&#xff0c;看我文章时 关注、点赞、收藏 的 帅哥美女们 心情都会不自觉的好起来。 前言&#xff1a; &#x1f9e1;作者简介&#xff1a;大家好我是 user_from_future &#xff0c;意思是 “ 来自未来的用户 ” &#xff0c;寓意着未来的自己一定很棒~ ✨个…