pytorch Tensor

pytorch Tensor

参考文档

Pytorch 之 Tensor 属性与操作

Pytorch中支持的tensor的数据类型及它们的相互转换

三种类型转换函数

PyTorch 深度学习:60分钟快速入门

数据类型的具体介绍和使用(好)

多GPU运行

numpy和tensor

  • numpy和torch tensor互通,可互转,共享潜在内存,即改变其中一个,另一个也会改变

    • # torch 转 numpy
      a = torch.ones(5)
      b = a.numpy()
      # numpy 转 torch
      a = torch.Tensor(b)
      data = torch.from_numpy(data)
      
  • 转换路径

    numpy—>torch tensor—>torch cuda tensor

tensor转cuda

import numpy as np

data = ('A', 'd', 'v')
data = np.array(data)

data = torch.ones((3, 5))
print(data)
# data = torch.from_numpy(data)
data.to("cuda")
TypeError: can't convert np.ndarray of type numpy.str_. The only supported types are: float64, float32, float16, complex64, complex128, int64, int32, int16, int8, uint8, and bool.

==可知能转tensor的类型只有:==float64, float32, float16, complex64, complex128, int64, int32, int16, int8, uint8, and bool.

查看tensorType

import torch

x = torch.ones((3, 5))
print(x)

print('type(x): ', type(x))
print('x.dtype: ', x.dtype)
print('x.device:', x.device)

x.to("cuda") # note:这里必须使用一个变量接收,因为不是改变原数据x,正确写法如下:
x = x.to("cuda")
print('type(x): ', type(x))
print('x.dtype: ', x.dtype)
print('x.device:', x.device)
tensor([[1., 1., 1., 1., 1.],
        [1., 1., 1., 1., 1.],
        [1., 1., 1., 1., 1.]])
# cpu上
type(x):  <class 'torch.Tensor'>
x.dtype:  torch.float32
x.device: cpu
# gpu上
type(x):  <class 'torch.Tensor'>
x.dtype:  torch.float32
x.device: cuda:0

总结:

  • type()函数是查看变量的类型,即属于什么class
  • var.dtype是查看该tensor中数据的类型
  • var.device是查看变量在哪个设备上

Tensor的cuda类型和gpu类型

前提:即在tensor从cpu转到gpu上时,通过查看其dtype可以发现,他的dtype没有变化,都是torch.xxxx,与预想中会自动转成torch.cuda.xxxx不符,即与设想自动转换成cuda数据类型不一致。

常用写法

y = y.to(device=device, dtype=torch.float32)
t_l = t.long()
t_f = t.float()
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 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、付费专栏及课程。

余额充值