深度学习-数据操作


目录

  • 张量
  • 通过shape属性访问张量的形状
  • 通过shape属性访问张量中元素的总数
  • reshape改变张量的形状(不改变元素数量和元素值)
  • 使用全0、全1、其他常量或者从特定分布中随机采样的数字
  • 通过提供包含数值的Python列表为所需张量中的每个元素赋予确定值。
  • 张量的算数运算符升级为按元素运算
  • 张量按元素方式的指数运算
  • 张量的连结cat函数
  • 逻辑运算符构建二元张量
  • sum()函数-----张量中所有元素进行求和会产生一个只有一个元素的张量
  • 广播机制--即使形状不同也可以执行按元素操作
  • 选择张量的最后一个元素
  • 通过指定索引来将元素写入矩阵
  • 通过索引所有元素为多个元素赋值相同的值
  • 内存分配的问题
    • 运行的操作导致新结果分配内存
    • 执行原地操作
  • 转换为NumPy张量
  • 将大小为1的张量转换为Python标量

张量

张量表示一个数值组成的数组,这个数组可能有多个维度

import torch
x = torch.arange(12)
print(x)

结果:在这里插入图片描述




通过shape属性访问张量的形状

import torch
x = torch.arange(12)
print(x.shape)

结果:在这里插入图片描述



根据shape属性来访问张量的形状和张量中元素的总数。




通过shape属性访问张量中元素的总数

import torch
x = torch.arange(12)
print(x.numel())

结果:在这里插入图片描述




reshape改变张量的形状(不改变元素数量和元素值)

import torch
x = torch.arange(12)
print(x.reshape(3, 4))

结果:
在这里插入图片描述

这里的维度由reshape参数多少来决定的。
例如:一维(本身就是一维的)
例如:三维

import torch
x = torch.arange(12)
print(x.reshape(2, 2, 3))

结果:
在这里插入图片描述




使用全0、全1、其他常量或者从特定分布中随机采样的数字

import torch
print(torch.zeros(2, 3, 4))
import torch
print(torch.zeros((2, 3, 4)))

两者的区别在于:直接传递多个整数参数时,torch.zeros(2, 3, 4)是更简洁的写法。而传递一个元组torch.zeros((2, 3, 4))则提供了更多的灵活性,特别是动态地构建形状时。




import torch
print(torch.ones(2, 3, 4))

结果:
在这里插入图片描述




通过提供包含数值的Python列表为所需张量中的每个元素赋予确定值。

import torch
print(torch.tensor([[2, 1, 4, 3], [1, 2, 3, 4], [4, 3, 2, 1]]))

结果:

在这里插入图片描述




张量的算数运算符升级为按元素运算

import torch
x = torch.tensor([1.0, 2, 4, 8])
y = torch.tensor([2, 2, 2, 2])
print(x + y)
print(x - y)
print(x * y)
print(x / y)
print(x ** y)

结果:

在这里插入图片描述
若发现数据报错无法相加时,可以使数据类型一致。如下:

y = torch.tensor([2, 2, 2, 2], dtype=torch.float32) 



张量按元素方式的指数运算

import torch
x = torch.tensor([1.0, 2, 4, 8])
print(torch.exp(x))

结果:
在这里插入图片描述




张量的连结cat函数

import torch
x = torch.arange(12, dtype=torch.float32).reshape((3, 4))
y = torch.tensor([[2.0, 1, 4, 3], [1, 2, 3, 4], [4, 3, 2, 1]])
print(torch.cat((x, y), dim=0)) //dim=0的意思是按行连结
print(torch.cat((x, y), dim=1)) //dim=1的意思是按列连结

结果:在这里插入图片描述
在这里插入图片描述

注意:
1、arange()函数是左闭右开,从0开始生成。
2、x = torch.arange(12, dtype=torch.float32).reshape((3, 4))也可以是x = torch.arange(12, dtype=torch.float32).reshape(3, 4)区别在于用的那个代码是传递的元组,会更加灵活。




逻辑运算符构建二元张量

import torch
x = torch.arange(12, dtype=torch.float32).reshape((3, 4))
y = torch.tensor([[2.0, 1, 4, 3], [1, 2, 3, 4], [4, 3, 2, 1]])
print(x == y)

结果:
在这里插入图片描述




sum()函数-----张量中所有元素进行求和会产生一个只有一个元素的张量

import torch
x = torch.arange(12, dtype=torch.float32).reshape((3, 4))
print(x.sum())

结果:
在这里插入图片描述




广播机制–即使形状不同也可以执行按元素操作

import torch
a = torch.arange(3).reshape((3, 1))
b = torch.arange(2).reshape((1, 2))
print(a)
print(b)

结果:
在这里插入图片描述

import torch
a = torch.arange(3).reshape((3, 1))
b = torch.arange(2).reshape((1, 2))
print(a+b)

过程:
a+b时对a的操作
[0]      [0,0]
[1]→  [1,1]
[2]      [2,2]
a+b时对b的操作
[0,1]
   ↓
