Pytorch基础语法学习1——Tensor语法

Tensor语法

参考文献:

péripatéticien的博客
代码被吃掉了的博客

一、Tensor基本概念

Tensor是Pytorch里面处理的最基本的操作对象,本质上就是一个多维矩阵

Tensor(Pytorch)和数组(numpy)的不同之处:Pytorch可以在GPU上运行,而numpy不行。由此也很容易看出哪一种方式写出的代码可以更高效的运行

0D张量(零维张量)为标量,1D张量为向量(数组),2D及以上为矩阵

  • 0D 张量:0D 张量仅包含一个数字,我们也可以称 0D 张量为标量,深度学习中loss函数的值通常为 0D 张量
  • 1D 张量:1D 张量称为向量,在深度学习中阈值通常为向量的形式
  • 2D 张量:2D 张量称为矩阵,在深度学习中常用于向量数据
  • 3D 张量:3D 张量通常用于时间序列的数据或者文本序列的数据,比如对于文本序列的数据,通常形状为 (batch_size, timesteps, features)
  • 4D 张量:4D 张量通常用于图像数据,形状为 (batch_size, height, width, channels) 或 (batch_size, channels, height, width),channel 的位置和具体使用的深度学习框架有关,在 TensorFlow 2.X 中图像形状为 (batch_size, height, width, channels),而在 PyTorch 中图像的形状为 (batch_size, channels, height, width),这点注意即可。
  • 5D 张量:5D 张量通常用于视频数据,形状为 (batch_size, frames, height, width, channels) 或 (batch_size, frames, channels, height, width),channels 通道的位置和在图像中的一致,不同框架中可能表示 channels 通道维度不同,视频和图像数据相比仅仅是增加了 frames 帧数这一个维度(相当于时间维度)。

二、Tensor的创建

1、从现有数据创建
import torch as to
data = [1, 2, 3]
to.tensor(data)
print(to.tensor(data))

输出结果:tensor([1, 2, 3])

如果是直接打印data:

print(data)

输出结果:[1, 2, 3]

这里可以说明,to.tensor(data)操作并不会对原有的data改变,只是做了一个复制操作,如果data改变输出结果依然会随之改变

2、从现有的numpy数组创建
import torch as to
import numpy as np
data = np.array([1, 2, 3])
to.from_numpy(data)
print(data)

输出结果:[1, 2, 3]

(1)若第五行改为:print(to.from_numpy(data)),输出结果为:tensor([1, 2, 3], dtype=torch.int32)

(2)若3、4、5行改为:

data = np.array([1, 2, 3])
# to.from_numpy(data) 注释掉
print(to.from_numpy)

输出结果为:<built-in method from_numpy of type object at 0x00007FFB90A7A7F0>

这里不能正常打印出数组,相当于打印出了一个地址

(3)若3、4、5行改为:

data = to.tensor([1, 2, 3])
t = data.numpy()
print(t)

输出结果:[1, 2, 3]

原代码是将numpy数组转换成Tensor,而这里的代码是将Tensor转换成numpy数组。

需要注意的是,上面这两种转换方法共用同一个存储空间。这句话意味着,修改其中一个向量的值,另外一个也会随之发生改变(见如下代码):

data = to.tensor([1, 2, 3])
# data = to.inttensor([1, 2, 3])
data[1] = 5 # [0]指的是向量第一个元素,[1]指的是向量第二个元素
t = data.numpy()
print(t)

输出结果为:[1 5 3]

三、创建特殊类型的张量

1、全0张量
import torch as to
print(to.zeros(3))
print(to.zeros(2, 3, 4))

输出结果:

tensor([0., 0., 0.])
tensor([[[0., 0., 0., 0.],
         [0., 0., 0., 0.],
         [0., 0., 0., 0.]],

        [[0., 0., 0., 0.],
         [0., 0., 0., 0.],
         [0., 0., 0., 0.]]])

创建了一个向量和一个三维张量

2、全1张量
import torch as to
print(to.ones(3))
print(to.ones(2, 3, 4))

输出结果:

tensor([1., 1., 1.])
tensor([[[1., 1., 1., 1.],
         [1., 1., 1., 1.],
         [1., 1., 1., 1.]],

        [[1., 1., 1., 1.],
         [1., 1., 1., 1.],
         [1., 1., 1., 1.]]])

这里和全0张量唯一的区别就是将zeros换成了ones,英文意思也很好理解,ones意思是1,zeros意思是0

3、全x张量
import torch as to
print(to.full((3, ), 6))
prin
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值