深度学习图像处理02:Tensor数据类型

上一讲深度学习图像处理01:图像的本质,我们了解到图像处理的本质是对矩阵的操作。这一讲,我们讲介绍深度学习图像处理的基本数据类型:Tensor类型。

在深度学习领域,Tensor是一种核心的数据结构,用于表示和处理数据。本文将详细介绍Tensor数据类型,包括其定义、如何创建和操作Tensors,特别是在图像处理和深度学习中的应用。我们将通过实例、数学公式和Python代码来深入理解Tensor。

1. 什么是Tensor?

Tensor,简而言之,是一个多维数组,是标量、向量和矩阵的高维推广。在深度学习中,Tensors是算法的基本构建块,用于表示和处理数据,如图像、声音或文本。

  • 0维Tensor:标量(Scalar),例如一个数字。
  • 1维Tensor:向量(Vector),例如一个数字列表。
  • 2维Tensor:矩阵(Matrix),例如二维数组。
  • n维Tensor:更高维度的数组。

2. Tensor数据基本操作

2.1 Tensor的创建

以下是使用PyTorch创建Tensors的一些基本例子:

import torch# 创建一个空的Tensor
x = torch.empty(5, 3)
print("Empty Tensor:\n", x)# 创建一个随机初始化的Tensor
x = torch.rand(5, 3)
print("Random Tensor:\n", x)# 创建一个全为0,类型为long的Tensor
x = torch.zeros(5, 3, dtype=torch.long)
print("Zero Tensor:\n", x)# 创建一个直接从数据的Tensor
x = torch.tensor([5.5, 3])
print("Tensor from data:\n", x)

运行结果:

Empty Tensor:
 tensor([[-2.2140e-26,  8.0995e-43, -2.2140e-26],
        [ 8.0995e-43, -2.2140e-26,  8.0995e-43],
        [-2.2140e-26,  8.0995e-43, -2.2140e-26],
        [ 8.0995e-43, -2.2140e-26,  8.0995e-43],
        [-2.2140e-26,  8.0995e-43, -2.2140e-26]])


Random Tensor:
 tensor([[0.0027, 0.5500, 0.1749],
        [0.9315, 0.9860, 0.2204],
        [0.9672, 0.5092, 0.0170],
        [0.1733, 0.3858, 0.8220],
        [0.0176, 0.2597, 0.3035]])


Zero Tensor:
 tensor([[0, 0, 0],
        [0, 0, 0],
        [0, 0, 0],
        [0, 0, 0],
        [0, 0, 0]])


Tensor from data:
 tensor([5.5000, 3.0000])

2.2 模拟生成二维矩阵

二维矩阵是处理图像时常用的数据结构,每个元素可以代表图像中的一个像素值。以下是如何使用PyTorch创建一个二维矩阵:

import torch
# 创建一个5x3的随机二维矩阵
matrix = torch.rand(5, 3)
print("Random Matrix:\n", matrix)

运行结果:

Random Matrix:
 tensor([[0.5890, 0.0223, 0.0294],
        [0.9720, 0.1617, 0.6436],
        [0.0723, 0.4613, 0.3779],
        [0.2925, 0.7364, 0.7298],
        [0.0533, 0.1137, 0.2888]])

2. Tensor的操作

在深度学习和图像处理中,主要是对Tensor数据进行操作。这些操作包括但不限于算术运算、形状变换、索引和切片等,它们使得我们能够有效地处理和变换数据以适应不同的算法需求。

2.1 算术运算

Tensor支持各种算术运算,这些运算可以是元素级别的,也可以是矩阵乘法等更复杂的运算。

(1)元素级别的加法运算

假设有两个相同形状的矩阵 A 和 B,它们的形状为 m×n。元素级别的加法可以表示为:eq?C_%7Bij%7D%20%3D%20A_%7Bij%7D%20+%20B_%7Bij%7D

(2)矩阵乘法

假设有两个矩阵 A 和 B,其中 A 的形状为 m×p,B 的形状为 p×n。矩阵乘法可以表示为:eq?C_%7Bij%7D%20%3D%20%5Csum_%7Bk%3D1%7D%5E%7Bn%7D%20A_%7Bik%7DB_%7Bkj%7D

