【Pytorch】 理解张量Tensor

简介: 【Pytorch】 理解张量Tensor

张量Tensor是什么?


在深度学习中,我们经常会遇到一个概念:张量Tensor。那么,张量Tensor到底是什么呢?它有什么用处呢?

首先,我们要明白一个基本的数学概念:矩阵Matrix。矩阵Matrix是一个由若干个数字按照一定的行列排列组成的表格。例如:

1 2 3
4 5 6
7 8 9


这就是一个3×3的矩阵Matrix,它有3行3列,每个位置上都有一个数字。我们可以用矩阵Matrix来表示很多东西,比如线性方程组、线性变换、向量Vector等等。

向量Vector其实就是一种特殊的矩阵Matrix,它只有一行或者一列。例如:

1
2
3


这就是一个3×1的向量Vector,它只有一列,每个位置上都有一个数字。我们可以用向量Vector来表示很多东西,比如坐标、速度、力等等。


那么,张量Tensor又是什么呢?简单地说,张量Tensor就是一个更高维度的矩阵Matrix。如果矩阵Matrix可以看作是由若干个数字组成的二维表格,那么张量Tensor可以看作是由若干个数字组成的多维立方体(或者其他形状)。例如:


5057c69fa67a4e4f83aecf4b5417b033.png


这就是一个2×2×2的张量Tensor,它有2层2行2列。我们可以用张量Tensor来表示很多东西,比如彩色图像、声音信号、神经网络参数等等。

参考:张量(Tensor):神经网络的基本数据结构

参考: Canonical Forms of 2x2x2 and 2x2x2x2 Tensors


张量的创建


张量Tensor是一个n维的数值数组,可以用来表示复杂的数学对象和运算。在TensorFlow中,张量Tensor是最基本的数据类型,可以用不同的函数来创建。


常用的创建张量Tensor的函数有:


tf.constant (value, dtype=None, shape=None, name=‘’):根据给定的值、数据类型、形状和名称创建一个常量张量Tensor。

tf.zeros (shape, dtype=tf.float32, name=None):根据给定的形状、数据类型和名称创建一个全零张量Tensor。

tf.ones (shape, dtype=tf.float32, name=None):根据给定的形状、数据类型和名称创建一个全一张量Tensor。

tf.fill (dims, value, name=None):根据给定的维度、值和名称创建一个填充指定值的张量Tensor。

tf.linspace (start, stop, num, name=None):根据给定的起始值、终止值和数量创建一个线性分布的张量Tensor。

tf.range (start, limit=None, delta=1, dtype=None,name=‘range’):根据给定的起始值、限制值、步长、数据类型和名称创建一个范围内分布的张量Tensor。


例如:

import tensorflow as tf
t1 = tf.constant([1.0 , 2.0 , 3.0]) # 创建一个一维浮点型常量张量
t2 = tf.zeros([2 , 3]) # 创建一个二维全零整型张量
t3 = tf.ones([3 , 4]) # 创建一个三维全一整型张量
t4 = tf.fill([2 , 2], 5) # 创建一个二维填充5 的整型张量
t5 = tf.linspace(10.0 , 13.0 , 4) # 创建一个一维线性分布从10 到13 的浮点型张量
t6 = tf.range(10 , 20 , 2) # 创建一个一维范围从10 到20 步长为2 的整型张量

如何创建具有已知值的张量


为什么要用张量Tensor呢?


在深度学习中,我们需要处理很多复杂而高维的数据结构和运算。如果只用普通的矩阵Matrix和向量Vector来表示和计算,可能会非常麻烦和低效。而使用张量Tensor,则可以让我们更方便地存储和操作数据,并且利用其内在的多重线性映射特性来实现各种复杂而高效的运算。


例如,在计算机视觉中,我们常常需要处理彩色图像文件(RGB)。每个彩色图像文件(RGB)都可以看作是一个三维张量Tensor:第一维表示图像中每个像素的位置,第二维表示图像中每个像素的颜色通道(R、G、B),第三维表示每个颜色通道中每个像素的强度(0-255)。例如,一个256×256的彩色图像文件(RGB)就可以表示为一个256×256×3的张量Tensor。


我们可以用PyTorch来加载和处理彩色图像文件(RGB),并将它们转换为张量Tensor。PyTorch提供了一些模块和函数来方便我们操作图像数据,比如torchvision、imageio等。下面是一个简单的示例:

