深度学习基础之数据操作

深度学习中最常用的数据是张量,对张量进行操作是进行深度学习的基础。以下是对张量进行的一些操作:

首先我们需要先导入相关的张量库torch。

元素构造(初始化)

  • 使用arange创造一个行向量,也就是0轴(0维)。


    默认是按顺序创建,从0开始,元素类型默认是整数,当然也可以指定为浮点数。比如:
  • 可以使用张量shape属性来访问张量(沿每个轴的长度)的形状(shape)。

    当然指的是形状,也可能不只是一个维度。
  • 我们想知道张量中元素的总个数,也就是shape中所有元素的乘积,可以检查它的大小size。
  • 要想改变一个张量的形状,但是不改变张量的大小,可以使用reshape函数,这个函数是将张量进行维度转化。直接见例子:
    值得注意的是,这里的转化要求大小不变,比如我们的张量中一共有9个元素,那么我们只能转化为1*9,或者9*1,不能使之转化为2*4.5等。当然我们当然不是必须要计算出来每个维度的信息,如果我们需要转化为两个维度,而第一个维度已知是1,那么第二个维度可以直接用-1表示,另一个维度会自动被计算出来,我们可以省略一个维度。(最多省略一个维度)。维度的转化可以进行多维。
  • 有时候我们需要全0或者全1的张量,torch库中提供的有相应的函数。
  • 有时候我们需要通过某个概率分布中随机采样来获得元素的值,当我们构造数组来作为神经网络中的参数的时候,我们通常随机初始化参数的值。以下是一个使用正态分布来初始化数组的代码,这里我们使用的是均值为0,标准差为1的正态分布。

    随机化的结果会因为每次运行的不同而有所不同。

当然,最简单的构造方法就是直接构造张量。这里我们使用tensor来直接构造。

运算符

  • 运算中最常见的操作是加减乘除。
    在上述结果中,除法运算默认保留四位小数。
    幂运算我们在大学线性代数中没有接触,其实就是相应位置的幂运算。
  • 我们也可以把多个张量剪切到一起。连接(concatenate)对应的函数是cat。
    这里dim是维度的意思,0维即是行,1维即是列,同理递推。

    显然,维度不能超出范围。
  • 还能判断对应位置元素是否相等,直接使用==判断,结果可不是返回一个数值0或1,而是返回一个张量,该张量是对应每个位置比较的结果。
    相同的问题,对于判断两个张量是否相等的运算,首先要确保这两个张量的shape(形状)要统一。

将张量中所有元素求和,会得到一个新的元素(单张量),也可以认为是维度是1。

广播机制

广播机制就是通过适当复制元素来扩展一个或者两个数组,以便在转化之后两个数组具有相同的形状。但是大多数情况下,我们只会沿着维度为1 的轴进行广播。
在下图中,a的形状是2*2,没有维度是1的轴,无法进行广播,由于无法转化维度,导致不能与b相加。

接下来我们尝试用三阶张量替换广播机制中按元素操作的两个张量,看看是否符合预期。

答案是肯定的,但是我们首先要确保,每个维度上都必须有至少一个1。(用于进行广播)。

索引和切片

  • 用于读取元素:
    如图,-1表示最后一个元素,张量经过reshape处理后有三个元素,reshape可以这样理解(第一个参数表示元素个数,后面的所有参数组成一个元素)。
    第二个输出输出的是[1:3)的元素,左边参数是闭区间,右边参数是开区间。即选取 1和2。分别是第二个元素和第三个元素,元素的索引是从0开始的。

更改元素:

在这里,我们使第二行第三列的元素更改为0,最后一行最后一列的元素也更改为0。
当然,当我们进行有规律的大规模连续更改的时候,我们使用切片。

“:”表示默认,第一个参数表示是默认所有行,第二个参数表示是默认所有列。
这样,我们就指定2,3行,所有列进行更改。

节省内存

首先思考一个问题:x=x+y和x+=y是否相同:
在结果上时相同的,但是在内存分配上却不相同,第一个式子是为x重新分配一个内存来存储x张量,第二个式子是在原有x张量内存的基础上进行更改。我们可以用id函数来可视化:注意这里不能使用torch.ones(3,4)来创建。只能使用ones_like来创建,或者是zero_like来创建。

