首页 > 其他分享 >深度学习1:PyTorch张量tensor的基本使用

深度学习1:PyTorch张量tensor的基本使用

时间:2024-03-12 21:30:32浏览次数:21  
标签:tensor randint torch 张量 PyTorch 400 print x1

深度学习是一种机器学习方法,同时与人工智能研究的范畴。

文章目录

1. 深度学习的基础网络

深度学习在不同任务中构建不同的网络,可以根据基础神经网络的组合构成复杂的神经网络,以下为基础神经网络:
(1)全连接神经网络(FCNN):最常用的神经网络,通常用于数值拟合或者分类,又称分类网络
(2)卷积神经网络(CNN):最著名的神经网络,通常用于提取图像特征,其后往往跟着一个全连接网络,对提取的特征进行分类
(3)循环神经网络(RNN):通常用于处理序列数据,实例:早期的文本处理
(4)基于注意力机制的神经网络(Attention Mechanism-based Neural Network):基于Transformer发展而形成的网络模型

2. Pytorch的开发环境(PyCharm和PyTorch安装)

可见其他笔记,这里不过多赘述

3.张量基础

张量可以理解为是多维数组的推广,零阶张量是标量(一般数值),一阶张量是一维数组(向量),二阶张量是二维数组…

3.1 张量的定义

在pytorch中,通常用一维张量表示向量,二维张量表示矩阵或者一张单通道图像,三维张量表示一个特征图或者一张彩色图片,用四维张量表示一个批量的特征图或者彩色图像,用五维张量表示带时间或者视频的数据

#可以通过[[]]数中括号的个数来判断是几阶张量
import torch
x = torch.tensor(2)#0阶张量
x = torch.tensor([2,3])#1阶张量
x = torch.tensor([[2,3],[4,5]])#2阶张量
x = torch.tensor([[2,3,4],[4,5,6],[7,8,9]])#2阶张量

3.2 随机生成张量

x = torch.randn(a,b,c,d)#标准正态分布,均值为0,方差为1
x = torch.rand(a,b,c,d)#从[0,1)均匀分布中抽取一组随机数
x = torch.randint(a,b,[e,f,c,d])#指定范围[a,b)中的整数

3.3 张量的数据类型

print(x.dtype)#使用该属性输出x的数据类型
x = torch.tensor([2,3]) #int64
x = torch.Tensor([2,3]) #float32
x = torch.tensor([2,3.])#float32
x = torch.ByteTensor([2,3])#unit8
x = torch.CharTensor([2,3])#int8
x = torch.ShortTensor([2,3])#int16
x = torch.IntTensor([2,3])#int32
x = torch.LongTensor([2,3])#int64
x = torch.FloatTensor([2,3])#float32
x = torch.DoubleTensor([2,3])#float64

#float32的不同表达方式
x = torch.Tensor([2,3]#默认生成)
x = torch.FloatTensor([2,3])#显式声明
x = torch.tensor([2,3]),dtype=torch.float32)#语句声明数据
x = torch.tensor([2,3]).float()#通过定义转换

3.4 张量形状

形状为toch.Size([300,400])的张量可以表示为灰度图,高为300,宽为400;
形状为toch.Size([3,300,400])的张量可以表示为RGB图像,其中3为通道数
形状为toch.Size([32,3,300,400])的张量可以表示为批量图像,32为批量的大小(batch_size)

print(x.size())#使用该属性输出x的张量形状

3.5 张量切片

print(x[::,start:end:step,...])#第二维上,从start到end-1,每step取新值;其中“step”或者“:step”可以省略,默认step为1
print(x[x<=0])

3.6 全0全1张量

x1 = torch.zeros_like(x)
x1 = torch.ones_like(x)

4. 张量的数学函数

4.1 sum()–求和

print(x.sum())#求x中所有元素之和
print(x.sum(dim=a))#沿着第a+1维元素相加
print(sum(x,dim=a))#沿着第a+1维元素相加

4.2 min()和max()–求最小值和最大值

print(x.min())#求x中最小元素的值
print(x.min(dim=0))#求第1维上x最小值
print(min(x,dim=0))#求第1维上x最小值
print(x.min(dim=0)[0])#由最小值构成的张量
print(x.min(dim=0)[1])#由最小值索引构成的张量