[0,1]
[0,1]
[0,1]


结果:
在这里插入图片描述
分析:
两个张量形状不一样但可以变成一样(因为维数一样)
对于a中的reshape((3,2))它的行维度为3、列维度为1
对于b中的reshape((1,2))它的行维度为1、列维度为2

相加的条件:
            需要维度两同
两个变量分别有一个是一维的,否则也不能相加。




选择张量的最后一个元素

import torch
x = torch.arange(12).reshape((3, 4))
print(x[-1])

结果:
在这里插入图片描述

import torch
x = torch.arange(12).reshape((3, 4))
print(x[1:3])

结果:
在这里插入图片描述

x[1:3]是取第一行和第二行,左闭右开
但python中下标是从0开始。所以从全局来数就是第二行和第三行。




通过指定索引来将元素写入矩阵

import torch
x = torch.arange(12).reshape((3, 4))
x[1, 2] = 9
print(x)

结果:
在这里插入图片描述




通过索引所有元素为多个元素赋值相同的值

import torch
x = torch.arange(12).reshape((3, 4))
x[0:2, :] = 12
print(x)

结果:
在这里插入图片描述




内存分配的问题

运行的操作导致新结果分配内存

import torch
x = torch.arange(12).reshape((3, 4))
y = torch.tensor([[2.0, 1, 4, 3], [1, 2, 3, 4], [4, 3, 2, 1]])
before = id(y) 	//类似指针、存放y的id
y = y + x 		//新的y的id
print(id(y) == before)

此时的y已经被析构了。
内存析构:即销毁原来的变量释放内存。

结果:在这里插入图片描述

执行原地操作

import torch
x = torch.arange(12).reshape((3, 4))
y = torch.tensor([[2.0, 1, 4, 3], [1, 2, 3, 4], [4, 3, 2, 1]])
before = id(y)
y += x
print(id(y) == before)

结果:在这里插入图片描述

import torch
x = torch.arange(12).reshape((3, 4))
y = torch.tensor([[2.0, 1, 4, 3], [1, 2, 3, 4], [4, 3, 2, 1]])
z = torch.zeros_like(y)
print(id(z))
z[:] = x + y
print(id(z))

结果:在这里插入图片描述
首先,z设置成和y一样的shape和数据类型但是元素都是0,然后,对z的元素进行一次改写。




转换为NumPy张量

import torch
x = torch.arange(12).reshape((3, 4))
A = x.numpy()
B = torch.tensor(A)
print(type(A), type(B))

结果:在这里插入图片描述




将大小为1的张量转换为Python标量

import torch
a = torch.tensor([3.5])
print(a)
print(a.item())
print(float(a))
print(int(a))

结果:
在这里插入图片描述

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

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

相关文章

半导体存储器整理

