[PyTroch系列-3]:PyTorch基础 - Hello World程序与张量(Tensor)概述
Posted 文火冰糖的硅基工坊
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了[PyTroch系列-3]:PyTorch基础 - Hello World程序与张量(Tensor)概述相关的知识,希望对你有一定的参考价值。
作者主页(文火冰糖的硅基工坊):https://blog.csdn.net/HiWangWenBing
本文网址:https://blog.csdn.net/HiWangWenBing/article/details/119378227
目录
4.3 torch.Tensor与torch.tensor的区别
1. 导入库及检查版本
import numpy as np
import torch
2. Hello World
print("Hello World")
print(torch.__version__)
print(torch.cuda.is_available())
3. 基本数据单元
3.1 torch支持的数据结构
(1)张量:tensor (Torch定义了专门的结构)
(2)变量:variable(利用Python的变量)
(3)神经网络:nn (Torch定义了专门的结构)
3.2 数据的类型:dtype=torch.xxx
3.3 数据内容: [[xx,xx], [xx,xx]]
数据的内容,以多维数组的形式[[xx,xx], [xx,xx]]提供给torch。
3.4 数据运算的设备:device="xxx"
cpu, cuda, xpu, mkldnn, opengl, opencl, ideep, hip, msnpu, xla, vulka
4. Tensor实例/样本创建概述
4.1 Tensor实例化的本质是类模板实例化+类的实例化
注意:这里不是创建tensor数据结构本身,而是创建tensor的实例。
不同的说法,体现了对tensor本质的理解不同。
tensor本质上是一种数据结构,一种组织多维特征的数据结构,它是torch已经预先定义好的数据结构模板。
使用者只是定义了tensor的一个实例,或者说定义tensor的一个样本而已。
当然,由于tensor的维度是任意的,因此在创建tensor实例的时候,同时也明确了tensor的特征的维度。
因此,从Python编程语言的角度看,tensor实质是“类”模版。
4.2 创建tensor实例的主要输入参数
- Tensor的维度:通过[ [ ], [ ] ]或( , )来标识
- Tensor的数据:通过[ [x11, x12 ], [x21,x22 ] ]或( x, y)来承载
- Tensor中数据的类型:dtype=torch.xxx
- Tensor的计算的硬件类型:device="xxx": cpu, cuda, xpu, mkldnn, opengl, opencl, ideep, hip, msnpu, xla, vulka
4.3 普通tensor实例的创建
4.3 torch.Tensor与torch.tensor的区别
在Pytorch中,Tensor和tensor都用于生成新的张量。
>>> a = torch.Tensor([1, 2])
>>> a
tensor([1., 2.])
>>> a=torch.tensor([1,2])
>>> a
tensor([1, 2])
(1)torch.Tensor
torch.Tensor()是Python模板类,更明确的说,是默认张量类型torch.FloatTensor()的别名,torch.Tensor([1,2]) 会调用Tensor类的构造函数__init__,生成单精度浮点类型的张量。
>>> a=torch.Tensor([1,2])
>>> a.type()
'torch.FloatTensor'
(2)torch.tensor()
torch.tensor()仅仅是Python的函数,函数原型是:
torch.tensor(data, dtype=None, device=None, requires_grad=False)
其中data可以是:list, tuple, array, scalar等类型。
torch.tensor()可以从data中的数据部分做拷贝(而不是直接引用),根据原始数据类型生成相应的torch.LongTensor,torch.FloatTensor,torch.DoubleTensor。
>>> a = torch.tensor([1, 2])
>>> a.type()
'torch.LongTensor'
>>> a = torch.tensor([1., 2.])
>>> a.type()
'torch.FloatTensor'
>>> a = np.zeros(2, dtype=np.float64)
>>> a = torch.tensor(a)
>>> a.type()
torch.DoubleTensor
5. tensor的成员
5.1 Tensor的公共属性
- Torch.type:Tensor数据类型, int、float、?
- Torch.device:执行的处理器,CPU or GPU
- Torch.layout:内存布局,稀疏压缩存储和稠密非压缩存储。
- Torch.shape:张量的形状(维度)
(1)属性的读
#代码示例
a = torch.Tensor([[1,2], [3,4]]) #直接构建Tensor内容和维度,内容数据是确定的
print(a)
print(a.device)
print(a.layout)
print(a.dtype)
print(a.type)
print(a.type())
print(a.size())
print(a.shape)
#输出结果
tensor([[1., 2.],
[3., 4.]])
cpu
torch.strided
torch.float32
<built-in method type of Tensor object at 0x000002655E4F1300>
torch.FloatTensor
torch.Size([2, 2])
torch.Size([2, 2])
(2)属性的配
- 通过Tensor类进行配置
a = torch.Tensor([[1,2], [3,4]], device=torch.device("cpu") )
print(a)
print(a.device)
print(a.layout)
print(a.dtype) #tensor的数据类型
print(a.type) #tensor本身的类型
print(a.type()) #tensor的数据类型
print(a.size())
print(a.shape) #tensor的维度
输出:
tensor([[1., 2.],
[3., 4.]])
cpu
torch.strided
torch.float32
<built-in method type of Tensor object at 0x000002655F154BC0>
torch.FloatTensor
torch.Size([2, 2])
torch.Size([2, 2])
- 通过tensor函数进行配置
a = torch.tensor([[1,2], [3,4]], dtype=torch.float64, device=torch.device("cpu") )
print(a)
print(a.device)
print(a.layout)
print(a.dtype) #tensor的数据类型
print(a.type) #tensor本身的类型
print(a.type()) #tensor的数据类型
print(a.size())
print(a.shape) #tensor的维度
输出:
tensor([[1., 2.],
[3., 4.]], dtype=torch.float64)
cpu
torch.strided
torch.float64
<built-in method type of Tensor object at 0x000002655F1AA700>
torch.DoubleTensor
torch.Size([2, 2])
torch.Size([2, 2])
5.2 Tensor的公共操作
- type(): 如上图
- size(): 如上图
5.3 Tenosor的运算方法
(1)使用重载后的Python运算符:+、-
(2)使用Torch提供的通用方法:Torch.add、Torch.sub......
(3)使用Tensor实例自带的成员函数xxx.add()、xxx.sub => 不修改tensor实例的值
(4)使用Tensor实例自带“in place”运算: xxx_add()、xxx.sub_=> 直接修改tensor实例的值
也就是说,要完成Tensor的某种运算,其实有很多种方法和手段。
作者主页(文火冰糖的硅基工坊):https://blog.csdn.net/HiWangWenBing
本文网址:https://blog.csdn.net/HiWangWenBing/article/details/119378227
以上是关于[PyTroch系列-3]:PyTorch基础 - Hello World程序与张量(Tensor)概述的主要内容,如果未能解决你的问题,请参考以下文章
[PyTroch系列-16]:PyTorch基础 - 张量的操作 - 变形
[PyTroch系列-13]:PyTorch基础 - 张量的操作 - 筛选过滤
[PyTroch系列-7]:PyTorch基础 - 张量Tensor的算术运算
[PyTroch系列-5]:PyTorch基础 - 稀疏矩阵与其创建方法