下面代码分别战术元素级别的加法和矩阵乘法

import torch# 元素级别的加法
x = torch.tensor([1, 2])
y = torch.tensor([3, 4])
print("Element-wise Sum:\n", x + y)# 矩阵乘法
x = torch.tensor([[1, 2], [3, 4]])
y = torch.tensor([[5, 6], [7, 8]])
print("Matrix Multiplication:\n", torch.mm(x, y))

运行结果:

Broadcasted Addition:
 tensor([[2, 3, 4],
        [3, 4, 5],
        [4, 5, 6]])


Element-wise Sum:
 tensor([4, 6])


Matrix Multiplication:
 tensor([[19, 22],
        [43, 50]])


2.2 维度操作

在深度学习中,经常需要对Tensor的维度进行操作,包括增加维度、减少维度、或是重排维度顺序,这对于匹配不同层期望的输入输出形状非常关键。

代码首先生成一个二维矩阵,然后依次进行增加一个维度,再减少一个维度,最后重排维度三个操作。代码如下:

import torch
# 生成一个二维矩阵
x = torch.tensor([[1, 2], [3, 4]])
print(f'x:\n{x}')
print(f'Tensor x shape:{x.shape}')
print(f'*'*50)# 增加一个维度
x_unsqueeze = x.unsqueeze(0)  # 在第0维增加
print(f'x_unsqueeze:\n{x_unsqueeze}')
print("Tensor x_unsqueeze shape:", x_unsqueeze.shape)
print(f'*'*50)# 减少一个维度
x_squeeze = x_unsqueeze.squeeze(0)  # 减少第0维
print(f'x_squeeze:\n{x_squeeze}')
print("Tensor x_squeeze shape:\n", x_squeeze.shape)
print(f'*'*50)# 重排维度
x_permute = x.unsqueeze(0).permute(2, 1, 0)  # 将维度重排
print(f'Tensor x_permute:\n{x_permute}')
print("Tensor x_permute shape:\n", x_permute.shape)
print(f'*'*50)

运行结果:

x:
tensor([[1, 2],
        [3, 4]])
Tensor x shape:torch.Size([2, 2])
**************************************************
x_unsqueeze:
tensor([[[1, 2],
         [3, 4]]])
Tensor x_unsqueeze shape: torch.Size([1, 2, 2])
**************************************************
x_squeeze:
tensor([[1, 2],
        [3, 4]])
Tensor x_squeeze shape:
 torch.Size([2, 2])
**************************************************
Tensor x_permute:
tensor([[[1],
         [3]],

        [[2],
         [4]]])
Tensor x_permute shape:
 torch.Size([2, 2, 1])
**************************************************

2.3 Tensor的合并与分割

在进行数据预处理或模型输出后处理时,经常需要合并或分割Tensor。合并可以将不同的数据集拼接成更大的数据集,分割则可以将数据集分成更小的批次进行处理。

以下代码,对Tensor的合并于分割进行演示

import torch
# 合并Tensors
x = torch.tensor([[1, 2], [3, 4]])
y = torch.tensor([[5, 6], [7, 8]])
z = torch.cat([x, y], dim=0)  # 沿着行合并, dim=1是沿着列合并
print("Tensors after concatenation:\n", z)
print('*'*50)# 分割Tensor
x = torch.arange(1, 10)
x_split = torch.split(x, 3)  # 每个部分包含3个元素
print("Tensors after split:")
for tensor in x_split:print(tensor)
print('*'*50)

运行结果:

 Tensors after concatenation:
 tensor([[1, 2],
        [3, 4],
        [5, 6],
        [7, 8]])
**************************************************
Tensors after split:
tensor([1, 2, 3])
tensor([4, 5, 6])
tensor([7, 8, 9])
**************************************************

2.4 广播

广播(Broadcasting)是Tensor数据操作一种的机制,允许不同形状的Tensors进行数学运算。在某些条件下,较小的Tensor会自动扩展到较大的Tensor的大小。

