深度学习 -- 什么是张量 pytorch中张量的几种创建方法

news2024/12/27 12:39:44

前言

在学习深度学习的过程中,遇到的第一个概念就是张量,张量在pytorch中的计算十分重要,所以本篇博客记录本人学习张量的过程,以及自己的理解。

张量是什么?

在这里插入图片描述

张量是一个多维数组,它是标量、向量、矩阵的高维扩展

我们通常用三维张量去表示一张图像的数据

Tensor与Variable

张量在pytorch中是做求导计算的关键概念

Variable是torch.autograd中的数据类型,主要用于封装Tensor,进行自动求导

在这里插入图片描述

  • data:被包装的Tensor
  • grad:data的梯度
  • grad_fn:创建Tensor的Function,是自动求导的关键
  • requires_grad:指示是否需要梯度
  • is_leaf:知识是否是叶子结点(张量)

Pytorch0.4.0版开始,Variable并入Tensor

在这里插入图片描述

  • dtype:张量的数据类型,如 torch.FloatTensor,torch.cuda.FloarTensor
  • shape:张量的形状,如(64,3,224,224)
  • device:张量所在的设备,GPU/CPU,是加速的关键

如何创建张量?

直接创建

torch.tensor()
功能:从data创建tensor

  • data:数据,可以是list,numpy
  • dtype:数据类型,默认与data的一致
  • device:所在设备,cuda/cpu
  • requires_grad:是否需要梯度
  • pin_memory:是否存于锁页内存
import torch
import numpy as np
a_np = np.ones((3,3))
tensor = torch.Tensor(
    a_np,
    dtype=None,
    device=None,
    requires_grad=False,
    pin_memory=False,
)
print(tensor)

输出:

tensor([[1., 1., 1.],
        [1., 1., 1.],
        [1., 1., 1.]])

torch.from_numpy(ndarray)

功能:从numpy创建tensor
注意事项:从torch.from_numpy创建的tensor于原ndarray共享内存,当修改其中一个的数据,另外一个也将会被改动

在这里插入图片描述

import torch
import numpy as np
a_np = np.array([[1,2,3,4],[1,2,3,4]])
# 创建张量
# print(torch.Tensor(a_np))

# 从numpy数据类型创建
a_tensor = torch.from_numpy(a_np)
print(a_tensor)

输出:

tensor([[1, 2, 3, 4],
        [1, 2, 3, 4]], dtype=torch.int32)

如果更改numpy数组中的数据,tensor中的数据也会被改变,说明这两个数据是共享内存的。

a_np[0][0] = 2
print(a_tensor)

输出:

tensor([[2, 2, 3, 4],
        [1, 2, 3, 4]], dtype=torch.int32)

依据数值创建

torch,zeros()
功能:依size创建全0张量

  • size:张量的形状,如(3,3)、(3,224,224)
  • out:输出的张量
  • layout:内存中布局形式,有strided,space_coo等
  • device:所在设备,gpu/cpu
  • requires_grad:是否需要梯度

在这里插入图片描述

import torch
a_tensor = torch.zeros((3,3),out=None,layout=torch.strided,device=None)

print(a_tensor)

输出:

tensor([[0., 0., 0.],
        [0., 0., 0.],
        [0., 0., 0.]])

torch.zeros_like()
功能:依input形状创建全0张量

  • intput:创建与input同形状的全0张量
  • dtype:数据类型
  • layout:内存中布局形式

在这里插入图片描述

a_tensor = torch.zeros((3,3),out=None,layout=torch.strided,device=None)
# print(a_tensor)

b_tensor = torch.zeros_like(
    a_tensor,
    dtype=None,
    layout=None,
    device=None
)
print(b_tensor)

输出:

tensor([[0., 0., 0.],
        [0., 0., 0.],
        [0., 0., 0.]])

torch.ones()
torch.ones_like()

全1张量的创建,创建方式与全0张量一样,就不过多赘述。
在这里插入图片描述

torch.full()
torch.full_like()
功能:依input形状创建全自定义数值的张量

  • size:张量的形状
  • fill_value:张量的值
a_tensor = torch.full((3,3),3)
b_tensor = torch.full_like(a_tensor,4)
print(a_tensor)
print(b_tensor)

输出:

tensor([[3, 3, 3],
        [3, 3, 3],
        [3, 3, 3]])
tensor([[4, 4, 4],
        [4, 4, 4],
        [4, 4, 4]])

torch.arange()
功能:创建等差的1维向量

  • start:数列起始值
  • end:数列“结束值”
  • step:数列公差,默认为1

在这里插入图片描述

a_tensor = torch.arange(0,10,step=2)
print(a_tensor)
tensor([0, 2, 4, 6, 8])

注意:end的值不取

torch.linspace()
功能:创建均分的1维张量
注意事项:数值区间维[start,end] end是取的

  • start:数列起始值
  • end:数列结束值
  • steps:数列长度

