当前位置: 首页 > news >正文

【深度学习】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		# 说明没有新分配内存空间

NumpyPython 里最基础的多元数组运算框架,所以也要多关注 NumpyTensor 之间的转化。

相关文章:

【深度学习】P1 深度学习基础框架 - 张量 Tensor

深度学习基础框架 张量 Tensor 张量数据操作导入创建张量获取张量信息改变张量张量运算 张量与内存 张量 Pytorch 是一个深度学习框架,用于开发和训练神经网络模型。 而其核心数据结构,则是张量 Tensor,类似于 Numpy 数组,但是可…...

vue2 识别页面参数中的html

在Vue 2中&#xff0c;你可以使用v-html指令来识别页面参数中的HTML内容。v-html指令允许你将HTML代码作为Vue模板的一部分进行渲染。 以下是一个示例&#xff0c;演示了如何在Vue 2中使用v-html指令来识别页面参数中的HTML内容&#xff1a; <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”这样的词&#xff0c;一开始有些不理解&#xff0c;原来他说的是ARMCC版本。 keil自带的是ARMCC5&#xff0c;由于ARMCC5已经停止维护了&#xff0c;很多开发者会选择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线上课件制作软件满足数字化教学需求

随着科技的不断发展&#xff0c;虚拟现实&#xff08;VR&#xff09;技术在教学领域的应用逐渐成为趋势。其中&#xff0c;广州华锐互动开发的VR线上课件制作软件更是备受关注。这种工具为教师提供了便捷的制作VR课件的手段&#xff0c;使得VR教学成为可能&#xff0c;极大地丰…...

MySQL 中 DELETE 语句中可以使用别名么?

某天&#xff0c;正按照业务的要求删除不需要的数据&#xff0c;在执行 DELETE 语句时&#xff0c;竟然出现了报错&#xff01; 作者&#xff1a;林靖华&#xff0c;开源数据库技术爱好者&#xff0c;擅长MySQL和Redis的运维 爱可生开源社区出品&#xff0c;原创内容未经授权不…...

flutter创建不同样式的按钮,背景色,边框,圆角,圆形,大小都可以设置

在ui设计中&#xff0c;可能按钮会有不同的样式需要你来写出来&#xff0c;所以按钮的不同样式&#xff0c;应该是最基础的功能&#xff0c;在这里我们赶紧学起来吧&#xff0c;web端可能展示有问题&#xff0c;需要优化&#xff0c;但是基本样式还是出来了 我是将所有的按钮放…...

【C++】标准模板库STL作业(其二)

&#x1f383;个人专栏&#xff1a; &#x1f42c; 算法设计与分析&#xff1a;算法设计与分析_IT闫的博客-CSDN博客 &#x1f433;Java基础&#xff1a;Java基础_IT闫的博客-CSDN博客 &#x1f40b;c语言&#xff1a;c语言_IT闫的博客-CSDN博客 &#x1f41f;MySQL&#xff1a…...

基于SpringBoot+Redis实现点赞/排行榜功能,可同理实现收藏/关注功能,可拓展实现共同好友/共同关注/关注推送功能

前言 简单记录一下在SpringBoot项目中&#xff0c;使用Redis实现点赞/排行榜功能&#xff0c;可同理实现收藏/关注功能&#xff0c;可拓展实现共同好友/共同关注/关注推送功。主要用到了Redis中的Set集合和ZSet集合。 一、指定使用某个索引的数据库 在Redis中&#xff0c;可…...

AI“胡说八道”?怎么解?

原创 | 文 BFT机器人 01 引言 近年来&#xff0c;人工智能产业迅猛发展&#xff0c;大型语言模型GPT-4发展势头强劲&#xff0c;OpenAI推出ChatGPT、微软推出Bing、马斯克推出“最好的聊天机器人Grok”……科技巨头纷纷入局AI领域&#xff0c;引入人工智能作为办公工具的行业…...

[SIGGRAPH-23] 3D Gaussian Splatting for Real-Time Radiance Field Rendering

pdf | proj | code 本文提出一种新的3D数据表达形式3D Gaussians。每个Gaussian由以下参数组成&#xff1a;中心点位置、协方差矩阵、可见性、颜色。通过世界坐标系到相机坐标系&#xff0c;再到图像坐标系的仿射关系&#xff0c;可将3D Gaussian映射到相机坐标系&#xff0c;通…...

大话设计模式C++实现

大话设计模式&#xff0c;讲得非常好&#xff0c;但是作者是用C#写的&#xff0c;为了方便C程序员&#xff0c;使用C写了大话设计模式的代码 详情见Github&#xff1a;https://github.com/liubamboo/BigTalkDesignPattern...

IT 领域中的主要自动化趋势

48%的IT自动化流程属于IT服务管理&#xff0c;过去一年中&#xff0c;IT运维自动化增长了272%。 IT部门从交付者转变为战略伙伴 今年的《工作自动化指数》数据显示&#xff0c;自动化正在蔓延到组织的各个部门&#xff0c;越来越多的部门采用自动化&#xff0c;并且IT以外的员工…...

使用Python解析CAN总线

缘起 在新能源车辆的开发和维护中&#xff0c;经常需要对CAN总线数据进行分析。CANOE等总线软件虽然方便&#xff0c;但功能有限&#xff0c;难以满足数据分析的要求。Matlab的Vehicle Network Toolbox可以方便的进行数据解析和分析&#xff0c;它是闭源且收费的。因此&#x…...

DevExpress中文教程 - 如何在macOS和Linux (CTP)上创建、修改报表(下)