4.3 mean()和sqrt()–求平均值和开方运算

注意:1.mean()函数只对浮点数有效

print(x.float().mean())#求所有元素的平均值
print(x.float().mean(dim=0))#求第1维元素平均值
print(x.float().sqrt())#求所有元素进行逐个开方

4.4 argmax()和argmin()–返回最大(小)值的索引

注意:1.argmax()函数多用于处理分类结果,可以获取最可能类别的索引

print(x.argmax(dim=0))第1维上最大值索引构成的张量

4.5 to()方法

将张量转移到指定的设备上(GPU/CPU)

x.to('cuda')
x.to('cpu')

4.6 item()函数

对于只有一个元素的张量,提取元素值,转为一般数值

x = torch.tensor([[[2]]])

5. 张量的变形

5.1 reshape()和view()方法–改变形状

x = torch.randint(0,6,[10,20])#10*20
x1 = x.reshape(10,4,5)#10*4*5
x1 = x.view(10,4,5)#10*4*5

#在reshape()中,使用参数-1,可以自动计算维度
x1 = x.reshape(1,-1)

5.2 unsqueeze()和squeeze()–升维和降维

注意:1.方法用于张量增加(减去)一个长度为1的维

x = torch.randint(0,6,[10,20])#10*20
x1 = x.unsqueeze(0)#1*10*20
x1 = x.squeeze(0)#20

5.3 transpose()和t()和permute()函数–转置

注意:1.t()只能用于2阶张量

#transpose()--只罗列交换维度
x = torch.randint(0,6,[2,4,6,8])#2*4*6*8
x1 = x.transpose(0,3)#交换第1维和第4维#8*4*6*2

#t()--只用于2维交换维度
x = torch.randint(0,6,[2,4])#2*4
x1 = x.t()#4*2

#permute()--罗列所有的维度
x1 = x.permute(3,1,2,0)

6. 张量的常用运算

6.1 张量基本数学运算

x = torch.randint(0,6,[2,4])
y = 3
print(x+y)

6.2 dot()-点积运算(1维)

注意:1.用于实现两个同等长度的1维张量的点积运算(元素相乘,再求和)

x = torch.randint(0,6,[4])
y= torch.randint(-2,6,[4])
z=torch.dot(x,y)

6.3 mm()-矩阵相乘(2维)

x = torch.randint(0,6,[2,3])#2*3
y= torch.randint(-2,6,[3,4])#3*2
z=torch.dot(x,y)#2*2

6.4 bmm()-批量矩阵相乘(3维)

注意:1.batch_size必须相等;2.矩阵相乘

x = torch.randint(0,6,[32,200,400])#32张200*400的图像
y= torch.randint(-2,6,[32,400,300])#32张400*300的图像
z=torch.dot(x,y)#32张200*300的图像

6.5 matmul()-多个维度矩阵相乘(多维)

x = torch.randint(0,6,[5,7,200,400])#5*7张200*400的图像
y= torch.randint(-2,6[5,7,400,300])#5*7张400*300的图像
z=torch.dot(x,y)#5*7张200*300的图像

6.6 常用数学函数

y = torch.round(x)#四舍五入
y = torch.exp(x)#e的x次方
y = torch.log(x)#ln(x)
y = torch.log10(x)#lg(x)
y = torch.pow(x,2)#x的2次幂

6.7 张量的广播机制

将一个数据复制为多个数据,进而支持不同形状的两个张量进行运算

x = torch.randint(1,5,[3,1])#3*1 eg:([[3],[2],[3]])-->([[3,3,3,3],[2,2,2,2],[3,3,3,3]])
y = torch.randint(1,5,[1,4])#1*4
print(x+y)#3

6.8 张量与其他对象转换

#张量转数组
a = [[4,1,0],[0,4,2]]
a = np.array(a)
b = torch.tensor(a)
b = torch.from_numpy(a)

#数组转张量
x = torch.randint(1,5,[3,1])
a = np.array(x)
b = x.numpy(a)

#张量转列表
x = torch.randint(1,5,[3,1])
print(x.tolist())

#图片转张量(to_pil——image())
img = Image.open(img_path).convert('RGB')#图片转rgb
img1 = np.array(img)#rgb转数组
img1 = torch.ByteTensor(img1)#数组转张量
img2 = to_pil_image(np.array(img1),mode='RGB')#张量转pil图像

