【Pytorch】 理解张量Tensor

本文参加新星计划人工智能(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?
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/979.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

更改Hive元数据发生的生产事故

今天同事想在hive里用中文做为分区字段。如果用中文做分区字段的话,就需要更改Hive元 数据库。结果发生了生产事故。导致无法删除表和删除分区。记一下。 修改hive元数据库的编码方式为utf后可以支持中文,执行以下语句: alter table PARTITI…

Vue初入,了解Vue的发展与优缺点

作者简介:一名计算机萌新、前来进行学习VUE,让我们一起进步吧。 座右铭:低头赶路,敬事如仪 个人主页:我叫于豆豆吖的主页 前言 从本章开始进行Vue前端的学习,了解Vue的发展,以及背后的故事。 一.vue介…

ASEMI代理瑞萨TW9992AT-NA1-GE汽车芯片

编辑-Z TW9992AT-NA1-GE是一款低功耗NTSC/PAL模拟视频解码器,专为汽车应用而设计。它支持单端、差分和伪差分复合视频输入。集成了对电池短路和对地短路检测,先进的图像增强功能,如可编程的自动对比度调整(ACA)和MIPI…

【Linux】网络编程套接字(下)

🎇Linux: 博客主页:一起去看日落吗分享博主的在Linux中学习到的知识和遇到的问题博主的能力有限,出现错误希望大家不吝赐教分享给大家一句我很喜欢的话: 看似不起波澜的日复一日,一定会在某一天让你看见坚持…

ASEMI代理MIMXRT1064CVJ5B原装现货NXP车规级MIMXRT1064CVJ5B

编辑:ll ASEMI代理MIMXRT1064CVJ5B原装现货NXP车规级MIMXRT1064CVJ5B 型号:MIMXRT1064CVJ5B 品牌:NXP /恩智浦 封装:LFGBA-196 批号:2023 安装类型:表面贴装型 引脚数量:196 类型&#…

【Hadoop-yarn-01】大白话讲讲资源调度器YARN,原来这么好理解

YARN作为Hadoop集群的御用调度器,在整个集群的资源管理上立下了汗马功劳。今天我们用大白话聊聊YARN存在意义。 有了机器就有了资源,有了资源就有了调度。举2个很鲜活的场景: 在单台机器上,你开了3个程序,分别是A、B…

Redis知识点汇总

前言 梳理知识 说一下项目中的Redis的应用场景 首先知道Redis的5大value类型: string,list,hash, set ,zset 2.基本上是缓存 3.为的是服务无状态, 4.无锁化 Redis是单线程还是多线程 1.无论什么版本,工作线程就一个 2.6.x高版本出现IO多线程

三天吃透操作系统面试八股文

本文已经收录到Github仓库,该仓库包含计算机基础、Java基础、多线程、JVM、数据库、Redis、Spring、Mybatis、SpringMVC、SpringBoot、分布式、微服务、设计模式、架构、校招社招分享等核心知识点,欢迎star~ Github地址:https://github.com/…

基于python的超市历年数据可视化分析

人生苦短 我用python Python其他实用资料:点击此处跳转文末名片获取 数据可视化分析目录人生苦短 我用python一、数据描述1、数据概览二、数据预处理0、导入包和数据1、列名重命名2、提取数据中时间,方便后续分析绘图三、数据可视化1、美国各个地区销售额的分布&…

进阶C语言——指针(二)【题目练习】

文章目录1.指针和数组概念的理解2.指针和数组笔试题解析一维数组字符数组二维数组1.指针和数组概念的理解 指针和数组 数组:能够存放一组相同类型的元素,数组的大小取决于数组的元素个数和元素类型指针:也是地址或指针变量,大小是…

Spring Cloud -- GateWay

为什么需要网关在微服务架构中,一个系统会被拆分为很多个微服务。那么作为客户端要如何去调用这么多的微服务呢?如果没有网关的存在,我们只能在客户端记录每个微服务的地址,然后分别去调用。这样的话会产生很多问题,例…

重构·改善既有代码的设计.04之重构手法(下)完结

1. 前言 本文是代码重构系列的最后一篇啦。前面三篇《重构改善既有代码的设计.01之入门基础》、《重构改善既有代码的设计.02之代码的“坏味道”》、《重构改善既有代码的设计.03之重构手法(上)》介绍了基础入门,代码异味,还有部…

【Java】你真的懂封装吗?一文读懂封装-----建议收藏

博主简介:努力学习的预备程序媛一枚~博主主页: 是瑶瑶子啦所属专栏: Java岛冒险记【从小白到大佬之路】 前言 write in the front: 如何理解封装? 试想:我们使用微波炉的时候,只用设置好时间,按下“开始”…

[C++]反向迭代器

目录 前言: 1 对反向迭代器的构造思想 2 实现反向迭代器 3 完整代码 前言: 本篇文章主要介绍了STL容器当中的反向迭代器,可能有朋友会说:“反向迭代器有什么好学的?不一样还是迭代器吗,我正向能写出来&…

【js逆向】hook大全

▒ 目录 ▒🛫 导读需求1️⃣ 普通函数2️⃣ 对象方法(Class.prototype)3️⃣ 对象属性(Object.defineProperty)4️⃣ Proxy5️⃣ 批量hook示例🛬 文章小结📖 参考资料🛫 导读 需求 …

【面试题系列】K8S常见面试题

目录 序言 问题 1. 简单说一下k8s集群内外网络如何互通的吧 2.描述一下pod的创建过程 3. 描述一下k8s pod的终止过程 4.Kubernetes 中的自动伸缩有哪些方式? 5.Kubernetes 中的故障检测有哪些方式? 6.Kubernetes 中的资源调度有哪些方式&#xff…

如何优雅的用POI导入Excel文件

在企业级项目开发中,要经常涉及excel文件和程序之间导入导出的业务要求,那么今天来讲一讲excel文件导入的实现。java实现对excel的操作有很多种方式,例如EasyExcel等,今天我们使用的是POI技术实现excel文件的导入。POI技术简介1.P…

全连接神经网络

目录 1.全连接神经网络简介 2.MLP分类模型 2.1 数据准备与探索 2.2 搭建网络并可视化 2.3 使用未预处理的数据训练模型 2.4 使用预处理后的数据进行模型训练 3. MLP回归模型 3.1 数据准备 3.2 搭建回归预测网络 1.全连接神经网络简介 全连接神经网络(Multi-Layer Percep…

基于Vue3和element-plus实现一个完整的登录功能

先看一下最终要实现的效果:登录页面:注册页面:(1)引入element-plus组件库引入组件库的方式有好多种,在这里我就在main.js全局引入了.npm i element-plus -Smain.js中代码:import { createApp } from "vue"; //element-plus import ElementPlus from "element-pl…

双指针 -876. 链表的中间结点-leetcode

开始一个专栏,写自己的博客 双指针,也算是作为自己的笔记吧! 双指针从广义上来说,是指用两个变量在线性结构上遍历而解决的问题。狭义上说, 对于数组,指两个变量在数组上相向移动解决的问题;对…
最新文章