Tensor语法
文章目录
参考文献:
一、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