二、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
其次,数据类型的转换:
- torch.tensor(数据)如果未规定类型,则自动推断数据类型。整数默认为torch.int64类型,小数默认为torch.float32类型。
- torch.tensor(数据,dtype=类型)如果规定了类型,则为该类型
- 和2有同样效果的还有特定类型构造函数:torch.IntTensor()、torch.FloatTensor()、torch.BoolTensor()
- 不同类型进行转换:.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. 张量的尺寸
- 张量.shape或张量.size()是这个张量每个维度的长度
- 张量.view(大小:如3,4)可以把张量从一个尺寸变到另一个尺寸,但只能转变语义和存储在行优先上一致的张量。否则需要用.contiguous().view(3,4),.contiguous()拷贝一份张量并将其按语义存储。
- 张量.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数值和列表。