【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

相关文章
|
6天前
|
存储 PyTorch 算法框架/工具
PyTorch 中的 Tensor:属性、数据生成和基本操作
PyTorch 中的 Tensor:属性、数据生成和基本操作
25 0
|
6天前
|
机器学习/深度学习 存储 PyTorch
PyTorch基本数据类型tensor
PyTorch基本数据类型tensor
27 2
|
6天前
|
机器学习/深度学习 PyTorch 算法框架/工具
PyTorch基础之张量模块数据类型、基本操作、与Numpy数组的操作详解(附源码 简单全面)
PyTorch基础之张量模块数据类型、基本操作、与Numpy数组的操作详解(附源码 简单全面)
37 0
|
6天前
|
机器学习/深度学习 存储 PyTorch
PyTorch深度学习基础:张量(Tensor)详解
【4月更文挑战第17天】本文详细介绍了PyTorch中的张量,它是构建和操作深度学习数据的核心。张量是多维数组,用于存储和变换数据。PyTorch支持CPU和GPU张量,后者能加速大规模数据处理。创建张量可通过`torch.zeros()`、`torch.rand()`或直接从Python列表转换。张量操作包括数学运算、切片和拼接。在深度学习中,张量用于神经网络模型的构建和训练。理解张量对于掌握PyTorch至关重要。
|
6天前
|
存储 机器学习/深度学习 PyTorch
PyTorch核心--tensor 张量 !!
PyTorch核心--tensor 张量 !!
33 1
|
6天前
|
数据可视化 PyTorch 算法框架/工具
Pytorch中张量的高级选择操作
在某些情况下,我们需要用Pytorch做一些高级的索引/选择,所以在这篇文章中,我们将介绍这类任务的三种最常见的方法:torch.index_select, torch.gather and torch.take
39 0
|
6天前
|
机器学习/深度学习 PyTorch 算法框架/工具
PyTorch的10个基本张量操作
PyTorch是一个基于python的科学计算包。它的灵活性允许轻松集成新的数据类型和算法,并且框架也是高效和可扩展的,下面我们将介绍一些Pytorch的基本张量操作。
79 1
|
6天前
|
机器学习/深度学习 PyTorch 算法框架/工具
【深度学习】Pytorch Tensor 张量
【1月更文挑战第26天】【深度学习】Pytorch Tensor 张量
|
6天前
|
机器学习/深度学习 PyTorch 算法框架/工具
【深度学习】Pytorch Tensor 张量
【1月更文挑战第10天】【深度学习】Pytorch Tensor 张量
|
6天前
|
机器学习/深度学习 PyTorch 算法框架/工具
PyTorch深度学习基础之Tensor的变换、拼接、拆分讲解及实战(附源码 超详细必看)
PyTorch深度学习基础之Tensor的变换、拼接、拆分讲解及实战(附源码 超详细必看)
53 0