6.9 cat()-张量的拼接

x1 = torch.randint(1,5,[3,1])#3*1
x2 = torch.randint(1,5,[3,2])#3*2
x = torch.cat([x1,x2],dim=1)#3*3

标签:tensor,randint,torch,张量,PyTorch,400,print,x1
From: https://blog.csdn.net/Moxiaix/article/details/136629270

相关文章

  • 张量维度改变总结
    文章目录一、view()或reshape()二、unsqueeze()三、squeeze()四、transpose()五、torch.expand_dims一、view()或reshape()  view()或reshape():这两个函数可以用于改变张量的形状,但保持元素总数不变。它们可以接受一个新的形状作为参数,并返回一个新的张量......
  • 探索PyTorch:介绍及常用工具包展示
    前言PyTorch作为一个强大的开源深度学习框架,近年来在科学计算和人工智能领域备受欢迎。它提供了灵活的张量计算和动态计算图的功能,使得构建和训练深度神经网络变得更加简单和高效。本文将介绍PyTorch的基本概念,并展示一些常用的PyTorch工具包,帮助读者更好地了解和利用PyTorch进......
  • MindSpore自定义算子中的张量维度问题
    技术背景在前面的几篇博客中,我们介绍了MindSpore框架下使用CUDA来定义本地算子的基本方法,以及配合反向传播函数的使用,这里主要探讨一下MindSpore框架对于CUDA本地算子的输入输出的规范化形式。测试思路MindSpore使用的CUDA算子规范化接口形式为:extern"C"intCustomOps(intn......
  • pytorch_lightning的使用
    Reference1.【PyTorchLigntning】快速上手简明指南2.PytorchLightning完全攻略3.PyTorchLightning教程四:超参数的使用4.小风_的CSDN......
  • 4-2张量的数学运算
    张量的数学运算主要有:标量运算,向量运算,矩阵运算,以及使用非常强大而灵活的爱因斯坦求和函数torch.einsum进行任意维的张量运算。此外我们还会介绍张量运算的广播机制:本篇文章内容如下:标量运算向量运算矩阵运算任意维张量运算广播机制importtorchprint("torch.__vers......
  • 【软件安装】pytorch安装(windows10,pip版)
    前提必须先安装cuda与cudnn,教程:cuda与cudnn部署安装同时确认你的CUDA版本,nvidia-smi:确认版本是12.4,继续往下走安装pytorch前往官网,并且往下滑动,直到你看见INSTALLPYTORCH:PyTorch看左下角的PreviousversionsofPyTorch,点进去:这里显示最新的是v2.2.0版本,咱就下这个,按设......
  • Pytorch学习笔记
    PyTorch学习教程1-安装PyTorchPyTorch安装官网选择对应的版本进行下载链接的复制(注意CUDA版本和DriverVersion版本的一致性)注意conda需要换源换源后直接使用下面的指令。condainstallpytorchtorchvisiontorchaudiopytorch-cuda=11.8-cpytorch-cnvidia以下是注......
  • 4-1张量的结构操作
    本篇我们介绍张量的结构操作。张量结构操作主要包括:张量创建、索引切片、维度变换、合并分割。1.创建张量张量创建的许多方法和numpy中创建array的方法很像。importnumpyasnpimporttorcha=torch.tensor([1,2,3],dtype=torch.float)print(a)"""tensor([1.,......
  • 基于OpenMV‍与tensorflow LITE的害虫识别
    本文涉及技术:OPENMV,EdgeImpulse,OPENMVIDE,TinyML,单片机图像处理,神经网络学习;OPENMVOpenMV摄像头是一款小巧,低功耗,低成本的电路板,它帮助你很轻松的完成机器视觉(machinevision)应用。你可以通过高级语言Python脚本(准确的说是 MicroPython ),而不是C/C++。Python的高级数据......
  • Windows环境下Pytorch项目搭建在Docker中运行
    Windows环境下Pytorch项目搭建在Docker中运行1.安装windows版本的Docker​ 网上已有诸多博客教程,这里就不再赘述。2.搭建本地Pytorch环境​ 搭建本地Pytorch环境的方式我使用了两种方式,推荐使用第一种。​ 第一种:​ (1)在dockerhub中(https://hub.docker.com),找到自己版本......