【深度学习】P1 深度学习基础框架 - 张量 Tensor
深度学习基础框架 张量 Tensor
- 张量
- 数据操作
- 导入
- 创建张量
- 获取张量信息
- 改变张量
- 张量运算
- 张量与内存
张量
Pytorch 是一个深度学习框架,用于开发和训练神经网络模型。
而其核心数据结构,则是张量 Tensor,类似于 Numpy 数组,但是可以支持在 GPU 上加速运算,显著加速模型训练过程,更适用于深度学习和神经网络模型的构建和学习。
张量是多维数组的泛化,可以是:
- 标量(零维张量)
- 向量(一维张量)
- 矩阵(二维张量)
- 或更高维度的数组;
- e . g . e.g. e.g. RGB 图像可以表示为三维张量,其中一个维度表示高度,另一个维度表示宽度,最后一个维度表示颜色通道:
[[[255, 0, 0], [0, 255, 0], [0, 0, 255]],
[[0, 255, 255], [255, 255, 0], [255, 0, 255]]]
此外,后期读者会接触到梯度下降与反向传播,而张量非常重要一点,即可以自动求导,方便计算梯度并更新模型参数。
数据操作
导入
首先,导入 torch,需要注意的是,虽然称为 Pytorch,但是我们应该导入 torch 而不是 Pytorch;
import torch
创建张量
张量 tensor 表示一个数值组成的数组,
x = torch.arange(12)
print(x)
# >>> 表示结果输出
>>> tensor([ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11])
通过 zeros 函数与 ones 函数创建全0、全1元素,
torch.zeros((2, 3, 4))>>> tensor([[[0., 0., 0., 0.],[0., 0., 0., 0.],[0., 0., 0., 0.]],[[0., 0., 0., 0.],[0., 0., 0., 0.],[0., 0., 0., 0.]]])
张量同样支持逻辑运算符构建,
x = torch.tensor([[1, 2, 4, 8], [1, 3, 9, 27]])
y = torch.tensor([[2, 2, 2, 2], [3, 3, 3, 3]])
x == y>>> tensor([[False, True, False, False],[False, True, False, False]])
获取张量信息
通过 shape 属性来访问张量的形状和张量中元素的总数,
# 张量的形状
x.shape>>> torch.Size([12])
# 张量中元素的总数
x.numel()>>> 12
对张量中所有元素进行求和会产生一个只有一个元素的张量,
x = torch.tensor([[1, 2, 4, 8], [1, 3, 9, 27]])
x.sum()>>> tensor(55)
通过用切片方法访问张量内指定位置元素,
x = torch.tensor([[1, 2, 4, 8], [1, 3, 9, 27]])
x[-1], x[1][1:3]>>> (tensor([1, 3, 9, 27]), tensor([3, 9]))
改变张量
通过 reshape 函数改变一个张量的形状而不改变元素数量和元素值,
x.reshape(3, 4)>>> tensor([[ 0, 1, 2, 3],[ 4, 5, 6, 7],[ 8, 9, 10, 11]])
通过 cat 函数把多个张量连结在一起,支持按指定维度 dim 拼接,
x = torch.tensor([[1, 2, 4, 8], [1, 3, 9, 27]])
y = torch.tensor([[2, 2, 2, 2], [3, 3, 3, 3]])
torch.cat((x, y), dim=0), torch.cat((x, y), dim=1)>>> (tensor([[ 1, 2, 4, 8],[ 1, 3, 9, 27],[ 2, 2, 2, 2],[ 3, 3, 3, 3]]),tensor([[ 1, 2, 4, 8, 2, 2, 2, 2],[ 1, 3, 9, 27, 3, 3, 3, 3]]))
通过指定索引将元素写入张量,
x = torch.tensor([[1, 2, 4, 8], [1, 3, 9, 27]])
x[1, 2] = 1111>>> tensor([[1, 2, 4, 8],[1, 3, 1111, 27]])
x = torch.tensor([[1, 2, 4, 8], [1, 3, 9, 27]])
x[1, :] = 12>>> tensor([[ 1, 2, 4, 8],[12, 12, 12, 12]])
张量运算
张量支持按元素运算,
x = torch.tensor([1.0, 2, 4, 8])
y = torch.tensor([2, 2, 2, 2])
x + y, x - y, x * y, x / y, x ** y>>> (tensor([ 3., 4., 6., 10.]),tensor([-1., 0., 2., 6.]),tensor([ 2., 4., 8., 16.]),tensor([0.5000, 1.0000, 2.0000, 4.0000]),tensor([ 1., 4., 16., 64.]))
张量加法中,即使形状不同,我们仍然可以通过调用广播机制来执行张量加法,
a = torch.arange(3).reshape((3, 1))
b = torch.arange(2).reshape((1, 2))
a + b>>> tensor([[0, 1],[1, 2],[2, 3]])
张量与内存
虽然 Python 中很少涉及到内存处理,但是如果矩阵很大,就需要考虑到内存方面。
在运行一些操作时,可能会导致为新结果分配内存,
before = id(Y)
Y = Y + X
id(Y) == before>>> False # 说明新内存地址不等同于原内存地址
如果我们的矩阵 Y 非常大,为了效率考虑,不更换内存地址,减少操作的内存开销,怎么做?
before = id(Y)
Y += X
id(Y) == before>>> True # 说明没有新分配内存空间
Numpy 是 Python 里最基础的多元数组运算框架,所以也要多关注 Numpy 与 Tensor 之间的转化。
相关文章:
【深度学习】P1 深度学习基础框架 - 张量 Tensor
深度学习基础框架 张量 Tensor 张量数据操作导入创建张量获取张量信息改变张量张量运算 张量与内存 张量 Pytorch 是一个深度学习框架,用于开发和训练神经网络模型。 而其核心数据结构,则是张量 Tensor,类似于 Numpy 数组,但是可…...
vue2 识别页面参数中的html
在Vue 2中,你可以使用v-html指令来识别页面参数中的HTML内容。v-html指令允许你将HTML代码作为Vue模板的一部分进行渲染。 以下是一个示例,演示了如何在Vue 2中使用v-html指令来识别页面参数中的HTML内容: <template><div v-html&…...
matlab 一些画图法总结(持续更新)
*****************************************画Dmd_L极坐标表示法**************************************** if(~exist(Dmd_L_array)) Dmd_L_array []; end Dmd_L_array [Dmd_L_array; Dmd_L]; thetaangle(Dmd_L_array); rabs(Dmd_L_array); polarplot(theta,r,o); *****…...
MDK AC5和AC6是什么?在KEIL5中添加和选择ARMCC版本
前言 看视频有UP主提到“AC5”“AC6”这样的词,一开始有些不理解,原来他说的是ARMCC版本。 keil自带的是ARMCC5,由于ARMCC5已经停止维护了,很多开发者会选择ARMCC6。 在维护公司“成年往事”项目可能就会遇到新KEIL旧版本编译器…...
杰发科技AC7801——EEP内存分布情况
简介 按照文档进行配置 核心代码如下 /*!* file sweeprom_demo.c** brief This file provides sweeprom demo test function.**//* Includes */ #include <stdlib.h> #include "ac780x_sweeprom.h" #include "ac780x_debugout.h"/* Define …...
【mybatis注解实现条件查询】
文章目录 步骤1: 引入MyBatis依赖步骤2: 创建数据模型步骤3: 创建Mapper接口步骤4: 配置MyBatis步骤5: 执行条件查询 步骤1: 引入MyBatis依赖 <dependency><groupId>org.mybatis</groupId><artifactId>mybatis</artifactId><version>3.x.…...
【广州华锐互动】VR线上课件制作软件满足数字化教学需求
随着科技的不断发展,虚拟现实(VR)技术在教学领域的应用逐渐成为趋势。其中,广州华锐互动开发的VR线上课件制作软件更是备受关注。这种工具为教师提供了便捷的制作VR课件的手段,使得VR教学成为可能,极大地丰…...
MySQL 中 DELETE 语句中可以使用别名么?
某天,正按照业务的要求删除不需要的数据,在执行 DELETE 语句时,竟然出现了报错! 作者:林靖华,开源数据库技术爱好者,擅长MySQL和Redis的运维 爱可生开源社区出品,原创内容未经授权不…...
flutter创建不同样式的按钮,背景色,边框,圆角,圆形,大小都可以设置
在ui设计中,可能按钮会有不同的样式需要你来写出来,所以按钮的不同样式,应该是最基础的功能,在这里我们赶紧学起来吧,web端可能展示有问题,需要优化,但是基本样式还是出来了 我是将所有的按钮放…...
【C++】标准模板库STL作业(其二)
🎃个人专栏: 🐬 算法设计与分析:算法设计与分析_IT闫的博客-CSDN博客 🐳Java基础:Java基础_IT闫的博客-CSDN博客 🐋c语言:c语言_IT闫的博客-CSDN博客 🐟MySQL:…...
基于SpringBoot+Redis实现点赞/排行榜功能,可同理实现收藏/关注功能,可拓展实现共同好友/共同关注/关注推送功能
前言 简单记录一下在SpringBoot项目中,使用Redis实现点赞/排行榜功能,可同理实现收藏/关注功能,可拓展实现共同好友/共同关注/关注推送功。主要用到了Redis中的Set集合和ZSet集合。 一、指定使用某个索引的数据库 在Redis中,可…...
AI“胡说八道”?怎么解?
原创 | 文 BFT机器人 01 引言 近年来,人工智能产业迅猛发展,大型语言模型GPT-4发展势头强劲,OpenAI推出ChatGPT、微软推出Bing、马斯克推出“最好的聊天机器人Grok”……科技巨头纷纷入局AI领域,引入人工智能作为办公工具的行业…...
[SIGGRAPH-23] 3D Gaussian Splatting for Real-Time Radiance Field Rendering
pdf | proj | code 本文提出一种新的3D数据表达形式3D Gaussians。每个Gaussian由以下参数组成:中心点位置、协方差矩阵、可见性、颜色。通过世界坐标系到相机坐标系,再到图像坐标系的仿射关系,可将3D Gaussian映射到相机坐标系,通…...
大话设计模式C++实现
大话设计模式,讲得非常好,但是作者是用C#写的,为了方便C程序员,使用C写了大话设计模式的代码 详情见Github:https://github.com/liubamboo/BigTalkDesignPattern...
IT 领域中的主要自动化趋势
48%的IT自动化流程属于IT服务管理,过去一年中,IT运维自动化增长了272%。 IT部门从交付者转变为战略伙伴 今年的《工作自动化指数》数据显示,自动化正在蔓延到组织的各个部门,越来越多的部门采用自动化,并且IT以外的员工…...
使用Python解析CAN总线
缘起 在新能源车辆的开发和维护中,经常需要对CAN总线数据进行分析。CANOE等总线软件虽然方便,但功能有限,难以满足数据分析的要求。Matlab的Vehicle Network Toolbox可以方便的进行数据解析和分析,它是闭源且收费的。因此&#x…...
DevExpress中文教程 - 如何在macOS和Linux (CTP)上创建、修改报表(下)
DevExpress Reporting是.NET Framework下功能完善的报表平台,它附带了易于使用的Visual Studio报表设计器和丰富的报表控件集,包括数据透视表、图表,因此您可以构建无与伦比、信息清晰的报表。 DevExpress Reports — 跨平台报表组件&#x…...
RAID的应用场景以及优缺点
RAID 0(条带化): 工作原理: 数据被分成块,每个块写入不同的驱动器,以并行方式提高读写性能。 优势: 卓越的性能提升,特别是对于大型文件的读写操作。 劣势: 完全没有冗余,一个驱动器…...
java SpringCloud版本b2b2c鸿鹄云商平台全套解决方案 小程序商城免费搭建
使用技术: Spring CloudSpring BootMybatis微服务服务监控可视化运营 B2B2C平台: 平台管理端(包含自营) 商家平台端(多商户入驻) PC买家端、手机wap/公众号买家端 微服务(30个通用微服务如:商品、订单、购物车、个人中心、支…...
[Linux] shell脚本的函数和数组
一、函数 1.1 函数的定义 函数是脚本的别名 作用:函数可以避免代码重复,可读性强,可以简化脚本。 格式:函数名(){脚本} 1.2 如何使用函数 1.定义 2.调用 函数一定要先定义再使用 例子:…...
LibreOffice Online如何实现企业级文档协作?深度解析架构设计与性能调优
LibreOffice Online如何实现企业级文档协作?深度解析架构设计与性能调优 【免费下载链接】online Read-only Mirror - no pull request (use https://gerrit.libreoffice.org instead) 项目地址: https://gitcode.com/gh_mirrors/onl/online 面对企业数字化转…...
Allegro异形焊盘避坑指南:Shape Symbol导入层设置与阻焊开窗的正确姿势
Allegro异形焊盘设计实战:从Shape Symbol导入到阻焊开窗的完整避坑手册 在高速连接器与金手指封装设计中,异形焊盘的精确实现往往是工程师面临的第一个技术门槛。许多用户按照教程步骤操作时,常会在DXF导入失败、阻焊开窗不规范等环节反复踩坑…...
告别玄学选型:用Python自动化测试英飞凌硅麦IM68A1308的动态范围与电压曲线
告别玄学选型:用Python自动化测试英飞凌硅麦IM68A1308的动态范围与电压曲线 在硬件开发中,模拟麦克风的选型常常陷入"玄学"困境——依赖零星的手动测试数据、模糊的厂商规格书解读,以及难以复现的"经验值"。以英飞凌IM68…...
ChatGPT翻译实战:技术文档与文学内容的高效处理
1. 项目概述:当ChatGPT遇上翻译需求去年接手一个跨国项目时,我需要在48小时内完成87页技术文档的本地化。传统翻译工具输出的机械结果让我不得不花费大量时间二次润色,直到尝试用ChatGPT进行定向优化。这个经历让我系统整理了AI翻译的实战方法…...
基于LangGraph与Gemini构建具备规划-执行-反思能力的智能研究助手
1. 项目概述:一个能“思考”的智能研究助手如果你正在寻找一个能帮你自动完成复杂网络研究、并给出有据可查答案的智能应用,那么这个基于 Google Gemini 和 LangGraph 构建的全栈项目,绝对值得你花时间深入探索。它不仅仅是一个简单的聊天机器…...
避开这些坑!DSP 28335 ePWM配置常见误区与调试技巧(附逻辑分析仪实测波形)
DSP 28335 ePWM实战排雷指南:从异常波形到精准调试的工程思维 当你的电机控制板突然发出刺耳的啸叫声,或者电源模块莫名发烫时,ePWM配置问题往往就是罪魁祸首。作为DSP 28335最核心的外设之一,ePWM模块的寄存器配置看似简单&#…...
不只是搭建:用XTDrone+ROS Noetic在Gazebo里快速验证你的无人机控制算法
从仿真到实战:XTDroneROS Noetic在Gazebo中的高效算法验证指南 当你已经完成了XTDrone和PX4 SITL的环境搭建,接下来面临的核心问题是如何将这个强大的仿真平台转化为算法开发的利器。本文将带你跨越从环境配置到实际应用的门槛,探索如何在这个…...
不用公网IP,如何在内网高效搭建RustDesk远程控制服务器?基于Windows Server 2019的完整实践
纯内网环境下的RustDesk私有化部署指南:基于Windows Server 2019的零成本方案 当企业或机构需要在内网环境中实现安全高效的远程控制时,公有云方案往往面临成本高、延迟大等问题。RustDesk作为一款开源的远程桌面工具,其自建服务器功能为内网…...
告别手动复制!OpenDataLab MinerU智能文档理解快速提取PDF文字
告别手动复制!OpenDataLab MinerU智能文档理解快速提取PDF文字 1. 为什么需要智能文档理解? 在日常办公和学术研究中,PDF文档是最常见的文件格式之一。然而,从PDF中提取文字和结构化数据一直是个令人头疼的问题。传统方法通常面…...
MoveIt!避障实战:如何优化OctoMap质量,让你的机械臂在杂乱桌面也能精准抓取?
MoveIt!避障实战:优化OctoMap质量的五大核心策略 机械臂在杂乱桌面环境下的精准抓取,一直是工业自动化和服务机器人领域的痛点问题。上周在调试一台UR5机械臂时,我遇到了典型的"幽灵障碍物"现象——明明桌面上只有目标物体…...
