【pytorch】pytorch基础

一、张量数据类型

1.1 pytorch与python数据类型对比

python pytorch
Int IntTensor of size()
float FloatTensor of size()
Int array IntTensor of size [d1,d2,…]
Float array FloatTensor of size [d1,d2,…]
string ont-hot or Embedding(Word2Vec,glove)

由于PyTorch不是一个完备的语言库,它是面向数据计算的GPU加速库,因此没有内建对string的支持,在PyTorch中可用以下两种方式来表示string:

  • One-hot
  • Embedding
    • Word2vec
    • glove

1.2 pytorch内建的数据类型

Data tyoe dtype CPU tensor GPU tensor
32-bit floating point torch.float32 or torch.float torch.FloatTensor torch.cuda.FloatTensor
64-bit floating point torch.float64 or torch.double torch.DoubleTensor torch.cuda.DoubleTensor
16-bit floating point torch.float16 or torch.half N/A torch.cuda.HalfTensor
8-bit integer (unsigned) torch.uint8 torch.ByteTensor torch.cuda.ByteTensor
8-bit integer (signed) torch.int8 torch.CharTensor torch.cuda.CharTensor
16-bit integer (signed) torch.int16 or torch.short torch.ShortTensor torch.cuda.ShortTensor
32-bit integer (signed) torch.int32 or torch.int torch.IntTensor torch.cuda.IntTensor
64-bit integer (signed) torch.int64 or torch.long torch.LongTensor torch.cuda.LongTensor

Tpye check

  • Tensor.type()

  • type(Tensor)

  • isinstance(Tensor,torch.FloatTensor)

    标量:Dimension 0/rank 0,Deep Learning中常用于loss表示

    Dimension 1/rank 1,Deep Learning中常用于Bias表示

    Dimension 2

    Dim 3:RNN Input with Batch

    Dim4:CNN[b,c,h,w]

    numbel是指tensor占用内存的数量

    创建Tensor

  • Import form array

  • Import from List

uninitialized

  • Torch.empty(2,3)
  • Torch.FloatTensor(d1,d2,d3)
  • Torch.IntTensor(d1,d2,d3)

注意未初始化的api在使用的时候,若后续没有赋值操作覆盖,将会使得随机初始化的值变的非常大或者非常小(troch.nan/inf)

随机初始化

  • torch.rand
  • torch.rand_like
  • torch.randint
  • torch.randn:正态分布
  • torch.normal:自定义分布

set default type

二、torch常用函数

在使用Tensor时,我们首先要掌握如何使用Tensor来定义不同数据类型的变量。和Numpy差不多,PyTorch中的Tensor也有自己的数据类型定义方式,常用的如下:

1.张量Tensors

  • torch.is_tensor(obj) #判断是否为张量,如果是pytorch张量,则返回True
  • torch.is_storage(obj) #判断是否为pytorch Storage,如何是,则返回True
  • torch.set_default_tensor_type(t)
  • torch.numel(input)->int
  • torch.set_printoptions(precision=None, threshold=None, edgeitems=None, linewidth=None, profile=None) #设置打印选项。 完全参考自 Numpy

2.创建操作 Creation Ops

torch.eye

torch.eye(n, m=None, out=None)->Tensor

返回一个2维张量(单位矩阵),对角线数字为1,其它位置为0

参数说明:

  • n (int) – 行数
  • m (int, 可选) – 列数.如果为None,则默认为n
  • out (Tensor,可选) - 输出张量

torch.zero

torch.zeros(*sizes, out=None) → Tensor

返回一个全0的张量,形状由可变参数sizes定义。

torch.ones

torch.ones(*sizes, out=None) → Tensor #返回一个全为1的张量,形状由可变参数sizes定义。

torch.from_numpy

torch.from_numpy(ndarray) → Tensor

numpy.ndarray转换为Tensor。 返回的张量tensor和numpy的ndarray共享同一内存空间。修改一个会导致另外一个也被修改。返回的张量不能调整大小

torch.linspace

torch.linspace(start, end, steps=100, out=None) → Tensor #返回start和end之间长度为steps的一维张量

参数说明:

  • start (float) – 点集的起始值
  • end (float) – 点集的最终值
  • steps (int) – 在startend间的采样数,即返回多少个数
  • out (Tensor, 可选的) – 结果张量

torch.logspace

torch.logspace(start, end, steps=100, out=None) → Tensor

返回一个1维张量,包含在区间10start10end上以对数刻度均匀间隔的steps个点。 输出1维张量的长度为steps,参数说明同torch.linspace

torch.FloatTensor

此变量用于生成数据类型为浮点型的Tensor,传递给torch.FloatTensor的参数可以是一个列表,也可以是一个维度值。torch.IntTensor与此类似。

torch.rand

用于生成数据类型为浮点型且维度指定的随机Tensor,和在Numpy中使用numpy.rand生成随机数的方法类似,随机生成的浮点数据在0~1区间均匀分布

torch.rand(*sizes, out=None) → Tensor

返回一个张量,填充在[0,1]区间的一组均匀分布随机数。 Tensor的形状由变量sizes定义。

torch.randn

torch.randn(*sizes, out=None) → Tensor