为什么说重新分配内存是不可取的:
首先,在机器学习中,我们可能有数百兆的参数,并且在一秒内多次更新参数,如果不原地执行这些更新的话,会占用大量的内存。
其次,如果不进行原地更新,其他的引用仍然会指向旧的内存地址,这样我们的代码可能无意间引用旧的参数。


当然也可以使用a[:]=<expression>来原地更新。比如:

有趣的是,这里可以使用torch.ones或者torch.zeros来创建张量,并且进行+=操作的时候不报错。

转化为其他类型的Python对象

将深度学习框架(pytorch)转化为Numpy张量对象(ndarray)很容易,反之也很容易。

当然,张量也可以转化为标量。(仅适用于大小为1的张量)

总结:

深度学习存储和操作数据的主要接口是张量(n维数组),它提供了各种功能,包括基本数学运算,广播,索引,切片,内存节省和转化为其他Python对象。

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

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

相关文章

中断——外部中断EXIT

终端可以分成外部中断和内部中断吗 文章目录 前言一、pandas是什么&#xff1f;二、使用步骤 1.引入库2.读入数据总结 前言 野火中断章节有这样一句话 【F103在内核水平上搭载了一个异常响应系统&#xff0c; 支持为数众多的系统异常和外部中断。 其中系统异常有8个&#xff…

学校服务器hpc东南大学,下载国家基因组科技中心数据 gsa-human ascp chatpt建议 Linux系统中写代码

使用ascp批量下载数据 You files.csv 帮我写个批量下载的脚本&#xff0c;批量下载时候&#xff0c;把路径中最后的HRR659816批量替换成 Accession列的内容就行了。下面是示例 ascp -v -QT -l 300m -P33001 -k1 -i ~/.aspera/connect/etc/aspera01.openssh_for_gsa -d asper…

HNU-数据挖掘-实验3-图深度学习

数据挖掘课程实验实验3 图深度学习 计科210X 甘晴void 202108010XXX 文章目录 数据挖掘课程实验<br>实验3 图深度学习实验背景实验要求数据集解析实验内容&#xff08;0&#xff09;基础知识&#xff1a;基于图的深度学习方法浅识&#xff1a;图卷积网络 (GCN)浅识&…

【机组】微程序控制单元实验的解密与实战

​&#x1f308;个人主页&#xff1a;Sarapines Programmer&#x1f525; 系列专栏&#xff1a;《机组 | 模块单元实验》⏰诗赋清音&#xff1a;云生高巅梦远游&#xff0c; 星光点缀碧海愁。 山川深邃情难晤&#xff0c; 剑气凌云志自修。 ​ 目录 &#x1f33a;一、 实验目…

HTML以及CSS相关知识总结(一)

近日就开始回顾html和css相关知识啦&#xff0c;并且会学习html5和css3的新知识&#xff0c;以下是我对记忆不太深刻的地方以及新知识点的总结&#xff1a; Web标准&#xff1a; 结构&#xff1a;用于对网页元素进行整理和分类&#xff0c;即HTML 表现&#xff1a;用于设置网页…

计算机的受信任平台模块出现故障,错误代码 80090016

在一次修改 MicroSoft 365 密码后&#xff0c;本地登录Teams出现错误&#xff1a; 计算机的受信任平台模块出现故障。如果此错误仍然存在&#xff0c;请与系统管理员联系&#xff0c;并提供错误代码80090016。 详细信息&#xff1a;https::/www.microsoft.com/wamerrors Teams…

OpenAI的GPT接口的调用流程

要调用OpenAI的GPT接口&#xff0c;您需要获得API密钥&#xff0c;并使用HTTP请求发送请求。以下是一般的步骤&#xff0c;希望对大家有所帮助。北京木奇移动技术有限公司&#xff0c;专业的软件外包开发公司&#xff0c;欢迎交流合作。 1.获取OpenAI API密钥&#xff1a; 在使…

Threejs实现立体3D园区解决方案及代码

一、实现方案 单独贴代码可能容易混乱&#xff0c;所以这里只讲实现思路&#xff0c;代码放在最后汇总了下。 想要实现一个简单的工业园区、主要包含的内容是一个大楼、左右两片停车位、四条道路以及多个可在道路上随机移动的车辆、遇到停车位时随机选择是否要停车&#xff0…

【MATLAB源码-第121期】基于matlab的斑马优化算法(ZOA)机器人栅格路径规划,输出做短路径图和适应度曲线。

