[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


目录

1. 导入库及检查版本

2. Hello World

3. 基本数据单元

3.1 torch支持的数据结构

3.2 数据的类型:dtype=torch.xxx

3.3 数据内容: [[xx,xx], [xx,xx]]

3.4 数据运算的设备:device="xxx"

4. Tensor实例/样本创建概述

4.1 Tensor实例化的本质是类模板实例化+类的实例化

4.2 创建tensor实例的主要输入参数

4.3 普通tensor实例的创建

4.3 torch.Tensor与torch.tensor的区别

5. tensor的成员

5.1 Tensor的公共属性

5.2 Tensor的公共操作

5.3 Tenosor的运算方法


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基础 - 稀疏矩阵与其创建方法

[PyTroch系列-11]:PyTorch基础 - 张量Tensor元素的排序

[PyTroch系列-4]:PyTorch基础 - 张量(Tensor)的创建方法