用于生成数据类型为浮点型且维度指定的随机Tensor,和在Numpy中使用numpy.randn生成随机数的方法类似,随机生成的浮点数的取值满足均值为0,方差为1的正态分布

torch.randperm

torch.randperm(n, out=None) → LongTensor

输入参数n(int) – 上限(独占),即最大值,返回一个从0n -1的随机整数排列,随机打散。

random.shuffle

torch.arange

torch.arange(start, end, step=1, out=None) → Tensor([start;end))

返回一个1维张量,长度为floor((end−start)/step),floor代表向下取整。包含从startend,以step为步长的一组序列值(默认步长为1)。

torch.range

torch.range(start, end, step=1, out=None) → Tensor([start;end]),现在torch.range将要废弃,

返回一个1维张量,长度为floor((end−start)/step)+1,其中floor代表向下取整数。从start开始,end为结尾,以step为步长的一组值。 step 是两个值之间的间隔,即 Xi+1=Xi+step

torch.full

3.Indexing, Slicing, Joining, Mutating Ops

  • dim 0 first
  • select first/last N
  • select by steps
  • select by specific index
  • ...

dim 0 first

select first/last N

select by steps

通用形式:start : end : step

select by specific index

torch.index_select

torch.index_select(input, dim, index, out=None) → Tensor

参数:

  • input (Tensor) – 输入张量
  • dim (int) – 索引的轴
  • index (LongTensor) – 包含索引下标的一维张量
  • out (Tensor, optional) – 目标张量

沿着指定维度对输入进行切片,取index中指定的相应项(index为一个LongTensor),然后返回到一个新的张量, 返回的张量与原始张量_Tensor_有相同的维度(在指定轴上)。

注意: 返回的张量不与原始张量共享内存空间。

...

select by mask

torch.masked_select

torch.masked_select(input, mask, out=None) → Tensor

  • input (Tensor) – 输入张量
  • mask (ByteTensor) – 掩码张量,包含了二元索引值
  • out (Tensor, optional) – 目标张量

根据掩码张量mask中的二元值,取输入张量中的指定项( mask为一个 ByteTensor),将取值返回到一个新的1D张量,

张量 mask须跟input张量有相同数量的元素数目,但形状或维度不需要相同。 注意: 返回的张量不与原始张量共享内存空间。

select by flatten index

torch.nonzero

torch.nonzero(input, out=None) → LongTensor

参数:

  • input (Tensor) – 源张量
  • out (LongTensor, optional) – 包含索引值的结果张量

返回一个包含输入input中非零元素索引的张量。输出张量中的每行包含输入中非零元素的索引。如果输入inputn维,则输出的索引张量output的形状为 z x n, 这里 z 是输入张量input中所有非零元素的个数。

维度变换

  • view/reshape(view保证numel不变即可)
  • Squeeze/unsqueeze(删减/增加)
  • Transpose/t/permute
  • Expand/repeat

torch.view/torch.reshape

view操作需保证数据有实际意义,不然会将数据造成破坏,数据的存储、维度顺序非常重要

torch.unsqueeze

torch.unsqueeze(input, dim, out=None)

参数:

  • tensor (Tensor) – 输入张量
  • dim (int) – 插入维度的索引
  • out (Tensor, optional) – 结果张量

返回一个新的张量,对输入的指定位置插入维度。注意: 返回张量与输入张量共享内存,所以改变其中一个的内容会改变另一个。如果dim为负,则将会被转化dim+input.dim()+1,指定位置在 1[-a.dim()-1,a.dim()+1]=>[-5,5]之间变化。

example:

torch.squeeze

torch.unbind

torch.unbind(tensor, dim=0)[source]

参数:

  • tensor (Tensor) – 输入张量
  • dim (int) – 删除的维度

移除指定维后,返回一个元组,包含了沿着指定维切片后的各个切片

torch.expand/torch.repeat

  • Expand:broadcasting【不会主动复制数据,只在需要的时候,这是推荐的一种方式;进行操作的时候需要前后dim一致,只能从dim1->dimN;-1表示dim不变】
  • Repeat:memory copied(给出的参数p为在相应的维度上拷贝p次)

torch.t

torch.t(input, out=None) → Tensor

参数:

  • input (Tensor) – 输入张量
  • out (Tensor, optional) – 结果张量

输入一个矩阵(2维张量),并转置0, 1维。 可以被视为函数transpose(input, 0, 1)的简写函数,但是torch.t只适用于2D。

torch.transpose

torch.transpose(input, dim0, dim1, out=None) → Tensor

  • input (Tensor) – 输入张量
  • dim0 (int) – 转置的第一维
  • dim1 (int) – 转置的第二维

返回输入矩阵input的转置。交换维度dim0dim1。 输出张量与输入张量共享内存,所以改变其中一个会导致另外一个也被修改。高维矩阵的转置常用torch.transpose

permute

permute()参数信息是原来Tensor的维度信息

[b,h,w,c]是numpy存储图片的格式,只有这个格式才能导出numpy

posted @   雪隐lys  阅读(495)  评论(0编辑  收藏  举报
编辑推荐:
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
阅读排行:
· winform 绘制太阳,地球,月球 运作规律
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
点击右上角即可分享
微信分享提示