操作环境&#xff1a; MATLAB 2022a 1、算法描述 斑马优化算法&#xff08;Zebra Optimization Algorithm&#xff0c;简称ZOA&#xff09;是一种模仿斑马群体行为的优化算法。在自然界中&#xff0c;斑马是一种社会性很强的动物&#xff0c;它们具有独特的群体行为模式&…

精品基于Uniapp+springboot菜谱美食饮食健康管理App

《[含文档PPT源码等]精品基于Uniappspringboot饮食健康管理App》该项目含有源码、文档、PPT、配套开发软件、软件安装教程、项目发布教程、包运行成功&#xff01; 软件开发环境及开发工具&#xff1a; 开发语言&#xff1a;Java 后台框架&#xff1a;springboot、ssm 安卓…

Leveraging Unlabeled Data for Crowd Counting by Learning to Rank

无标签人群技术&#xff0c;作者引入了一种排名。 利用的是一个图的人群数量一定小于等于包含这个图的图 生成排名数据集 作者提出了一种自监督任务&#xff0c;利用的是一个图的人群数量一定小于等于包含这个图的图 流程&#xff1a; 1.以图像中心为中心&#xff0c;划分一…

All the stories begin at installation

Before installation, there are some key points about Conan: “Conan is a dependency and package manager for C and C languages.”“With full binary management, Conan can create and reuse any number of different binaries (for different configurations like a…

MATLAB Fundamentals>>>Smoothing Data with Moving Average

MATLAB Fundamentals>Common Data Analysis Techniques>Smoothing Data> (2/5) Smoothing Data with Moving Average 例1&#xff1a; Smoothing method:Moving mean Moving window:Centered 2 代码2&#xff1a; % Smooth input data ySm smoothdata(y,"mov…

系统引导器GRUB

全称为GNU GRUB&#xff0c;来自GNU计划的多操作系统引导器。 作用&#xff1a; 查看引导分区内容 ls /boot ls /boot/grub2/ 查看GRUB2的配置文件 cat /boot/grub2/grub.cfg 可以看到/boot中保存的文件主要是linux内核、内存映像文件等。 注意到是子用户&#xff0c;但在…

Elasticsearch+Kibana 学习记录

文章目录 安装Elasticsearch 安装Kibana 安装 Rest风格API操作索引基本概念示例创建索引查看索引删除索引映射配置&#xff08;不配置好像也行、智能判断&#xff09;新增数据随机生成ID自定义ID 修改数据删除数据 查询基本查询查询所有&#xff08;match_all&#xff09;匹配查…

axios的基本使用

在项目根目录下创建js目录&#xff0c;目录中添加axios.min.js文件 准备页面&#xff1a;testAxios.html: 实现一个简单的GET请求 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>Title</title>…

Java数据结构之排序(头歌平台,详细注释)

目录 第1关&#xff1a;选择排序 任务描述 相关知识 代码&#xff1a; 第2关&#xff1a;插入排序 任务描述 相关知识 插入排序 代码&#xff1a; 第3关&#xff1a;归并排序 任务描述 相关知识 归并排序 原理 代码&#xff1a; 第4关&#xff1a;快速排序 任务描述 相关…

Prometheus配置Grafana监控大屏(Docker)

拉取镜像 docker pull grafana/grafana挂载目录 mkdir /data/prometheus/grafana -p chmod 777 /data/prometheus/grafana临时启动 docker run -d -p 3000:3000 --name grafana grafana/grafana从容器拷贝配置文件至对应目录 docker exec -it grafana cat /etc/grafana/gra…

[C++]:12:模拟实现list

[C]:12:模拟实现list 一.看一看SGI的stl_list的源码&#xff1a;1.基础结构构造函数1.节点结构&#xff1a;2.节点构造函数&#xff1a;3.链表结构&#xff1a;4.链表的构造函数&#xff1a; 2.析构1.节点析构&#xff1a;2.链表的析构&#xff1a; 3.迭代器 二.模拟实现list1.…

PyTorch深度学习实战(31)——生成对抗网络(Generative Adversarial Network, GAN)

PyTorch深度学习实战&#xff08;31&#xff09;——生成对抗网络 0. 前言1. GAN2. GAN 模型分析3. 利用 GAN 模型生成手写数字小结系列链接 0. 前言 生成对抗网络 (Generative Adversarial Networks, GAN) 是一种由两个相互竞争的神经网络组成的深度学习模型&#xff0c;它由…