x = torch.tensor([1, 2, 3])
y = torch.tensor([[1], [2], [3]])
# 通过广播,x会自动扩展成[[1, 2, 3], [1, 2, 3], [1, 2, 3]]以匹配y的形状
print("Broadcasted Addition:\n", x + y)

运行结果:

Broadcasted Addition:
 tensor([[2, 3, 4],
        [3, 4, 5],
        [4, 5, 6]]) 

3. 总结

了解Tensor数据类型,掌握Tensor的基础操作是深度学习和图像处理中的基本技能。通过对Tensors的高级操作的理解和应用,能够更有效地进行数据预处理、模型训练以及结果分析。

现在我们通过第一讲深度学习图像处理01:图像的本质,了解了图像处理的本质是对矩阵进行操作。这一讲,了解了深度学习图像处理的基本数据类型:Tensor。下一讲,我们会对深度学习图像处理的核心元素——卷积操作,进行讲解。

 

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

复旦大学MBA:iLab项目探寻科技创新 助力企业出海

2024年2月底,新一轮复旦MBA iLab商业咨询项目(以下简称iLab项目)正式拉开序幕。      科创大时代,如何于变局中创新突破、绘就商业“蓝图”?怎样把握ESG投资机遇,创造可持续发展的未来?如何…

图论07-被包围的区域(Java)