在这里插入图片描述

a_tensor = torch.linspace(1,100,20)
print(a_tensor)

输出:

tensor([  1.0000,   6.2105,  11.4211,  16.6316,  21.8421,  27.0526,  32.2632,
         37.4737,  42.6842,  47.8947,  53.1053,  58.3158,  63.5263,  68.7368,
         73.9474,  79.1579,  84.3684,  89.5789,  94.7895, 100.0000])

torch.logspace()
创建对数均分的1维张量

  • start:数列起始值
  • end: 数列结束值
  • steps:数列长度
  • base:对数函数的底,默认为10

在这里插入图片描述

torch.eye()
功能:创建单位对角矩阵(2维张量)

  • n:矩阵行数
  • m:矩阵列数

在这里插入图片描述

依概率分布创建张量

torch.normal()
生成正态分布(高斯分布)

  • mean:均值
  • std:标准差

在这里插入图片描述

gaosi = torch.normal(0.5,0.25,size=(4,))
print(gaosi)

输出:

tensor([0.2068, 0.5469, 0.4644, 0.6587])

torch.randn()
torch.randn_like()

生成标准正态分布

  • size:张量的形状

在这里插入图片描述

torch.rand()
torch.rand_like()
在[0,1)区间上,生成均匀分布

torch.randint()
torch.randint_like()
区间[low,high)上生成整数均匀分布

  • size:张量形状

pytorh中常见的几种创建方法就是这些了,以后如果遇到新的创建方法我也会在博客中进行分享,下篇博客中,我将学习,张量的一些变换以及计算。

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

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

相关文章

SpringBoot的创建及配置文件