半导体存储器用来存储大量的二值数据,它是计算机等大型数字系统中不可缺少的组成部分。按照集成度划分,半导体存储器属于大规模集成电路。 目前半导体存储器可以分为两大类: 只读存储器(ROM,Read Only Memory&#xff…

如何判断客户需求能不能做出来产品?

在做G端产品的过程中,为了让产品可以符合客户实际需求,我们需要经历客户需求调研的这个环节。那么,需求收集后,我们要从什么维度判断客户的需求是否真的可以产品化呢? 我们做G端产品,新产品的方向几乎100%来自于政策。所以才会有“政策带来产品,产品催生政绩”。 可就算…

解锁ApplicationContext vs BeanFactory: 谁更具选择性?

目录 一、聚焦源码回顾 (一)源码分析和理解 (二)简短的回顾对比建议 二、ApplicationContext vs BeanFactory特性对比 (一)主要特性总结 (二)直接建议 三、案例简单说明 &am…

OpenTelemetry-1.介绍

目录 1.是什么 2.为什么使用 OpenTelemetry 3.数据类型 Tracing Metrics Logging Baggage 4.架构图 5.核心概念 6.相关开源项目 ​编辑 7.分布式追踪的起源 8.百花齐放的分布式追踪 Zipkin Skywalking Pinpoint Jaeger OpenCensus OpenTracing 9.Openteleme…

虚假新闻检测——Adapting Fake News Detection to the Era of Large Language Models

论文地址:https://arxiv.org/abs/2311.04917 1.概论 尽管大量的研究致力于虚假新闻检测,这些研究普遍存在两大局限性:其一,它们往往默认所有新闻文本均出自人类之手,忽略了机器深度改写乃至生成的真实新闻日益增长的现…

【北京迅为】《iTOP-3588开发板系统编程手册》-第20章 socket 应用编程

RK3588是一款低功耗、高性能的处理器,适用于基于arm的PC和Edge计算设备、个人移动互联网设备等数字多媒体应用,RK3588支持8K视频编解码,内置GPU可以完全兼容OpenGLES 1.1、2.0和3.2。RK3588引入了新一代完全基于硬件的最大4800万像素ISP&…

TI_DSP_F2808学习笔记1: GPIO

1. 初始化设置 1.1 控制寄存器 GPxMUX功能选择寄存器/多功能复用选择 GPxDIR 方向选择寄存器/输入输出选择 0 输入 1 输出GPxPUD 上拉功能选择寄存器/是否启用内部上拉 0 有上拉,1禁止上拉GPxQSeln输入限定选择寄存器 输入n次为0或1才有效,滤波 1.2 数…

PDF 书签制作与调整

本文是对以前发表的旧文拆分,因为原文主题太多,过长,特另起一篇分述。 第一部分 由可编辑 PDF 文档创建书签 方法 1. Adobe Acrobat Pro autobookmark AutoBookmark 是一个可用于 Adobe Acrobat 自动生成书签的插件。 官方下载地址&…

corona渲染器锐化模糊设置,corona高效出图方法

​在使用Corona渲染器进行效果图渲染时,锐化和模糊是两种常用的设置,它们主要用于调整图像的清晰度和柔化效果。锐化参数可以增强图像中的细节,使画面看起来更加清晰锋利;而模糊参数则可以用来柔化图像边缘,减少图像噪…

Etsy多账号关联怎么办?Etsy店铺防关联解决方法

Etsy虽然相对于其他跨境电商平台来说比较小众,但因为平台是以卖手工艺品为主的,所以成本较低,利润很高。许多跨境卖家都纷纷入驻,导致平台规则越发严格,操作不当就会封号,比如一个卖家操作多个账号会出现关…

10.接口自动化测试学习-Pytest框架(2)

1.mark标签 如果在每一个模块,每一个类,每一个方法和用例之前都加上mark标签,那么在pytest运行时就可以只运行带有该mark标签的模块、类、接口。 这样可以方便我们执行自动化时,自主选择执行全部用例、某个模块用例、某个流程用…

二分查找知识点及练习题

知识点讲解 一、没有相同元素查找 请在一个有序递增数组中(不存在相同元素),采用二分查找,找出值x的位置,如果x在数组中不存在,请输出-1! 输入格式 第一行,一个整数n,代…

家用洗地机买什么牌子的好?四大业内顶尖品牌推荐

家庭清洁一直是必不可少的,但用传统的手动拖地清洁,费时又费力。现在出现了洗地机,确实改变了我们对家庭清洁的看法。它不仅能扫地、拖地,还能吸水,甚至能够自动清洁滚刷解放我们双手,提供高效清洁的同时还…

【Linux系列】 离线安装vnc 可视化桌面

离线安装vnc 可视化桌面 缘下载安装vnc初始化链接 缘 项目需要下载 下载地址: http://mirror.centos.org/centos/7/updates/x86_64/Packages/tigervnc-license-1.8.0-31.el7_9.noarch.rpm http://mirror.centos.org/centos/7/os/x86_64/Packages/libXfont2-2.0.…

【Day 6】MySQL 基础

1 MySQL DataBase(DB)是存储和管理数据的仓库 DataBaseManagementSystem(DBMS)数据库管理系统,操纵和管理数据库的大型软件 SOL(Structured QueryLanguage)操作关系型数据库的编程语言&#…

C++/Qt 小知识记录5

工作中遇到的一些小问题,总结的小知识记录:C/Qt 小知识5 Windows下查看端口占用情况C调用Python三方库测试库有没有被加上的测试方法初始化使用Python的env环境,用Py_SetPythonHome设置GDAL相关的,需要把osgeo、rasterio的路径加入…

【iOS开发】(一)2024 从一无所有开始,到ios开发(react Native)

​ 2024 从一无所有开始,到ios开发(react Native) 目录标题 1 工具简介2 基础环境搭建1 安装 brew2 安装 Node.js3 安装 Yarn4 安装 React Native 脚手架 3 ios环境搭建4创建并启动一个app 在这里插入图片描述 1 工具简介 Homebrew (brew)&a…

OpenHarmony实战开发-页面布局检查器ArkUI Inspector使用指导

DevEco Studio内置ArkUI Inspector工具,开发者可以使用ArkUI Inspector,在DevEco Studio上查看应用在真机上的UI显示效果。利用ArkUI Inspector工具,开发者可以快速定位布局问题或其他UI相关问题,同时也可以观察和了解不同组件之间…

Matlab分段微分方程组拟合【案例源码+视频教程】

专栏导读 作者简介:工学博士,高级工程师,专注于工业软件算法研究本文已收录于专栏:《复杂函数拟合案例分享》本专栏旨在提供 1.以案例的形式讲解各类复杂函数拟合的程序实现方法,并提供所有案例完整源码;2.…

LLM 构建Data Multi-Agents 赋能数据分析平台的实践之③:数据分析之一(智能报表)

概述 在企业数字化转型的过程中,ERP系统与数据平台作为核心支撑工具,对于提升运营效率、优化决策支持、实现业务流程一体化起着至关重要的作用。然而,智能报表与报表的智能化合并作为其中的重要领域,却往往面临诸多挑战与难点&am…