[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定义了专门的结构)

从Python的List [ ]的数据结构 =》 Numpy.Array =》 Torch.Tensor

  • Python list

数据元素可以是任意类型,数据元素的数据类型可以不相同。

  • Numpy.Array

Numpy数组元素的数据类型是相同的,且必须是数值类型,且通常是2维的,且支持在CPU上运行。

  • Torch.Tensor:

与Numpy.array一样,Tensor中的元素的数据类型是必须相同的,与Numpy大体相同。

Tensor在Numpy.array的基础上,进行了增强:

Tensor中的数据元素可以是任意维度的

Tensor可以支持在GPU上执行

支持自动求导等于深度学习相干的操作。

(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

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

文火冰糖的硅基工坊

你的鼓励是我前进的动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值