【Pytorch】 理解张量Tensor
创始人
2025-05-29 16:38:05
0

本文参加新星计划人工智能(Pytorch)赛道:https://bbs.csdn.net/topics/613989052

这是目录

  • 张量Tensor是什么?
  • 张量的创建
  • 为什么要用张量Tensor呢?
  • 总结

张量Tensor是什么?

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

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

123
456
789

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

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

1
2
3

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

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

在这里插入图片描述

这就是一个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?
在这里插入图片描述

相关内容

热门资讯

linux入门---制作进度条 了解缓冲区 我们首先来看看下面的操作: 我们首先创建了一个文件并在这个文件里面添加了...
C++ 机房预约系统(六):学... 8、 学生模块 8.1 学生子菜单、登录和注销 实现步骤: 在Student.cpp的...
JAVA多线程知识整理 Java多线程基础 线程的创建和启动 继承Thread类来创建并启动 自定义Thread类的子类&#...
【洛谷 P1090】[NOIP... [NOIP2004 提高组] 合并果子 / [USACO06NOV] Fence Repair G ...
国民技术LPUART介绍 低功耗通用异步接收器(LPUART) 简介 低功耗通用异步收发器...
城乡供水一体化平台-助力乡村振... 城乡供水一体化管理系统建设方案 城乡供水一体化管理系统是运用云计算、大数据等信息化手段࿰...
程序的循环结构和random库...   第三个参数就是步长     引入文件时记得指明字符格式,否则读入不了 ...
中国版ChatGPT在哪些方面... 目录 一、中国巨大的市场需求 二、中国企业加速创新 三、中国的人工智能发展 四、企业愿景的推进 五、...
报名开启 | 共赴一场 Flu... 2023 年 1 月 25 日,Flutter Forward 大会在肯尼亚首都内罗毕...
汇编00-MASM 和 Vis... Qt源码解析 索引 汇编逆向--- MASM 和 Visual Studio入门 前提知识ÿ...
【简陋Web应用3】实现人脸比... 文章目录🍉 前情提要🌷 效果演示🥝 实现过程1. u...
前缀和与对数器与二分法 1. 前缀和 假设有一个数组,我们想大量频繁的去访问L到R这个区间的和,...
windows安装JDK步骤 一、 下载JDK安装包 下载地址:https://www.oracle.com/jav...
分治法实现合并排序(归并排序)... 🎊【数据结构与算法】专题正在持续更新中,各种数据结构的创建原理与运用✨...
在linux上安装配置node... 目录前言1,关于nodejs2,配置环境变量3,总结 前言...
Linux学习之端口、网络协议... 端口:设备与外界通讯交流的出口 网络协议:   网络协议是指计算机通信网...
Linux内核进程管理并发同步... 并发同步并发 是指在某一时间段内能够处理多个任务的能力,而 并行 是指同一时间能够处理...
opencv学习-HOG LO... 目录1. HOG(Histogram of Oriented Gradients,方向梯度直方图)1...
EEG微状态的功能意义 导读大脑的瞬时全局功能状态反映在其电场结构上。聚类分析方法一致地提取了四种头表面脑电场结构ÿ...
【Unity 手写PBR】Bu... 写在前面 前期积累: GAMES101作业7提高-实现微表面模型你需要了解的知识 【技...