【pytorch】tensor常用方法

tensor基本操作

import torch
import numpy as np

DEVICE='cuda' if torch.cuda.is_available() else 'cpu'

# 初始化方法1
x=torch.tensor([[1,2,7],[3,4,5]],dtype=torch.float32,device=DEVICE,requires_grad=True)

# 初始化方法2
input=torch.rand((3,3))
x=torch.rand_like(input) # 产生与input相同尺寸的tensor 数据时均匀分布的
x=torch.ones((2,3)) # 全1





# 常见方法
torch.is_tensor(x) # 判断是不是一个tensor
torch.numel(x) # 统计tensor中元素的个数
torch.zeros((2,3)) # 创建全0的tensor
torch.eye(3,3) # 创建对角阵

x=np.array([1,2,3])
x=torch.from_numpy(x) # 将numpy装换成tensor
torch.linspace(start=2,end=10,steps=5) # 将2-10直接的数字切分为5份
torch.rand((2,3)) # 创建数据为均匀分布
torch.randn((2,3)) # 创建数据为正态分布
torch.randperm(10) # 得到0-9 10个数 但是顺序打乱
torch.arange(start=0,end=10,step=1) #生成0-10区间的数 步长为1 但是不包含10

x=torch.randint(low=1,high=5,size=(2,3)) #可以规定元素的最大最小值
torch.argmax(x,dim=0) # 获取每一列的最大值的下标 dim=0每一列 dim=1是每一行
x=torch.cat((x,x),dim=0) # 将两个tensor堆叠起来 dim=0是纵方向的堆叠 dim=1是横方向的堆叠
list= torch.chunk(x,chunks=2,dim=0) #将一个tensor切开 chunks表示切到哪里为止 返回一个tensor列表


index=torch.tensor([0,2])
x=torch.index_select(x,dim=0,index=index) # 根据索引选择

torch.split(x,3,dim=0) # 将tensor切分为若干份 每份是3个元素
x.t() # 矩阵转置
torch.add(x,1) # 每个元素+1
torch.mul(x,2) # 每个元素乘上2

# 维度调整
x.reshape/view

李宏毅老师课上的快速入门pytorch补充(关键是多了图片)

torch.zeros([1,2,3]) # 创建一个1*2*3立方体 这个立方体的高是1,长是2,宽是3
torch.squeeze(dim=0) # 降维,消除的是第1个维度 如将1*2*3变为2*3的矩形

在这里插入图片描述

torch.zeros([2,3]) # 创建一个2*3矩阵
torch.squeeze(dim=1) # 升维,增加的是第2个维度 如将2*3的矩形变为2*1*3的立方体

在这里插入图片描述

x=torch.zeros([2,1,3])
y=torch.zeros([2,3,3])
z=torch.zeros([2,2,3])
w=torch.cat([x,y,z],dim=1) # 在第一个维度(也就是长)将他们拼起来  w.shape=[2,6,3]

在这里插入图片描述
方便的梯度计算
在这里插入图片描述
Pytorch函数原型中,若是出现*号,则后面的参数全部都是keyword arguments,也就是用到这些参数时候,必须指定参数名

在这里插入图片描述

常见错误

