欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

二、pytorch核心概念:1.张量数据结构

程序员文章站 2024-03-23 09:32:34
...

本博客是阅读eat pytorch in 20 day第二章的个人笔记

1、张量数据结构

1. 张量的数据类型
首先,是数据类型的分类:
float: torch.float64 torch.float32 torch.float16
int:torch.int64 torch.int32 torch.int16 torch.int8
其它:torch.unit8 torch.bool
其次,数据类型的转换:

  1. torch.tensor(数据)如果未规定类型,则自动推断数据类型。整数默认为torch.int64类型,小数默认为torch.float32类型。
  2. torch.tensor(数据,dtype=类型)如果规定了类型,则为该类型
  3. 和2有同样效果的还有特定类型构造函数:torch.IntTensor()、torch.FloatTensor()、torch.BoolTensor()
  4. 不同类型进行转换:.float()、.type(类型)、.type_as(数据)。如:
i = torch.tensor(1); print(i,i.dtype)
x = i.float(); print(x,x.dtype) #调用 float方法转换成浮点类型
y = i.type(torch.float); print(y,y.dtype) #使用type函数转换成浮点类型
z = i.type_as(x);print(z,z.dtype) #使用type_as方法转换成某个Tensor相同类型

2. 张量的维度
张量.dim() 就是这个张量的维度
3. 张量的尺寸

  1. 张量.shape或张量.size()是这个张量每个维度的长度
  2. 张量.view(大小:如3,4)可以把张量从一个尺寸变到另一个尺寸,但只能转变语义和存储在行优先上一致的张量。否则需要用.contiguous().view(3,4),.contiguous()拷贝一份张量并将其按语义存储。
  3. 张量.reshape(大小)相当于 张量.contiguous().view(3,4)。能够在语义和存储在行优先上不一致(存储结构扭曲)时完成张量尺寸的变换。
    关于.view(大小:如3,4)和 张量.reshape(大小)的区别见:https://blog.csdn.net/qq_37828380/article/details/107855070

4. 张量和numpy数组
Tensor和numpy的相互转换:torch.from_numpy(numpy数组)和张量.numpy()。这两种方法关联的Tensor和numpy数组是共享数据内存的。如果对调用数据操作后返回到调用数据,二者都会改变。
用张量.clone()中断这种关联。
此外,用.item()和.tolist()把张量转换成python数值和列表。