7.被包围的区域 题目描述 给你一个 m x n 的矩阵 board ,由若干字符 X 和 O ,找到所有被 X 围绕的区域,并将这些区域里所有的 O 用 X 填充。 示例 1: 输入:board [["X","X","X",&qu…

2.6、媒体查询(mediaquery)

概述 媒体查询作为响应式设计的核心,在移动设备上应用十分广泛。媒体查询可根据不同设备类型或同设备不同状态修改应用的样式。媒体查询常用于下面两种场景: 针对设备和应用的属性信息(比如显示区域、深浅色、分辨率),设计出相匹配的布局。当屏幕发生动态改变时(比如分屏…

V2X技术与智能传感器的完美融合:提升城市道路安全

在科技不断创新的今天,城市交通领域涌现了大量新技术。有时候我们不仅仅需要独立应用这些新技术来实现交通的变革,更需要将它们巧妙地结合连接起来,以获取更高效更安全的交通环境。本文将探讨V2X技术与智能传感器的结合,如何在城市…

专为智能设备安全打造 | 基于ACM32 MCU的智能断路器方案

随着我国电网建设的快速发展,数字化变电站成为建设和研究的热点,数字化变电站的核心在于一次设备的智能化与二次设备的网络化,对于断路器这种极其重要的电力一次设备而言,其智能化的实现有十分重要的意义,断路器智能化…

平衡隐私与效率,Partisia Blockchain 解锁数字安全新时代

原文:https://cointelegraph.com/news/exploring-multiparty-computations-role-in-the-future-of-blockchain-privacy; https://medium.com/partisia-blockchain/unlocking-tomorrow-outlook-for-mpc-in-2024-and-beyond-cb170e3ec567 编译&#xff1…

skywalking监听apisix

一、原理 Skywalking结合OpenTelemetry Collector Apisix的promethus插件实现对apisix metrics数据的收集。 二、数据流图 1. Apisix Promethus插件从Apisix收集指标数据。 2. OpenTelemetry Collector通过promethus receiver获取来自Apisix Promethus插件的指标数据&#…

python的OA公文发文管理系统flask-django-php-nodejs

采用结构化的分析设计,该方法要求结合一定的图表,在模块化的基础上进行系统的开发工作。在设计中采用“自下而上”的思想,在OA公文发文管理系统实现了用户、公文分类、公文信息、待办提醒等的功能性。系统根据现有的管理模块进行开发和扩展&a…

(附源码)基于Spring Boot和Vue的前后端分离考研资料分享平台的设计与实现

前言 💗博主介绍:✌专注于Java、小程序技术领域和毕业项目实战✌💗 👇🏻 精彩专栏 推荐订阅👇🏻 2024年Java精品实战案例《100套》 🍅文末获取源码联系🍅 &#x1f31…

旅游网站|基于JSP技术+ Mysql+Java+ B/S结构的旅游网站设计与实现(可运行源码+数据库+设计文档)

推荐阅读100套最新项目 最新ssmjava项目文档视频演示可运行源码分享 最新jspjava项目文档视频演示可运行源码分享 最新Spring Boot项目文档视频演示可运行源码分享 2024年56套包含java,ssm,springboot的平台设计与实现项目系统开发资源(可…

「媒体宣传」企业活动发布会邀请媒体报道的好处与优势?

传媒如春雨,润物细无声,大家好,我是51媒体网胡老师。 企业活动发布会邀请媒体报道具有多种好处与优势,这些都有助于提升企业的知名度、形象和影响力。以下是一些主要的好处与优势: 提升品牌知名度:媒体报道…

目标控制器数字孪生系统的研究与设计

文章来源:铁路计算机应用,2023,32(10):36-41. 作者:许婧,杨硕,季志均 摘要:随着目标控制器(OC,Object Controller)系统在轨道交通领域的推广应用,其硬件投入较高、研发…

短视频矩阵系统----源头开发

短视频矩阵源码技术开发要求及实现流程: 短视频矩阵开发要求具备视频录制、编辑、剪辑、分享等基本功能,支持实时滤镜、特效、音乐等个性化编辑,能够实现高效的视频渲染和处理。开发流程主要包括需求分析、技术选型、设计架构、编码实现、测试…

OpenHarmony实现一次开发多端部署分布式新闻客户端页面

分布式新闻客户端(ArkTS) 介绍 本篇Codelab基于栅格布局、设备管理和多端协同,实现一次开发,多端部署的分布式新闻客户端页面。主要包含以下功能: 展示新闻列表以及左右滑动切换新闻Tab。点击新闻展示新闻详情页。点…

opencv自定义间隔帧获取视频转存为图片的GUI界面实现

该程序功能只将mp4转为jpg 希望得到您的指导 非常感谢您观看我的博客,我的博客是为了记录我的学习过程同时保留我的某些可重复利用代码以方便下次使用。如果您对我的博客有任何建议还请您不吝指出,非常感谢您对我的指导。 背景 在实现opencv逐帧获取…

深度学习中的随机种子random_seed

解释 由于模型中的参数初始化例如权重参数如下图,就是随机初始化的,为了能够更好的得到论文中提到效果,可以设置随机种子,从而减少算法结果的随机性,使其接近于原始结果。 设置了随机种子,产生的随机数都…

基于Java中的SSM框架实现考研指导平台系统项目【项目源码+论文说明】计算机毕业设计

基于Java中的SSM框架实现考研指导平台系统演示 摘要 应对考研的学生,为了更好的使校园考研有一个更好的环境好好的学习,建议一个好的校园网站,是非常有必要的。提供学生的学习提供一个交流的空间。帮助同学们在学习高数、学习设计、学习统计…

基于python+vue的ITS 信息平台的设计与实现flask-django-nodejs-php

伴随着我国社会的发展,人民生活质量日益提高。于是对系统进行规范而严格是十分有必要的,所以许许多多的信息管理系统应运而生。此时单靠人力应对这些事务就显得有些力不从心了。所以本论文将设计一套信息平台,帮助交通局进行信息共享、交通信…

【Spring框架】单元测试:JUnit

个人名片: 🐼作者简介:一名大三在校生,喜欢AI编程🎋 🐻‍❄️个人主页🥇:落798. 🐼个人WeChat:hmmwx53 🕊️系列专栏:🖼️…

使用 Pytorch 和 Rasterio 的自定义地理空间数据加载器

地理空间数据在从遥感和城市规划到环境监测和灾害管理的各个领域发挥着至关重要的作用。在处理机器学习任务的地理空间数据时,准备自定义数据加载器对于有效加载、预处理和增强数据而不丢失其属性至关重要,特别是当输入图像具有超过 3 个波段时。 Rasterio确实是一个专门为有…