*x is a keyword argument
对于函数原型中*之后的参数全部都是关键参数,如果使用必须书写参数名
*did not specify dim
有些参数,没有默认值,一定要赋值
Tensor for * is on CPU, but expected them to be on GPU:使用设备要配对,要么GPU,要么CPU,可以全局定义好device,然后统一用它
The size of tensor a (5) must match the size of tensor b (4) at non-singleton dimension 1
tensor运算的时候尺寸不对,可以使用transpose、unsqueeze、squeeze等操作将尺寸变为一致之后再处理
CUDA out of memory. :显存爆了,把batch-size调小一点
expected scalar type Long but found Float:类型不匹配

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: PyTorch中的tensor切片是指从一个tensor中选择特定的元素或子集。切片操作可以通过索引或范围来指定。下面是关于PyTorch tensor切片的一些重要信息: 1.基本切片操作:您可以使用索引操作符[]来对tensor进行切片。例如,如果有一个3x3的tensor,可以使用`tensor[1:3, 0:2]`来获得第二行和第三行的前两列。 2.索引规则:切片操作的索引是从0开始的。在切片时,起始索引是包含在切片中的,而结束索引是不包含在切片中的。例如,`tensor[1:3]`将返回索引为1和2的元素,但不包括索引为3的元素。 3.负数索引:您可以使用负数索引来从后面开始对tensor进行切片。例如,`tensor[-1]`将返回最后一个元素。 4.步长操作:您可以使用步长操作来跳过某些元素进行切片。例如,`tensor[0:3:2]`将返回索引为0和2的元素。 5.高维tensor切片:对于高维tensor,您可以在多个维度上进行切片。例如,`tensor[:, 1]`将返回所有行的第二列。 6.更改切片:切片的结果是原始tensor的视图,并且共享相同的内存。因此,对切片的更改将反映在原始tensor上。 7.使用切片进行赋值:您可以使用切片操作来对tensor的某些元素进行赋值。例如,`tensor[1:3, 0:2] = 0`将第二行和第三行的前两列设置为0。 请注意,这只是关于PyTorch tensor切片的一些基本信息,更复杂的操作如高级索引和掩码索引等也是可行的。 ### 回答2: PyTorch中的tensor切片是指从一个tensor中选择部分元素的操作。通过切片操作,我们可以访问或修改tensor中的特定元素,或者创建一个新的tensor来存储所选元素。 切片操作的基本语法是t[start:stop:step],其中start表示起始位置,stop表示结束位置(但不包括该位置上的元素),step表示步长。 例如,如果有一个1维tensor t = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9],我们可以使用切片操作来选择其中的一部分元素。 - t[2:6]将返回一个新的tensor,包含元素2, 3, 4, 5; - t[:5]将返回一个新的tensor,包含元素0, 1, 2, 3, 4; - t[5:]将返回一个新的tensor,包含元素5, 6, 7, 8, 9; - t[1:8:2]将返回一个新的tensor,包含元素1, 3, 5, 7。 对于多维tensor,我们可以使用相同的切片操作来选择各个维度上的元素。 例如,如果有一个2维tensor t = [[0, 1, 2], [3, 4, 5], [6, 7, 8]],我们可以使用切片操作来选择其中的一部分元素。 - t[1:3, :2]将返回一个新的tensor,包含元素[[3, 4], [6, 7]],表示选择第1行和第2行的前2列; - t[:, 1]将返回一个新的tensor,包含元素[1, 4, 7],表示选择所有行的第1列。 需要注意的是,切片操作返回的是原始tensor的一个视图,而不是创建一个新的tensor。这意味着对切片后的tensor进行修改,将会影响到原始tensor。如果需要创建一个新的tensor对象,可以使用切片操作的clone()方法来复制原始tensor的数据。 ### 回答3: PyTorch是一个常用的深度学习框架,TensorPyTorch中用于处理数据的基本数据结构。在PyTorch中,我们可以使用Tensor进行切片操作来选择或修改我们需要的元素。 通过索引操作,我们可以对Tensor进行切片。在切片操作中,可以使用逗号分隔的索引列表来选择多个维度的元素。例如,使用tensor[a:b, c:d]的切片操作,可以选择Tensor中从第a行到第b行(不包括b)以及第c列到第d列(不包括d)的元素。 在切片操作中,索引的开始和结束位置都是可选的,如果不指定,则默认为从开头到末尾。此外,还可以使用负数索引来表示从末尾开始的位置。 除了使用切片进行选择之外,我们还可以使用切片进行修改。通过将切片操作放在赋值语句的左侧,我们可以将新的值赋予切片所选择的元素。 值得注意的是,切片操作返回的是原始Tensor的视图,而不是复制。这意味着对切片的修改也会反映在原始Tensor上。 需要注意的是,在PyTorch中进行切片操作不会对Tensor进行内存复制,这样可以减少内存消耗并提高代码的执行效率。 总而言之,PyTorch中的Tensor切片操作允许我们根据需要选择或修改Tensor中的元素。通过索引和切片操作,我们可以根据具体需求灵活操作Tensor的数据。这为我们在深度学习任务中提供了丰富的选择和便利性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值