import torch
import imageio.v2 # 用于加载图像文件
import torchvision # 用于转换图像格式
img_arr = imageio.v2.imread('../data/image-dog/bobby.jpg') # 加载一张狗狗的图片
img = torch.from_numpy(img_arr) # 将numpy数组转换为张量Tensor
img = img.permute(2, 0, 1) # 将张量Tensor的排列顺序从H*W*C变为C*H*W
img = img.float() # 将张量Tensor的数据类型从整数变为浮点数
img = img / 255.0 # 将张量Tensor的数据范围从0-255变为0-1
# 或者我们可以直接用torchvision.transforms模块中提供的函数来实现上述操作:
transform = torchvision.transforms.Compose([ # 定义一个转换函数,包含多个步骤
    torchvision.transforms.ToTensor(), # 将numpy数组或PIL图片转换为张量Tensor,并自动调整排列顺序和数据范围
])
img = transform(img_arr) # 应用转换函数
print(img.shape) # 打印张量Tensor的形状——> (通道数, 高度, 宽度)

通过上述代码,我们就可以将一张彩色图像文件(RGB)表示为一个三维张量Tensor,并且符合PyTorch处理图像数据的要求。


总结


本文简要介绍了什么是张量Tensor,以及如何将彩色图像文件(RGB)表示为张量Tensor。我们了解了张量Tensor是一种多维数组,可以用来存储和操作高维数据结构。并学习了如何用PyTorch来加载和处理彩色图像文件(RGB),并将它们转换为适合深度学习模型使用的张量Tensor。


推荐学习视频:What’s a Tensor?


368336ee4c4d45c7911c512a49c015a5.png

相关文章
|
4月前
|
机器学习/深度学习 PyTorch 算法框架/工具
|
1月前
|
存储 并行计算 PyTorch
探索PyTorch:张量数值计算
探索PyTorch:张量数值计算
|
1月前
|
机器学习/深度学习 并行计算 PyTorch
探索PyTorch:张量的创建和数值计算
探索PyTorch:张量的创建和数值计算
|
1月前
|
机器学习/深度学习 PyTorch 算法框架/工具
探索PyTorch:张量的类型转换,拼接操作,索引操作,形状操作
探索PyTorch:张量的类型转换,拼接操作,索引操作,形状操作
|
1月前
|
PyTorch 算法框架/工具 Python
Pytorch学习笔记(十):Torch对张量的计算、Numpy对数组的计算、它们之间的转换
这篇文章是关于PyTorch张量和Numpy数组的计算方法及其相互转换的详细学习笔记。
35 0
|
3月前
|
机器学习/深度学习 人工智能 PyTorch
掌握 PyTorch 张量乘法:八个关键函数与应用场景对比解析
PyTorch提供了几种张量乘法的方法,每种方法都是不同的,并且有不同的应用。我们来详细介绍每个方法,并且详细解释这些函数有什么区别:
65 4
掌握 PyTorch 张量乘法:八个关键函数与应用场景对比解析
|
3月前
|
机器学习/深度学习 算法 PyTorch
【深度学习】TensorFlow面试题:什么是TensorFlow?你对张量了解多少?TensorFlow有什么优势?TensorFlow比PyTorch有什么不同?该如何选择?
关于TensorFlow面试题的总结,涵盖了TensorFlow的基本概念、张量的理解、TensorFlow的优势、数据加载方式、算法通用步骤、过拟合解决方法,以及TensorFlow与PyTorch的区别和选择建议。
253 2
|
3月前
|
PyTorch 算法框架/工具
【Pytorch】解决Fan in and fan out can not be computed for tensor with fewer than 2 dimensions
本文提供了两种解决PyTorch中由于torchtext版本问题导致的“Fan in and fan out can not be computed for tensor with fewer than 2 dimensions”错误的方法。
85 2
|
3月前
|
存储 PyTorch API
Pytorch入门—Tensors张量的学习
Pytorch入门—Tensors张量的学习
29 0
|
5月前
|
算法 PyTorch 算法框架/工具
Pytorch - 张量转换拼接
使用 Tensor.numpy 函数可以将张量转换为 ndarray 数组,但是共享内存,可以使用 copy 函数避免共享。