DevExpress Reporting是.NET Framework下功能完善的报表平台&#xff0c;它附带了易于使用的Visual Studio报表设计器和丰富的报表控件集&#xff0c;包括数据透视表、图表&#xff0c;因此您可以构建无与伦比、信息清晰的报表。 DevExpress Reports — 跨平台报表组件&#x…...

RAID的应用场景以及优缺点

RAID 0(条带化)&#xff1a; 工作原理&#xff1a; 数据被分成块&#xff0c;每个块写入不同的驱动器&#xff0c;以并行方式提高读写性能。 优势&#xff1a; 卓越的性能提升&#xff0c;特别是对于大型文件的读写操作。 劣势&#xff1a; 完全没有冗余&#xff0c;一个驱动器…...

java SpringCloud版本b2b2c鸿鹄云商平台全套解决方案 小程序商城免费搭建

使用技术&#xff1a; Spring CloudSpring BootMybatis微服务服务监控可视化运营 B2B2C平台&#xff1a; 平台管理端(包含自营) 商家平台端(多商户入驻) PC买家端、手机wap/公众号买家端 微服务&#xff08;30个通用微服务如&#xff1a;商品、订单、购物车、个人中心、支…...

[Linux] shell脚本的函数和数组

一、函数 1.1 函数的定义 函数是脚本的别名 作用&#xff1a;函数可以避免代码重复&#xff0c;可读性强&#xff0c;可以简化脚本。 格式&#xff1a;函数名&#xff08;&#xff09;{脚本} 1.2 如何使用函数 1.定义 2.调用 函数一定要先定义再使用 例子&#xff1a…...

Ubuntu系统下交叉编译openssl

一、参考资料 OpenSSL&&libcurl库的交叉编译 - hesetone - 博客园 二、准备工作 1. 编译环境 宿主机&#xff1a;Ubuntu 20.04.6 LTSHost&#xff1a;ARM32位交叉编译器&#xff1a;arm-linux-gnueabihf-gcc-11.1.0 2. 设置交叉编译工具链 在交叉编译之前&#x…...

TDengine 快速体验(Docker 镜像方式)

简介 TDengine 可以通过安装包、Docker 镜像 及云服务快速体验 TDengine 的功能&#xff0c;本节首先介绍如何通过 Docker 快速体验 TDengine&#xff0c;然后介绍如何在 Docker 环境下体验 TDengine 的写入和查询功能。如果你不熟悉 Docker&#xff0c;请使用 安装包的方式快…...

React第五十七节 Router中RouterProvider使用详解及注意事项

前言 在 React Router v6.4 中&#xff0c;RouterProvider 是一个核心组件&#xff0c;用于提供基于数据路由&#xff08;data routers&#xff09;的新型路由方案。 它替代了传统的 <BrowserRouter>&#xff0c;支持更强大的数据加载和操作功能&#xff08;如 loader 和…...

遍历 Map 类型集合的方法汇总

1 方法一 先用方法 keySet() 获取集合中的所有键。再通过 gey(key) 方法用对应键获取值 import java.util.HashMap; import java.util.Set;public class Test {public static void main(String[] args) {HashMap hashMap new HashMap();hashMap.put("语文",99);has…...

最新SpringBoot+SpringCloud+Nacos微服务框架分享

文章目录 前言一、服务规划二、架构核心1.cloud的pom2.gateway的异常handler3.gateway的filter4、admin的pom5、admin的登录核心 三、code-helper分享总结 前言 最近有个活蛮赶的&#xff0c;根据Excel列的需求预估的工时直接打骨折&#xff0c;不要问我为什么&#xff0c;主要…...

涂鸦T5AI手搓语音、emoji、otto机器人从入门到实战

“&#x1f916;手搓TuyaAI语音指令 &#x1f60d;秒变表情包大师&#xff0c;让萌系Otto机器人&#x1f525;玩出智能新花样&#xff01;开整&#xff01;” &#x1f916; Otto机器人 → 直接点明主体 手搓TuyaAI语音 → 强调 自主编程/自定义 语音控制&#xff08;TuyaAI…...

JUC笔记(上)-复习 涉及死锁 volatile synchronized CAS 原子操作

一、上下文切换 即使单核CPU也可以进行多线程执行代码&#xff0c;CPU会给每个线程分配CPU时间片来实现这个机制。时间片非常短&#xff0c;所以CPU会不断地切换线程执行&#xff0c;从而让我们感觉多个线程是同时执行的。时间片一般是十几毫秒(ms)。通过时间片分配算法执行。…...

tree 树组件大数据卡顿问题优化

问题背景 项目中有用到树组件用来做文件目录&#xff0c;但是由于这个树组件的节点越来越多&#xff0c;导致页面在滚动这个树组件的时候浏览器就很容易卡死。这种问题基本上都是因为dom节点太多&#xff0c;导致的浏览器卡顿&#xff0c;这里很明显就需要用到虚拟列表的技术&…...

比较数据迁移后MySQL数据库和OceanBase数据仓库中的表

设计一个MySQL数据库和OceanBase数据仓库的表数据比较的详细程序流程,两张表是相同的结构,都有整型主键id字段,需要每次从数据库分批取得2000条数据,用于比较,比较操作的同时可以再取2000条数据,等上一次比较完成之后,开始比较,直到比较完所有的数据。比较操作需要比较…...

基于Java+VUE+MariaDB实现(Web)仿小米商城

仿小米商城 环境安装 nodejs maven JDK11 运行 mvn clean install -DskipTestscd adminmvn spring-boot:runcd ../webmvn spring-boot:runcd ../xiaomi-store-admin-vuenpm installnpm run servecd ../xiaomi-store-vuenpm installnpm run serve 注意&#xff1a;运行前…...