文章目录:一.Spring项目的创建(1)SpringBoot的含义 (2)SpringBoot的优点 (3)项目目录的运行和介绍 二.SpringBoot的配置文件 (1)配置文件的作用 (2&#xff0…

E5--Aurora 8/10Bip核实现光纤接口通信2023-04-22

1.场景 使用两块开发板A和B,通过光纤接口将在A板上ROM中存储的图片数据转发到B板并显示在B板连接的显示屏上,实现光纤接口通信。 具体场景是,由于A735T片上资源有限,因此ROM IP存储了一张1024*600(LVDS屏幕&#xff0…

集成光子学在计算领域的机会与挑战【光子学公开课 第133期】

没有听懂,自己浅浅记录一下 背景 深度学习与大模型带来的算力需求(需要的算力指数型提高) 解决方案 算力池化和算力网络 传统的主机服务,可能会存在闲置资源。 ->改变商业模式:不是出售硬件服务,…

【Makefile通用模板】入门必看篇,超详细

工程目录 假如我们有以下目录结构&#xff1a; . ├── inc │ ├── add.h │ └── sub.h ├── main.c └── src├── add.c└── sub.c文件中的内容如下&#xff1a; //main.c #include <stdio.h> #include "add.h" #include "sub.h&q…

nodejs+vue 智慧餐厅点餐餐桌预订系统

现在社会的生活节奏越来越快&#xff0c;人们对互联网的需求也越来越大&#xff0c;不仅要求使用方便&#xff0c;而且对于功能及扩展性也有了更高的要求&#xff0c;最能达到要求莫过于利用计算机网络&#xff0c;将所需功能要求和计算机网络结合起来&#xff0c;就形成了本智…

FOSSASIA Summit 的参会为 openEuler 全球化注入强心剂

2023年4月15日&#xff0c;亚洲顶级开源盛会FOSSASIA Summit 2023在新加坡落幕。openEuler作为白金赞助级别参会。 自2009年成立以来&#xff0c;除因疫情中断3年之外&#xff0c;FOSSASIA Summit已累计举办11年。作为亚洲年度开源技术旗舰活动&#xff0c;FOSSASIA Summit吸引…

C/C++ 常见编译器说明

文章目录 window下常用的编译器如何获取MSVCMinGW Linux和MaxOS下的编译器gcc和g的区别 window下常用的编译器 window下并不提供原生的类似gcc/g的类unix系统下的C/C编译器。常用的是 MSVC&#xff08;Microsoft Visual C/C&#xff09;编译器&#xff0c;在我们安装完visual …

python 获取脚本所在存储目录

获取.py文件所在目录 问题背景问题原因解决方法 问题背景 项目需要使用到当前脚本所在的目录然后保存文件 我像之前一样&#xff0c;使用了os.getcwd() 去获取脚本目录&#xff0c;保存文件&#xff0c;程序正常运行&#xff0c;但设定路径下没有任何文件&#xff0c;没有头脑…

读 AI学者生存策略

链接&#xff1a;https://arxiv.org/pdf/2304.06035.pdf 作者&#xff1a;Julian Togelius and Georgios N. Yannakakis 随着大模型 和 大数据的出现&#xff0c; AI研究者 都会感到焦虑。 没有计算资源 &#xff0c;没有标注的人力&#xff0c;很难做出突破性的研究。即使很多…

FFmpeg 中 RTSP推流桌面和Android设备延时测试

文章目录 1. FFMPEG 推流&#xff1a;1.1 FFmpeg 源码准备1.2 RTSP 推流服务器 2. 执行流程2.1 启动服务器2.2 执行桌面推流2.3 播放 3. 安卓测试 1. FFMPEG 推流&#xff1a; 1.1 FFmpeg 源码准备 官网&#xff0c;GitHub&#xff0c;CSDN中选一个就好&#xff1a; ● 官网…

在线图片编辑网站汇总

目录 前言一、在线抠图工具1. 佐糖2. remove.bg3. Clipping Magic4. 起兮深深5. BgSub6. 改图神器7. PIXLR 二、其他工具1. 压缩图2. AI人工智能图片放大 前言 本文收录了多个可以在线抠图、在线编辑图片的网站。 一、在线抠图工具 1. 佐糖 官网&#xff1a;链接 特点&#x…

一本通 3.4.4 并查集

1346&#xff1a;【例4-7】亲戚(relation) 【题目描述】 或许你并不知道&#xff0c;你的某个朋友是你的亲戚。他可能是你的曾祖父的外公的女婿的外甥女的表姐的孙子。如果能得到完整的家谱&#xff0c;判断两个人是否是亲戚应该是可行的&#xff0c;但如果两个人的最近公共祖…

企业想注销境外投资备案应该怎么做?

我们今天就来说一下关于境外投资备案的注销&#xff0c;有办理的需求&#xff0c;当然就有注销的需求。如果您当初想去海外投资并购一家公司&#xff0c;因此办理了境外投资备案&#xff0c;但是由于种种原因可能没有办法投资下去了&#xff0c;那么这个时候我们就需要做境外投…

【Linux网络服务】SSH远程访问及控制

一、openssh服务器 1.1ssh协议 SSH&#xff08;Secure Shell&#xff09;是一种安全通道协议&#xff0c;主要用来实现字符界面的远程登录、远程 复制等功能&#xff1b; SSH 协议对通信双方的数据传输进行了加密处理&#xff0c;其中包括用户登录时输入的用户口令&#xff1…

测试月入30K,Soeasy?测试这一行涨薪机制被我摸透了...

1.软件测试如何实现涨薪 首先涨薪并不是从8000涨到9000这种涨薪&#xff0c;而是从8000涨到15K加到25K的涨薪。基本上三年之内就可以实现。 如果我们只是普通的有应届毕业生或者是普通本科那我们就只能从小公司开始慢慢往上走。 有些同学想去做测试&#xff0c;是希望能够日…

nodejs+vue 智能餐厅菜品厨位分配管理系统

系统功能主要介绍以下几点&#xff1a; 本智能餐厅管理系统主要包括三大功能模块&#xff0c;即用户功能模块和管理员功能模块、厨房功能模块。 &#xff08;1&#xff09;管理员模块&#xff1a;系统中的核心用户是管理员&#xff0c;管理员登录后&#xff0c;通过管理员功能来…

BPF之前端工具BCC与bpftrace

BPF前端工具BCC与bpftrace 一、概述 BCC和bpftrace到底是什么&#xff0c;与BPF是什么关系呢&#xff1f; 经过上一篇的介绍&#xff0c;BPF是内核中的执行引擎&#xff0c;BCC和bpftrace则是两个前端工具&#xff0c;比如用户可以直接使用的命令行工具。 BCC与bpftrace又有…

Stable Diffusion Lora模型训练详细教程

1. 介绍 通过Lora小模型可以控制很多特定场景的内容生成。 但是那些模型是别人训练好的&#xff0c;你肯定很好奇&#xff0c;我也想训练一个自己的专属模型&#xff08;也叫炼丹&#xff5e;_&#xff5e;&#xff09;。 甚至可以训练一个专属家庭版的模型&#xff08;fami…

JDK JRE JVM之间的关系

文章目录 1.从定义的角度解释JDK、JRE、JVM2、详细介绍JDK3、详细介绍JRE4、详细介绍JVM1、JVM内部区域划分 5、如何运行一个java程序&#xff1f; 本篇文章仅仅是个人片面观点&#xff0c;可能有错误或者表述不清的地方 1.从定义的角度解释JDK、JRE、JVM JDK&#xff1a;Java…

ArcGIS面要素最小外接矩形、外接圆的绘制方法

本文介绍在ArcMap软件中&#xff0c;基于一个面图层&#xff0c;绘制其中面要素的最小外接矩形、最小外接圆等的方法。 首先&#xff0c;我们来看一下本文需要实现的需求。现有一个面要素图层&#xff0c;其中包含多个面要素&#xff0c;如下图所示。我们希望绘制这个面要素图层…