pytorch张量的创建

张量的创建

  • 张量(Tensors)类似于NumPy的ndarrays ,但张量可以在GPU上进行计算。从本质上来说,PyTorch是一个处理张量的库。一个张量是一个数字、向量、矩阵或任何n维数组。

 

import torch
import numpy
torch.manual_seed(7) # 固定随机数种子

直接创建 

  1. torch.tensor(data, dtype=None, device=None, requires_grad=False, pin_memory=False)
  2. 功能:从data创建tensor
    • data: 数据,可以是list,numpy
    • dtype: 数据类型,默认与data的一致
    • device: 所在设备,cuda/cpu
    • requires_grad: 是否需要梯度
    • pin_memory: 是否存于锁页内存
torch.tensor([[0.1, 1.2], [2.2, 3.1], [4.9, 5.2]])tensor([[0.1000, 1.2000],
,        [2.2000, 3.1000],
,        [4.9000, 5.2000]])
  1. torch.from_numpy(ndarray)
  2. 功能:从numpy创建tensor

从torch.from_numpy创建的tensor于原ndarray共享内存,当修改其中一个数据,另一个也将会被改动。

a = numpy.array([1, 2, 3])
t = torch.from_numpy(a)

 依据数值创建¶

  1. torch.zeros(*size, out=None, dtype=None, layout=torch.strided, device=None, requires_grad=False)
  2. 功能:依size创建全0张量
    • size: 张量的形状
    • out: 输出的张量
    • layout: 内存中布局形式
    • device: 所在设备
    • requires_grad: 是否需要梯度
torch.zeros(2, 3)tensor([[0., 0., 0.],
,        [0., 0., 0.]])
  1. torch.zeros_like(input, dtype=None, layout=None, device=None, requires_grad=False)
  2. 功能:依input形状创建全0张量
    • input: 创建与input同形状的全0张量
    • dtype: 数据类型
    • layout: 内存中布局形式
input = torch.empty(2, 3)
torch.zeros_like(input)tensor([[0., 0., 0.],
,        [0., 0., 0.]])
torch.ones(2, 3)tensor([[1., 1., 1.],
,        [1., 1., 1.]])
  1. torch.ones_like(input, dtype=None, layout=None, device=None, requires_grad=False)
  2. 功能:依input形状创建全1张量
    • size: 张量的形状
    • dtype: 数据类型
    • layout: 内存中布局形式
    • device: 所在设备
    • requires_grad: 是否需要梯度
input = torch.empty(2, 3)
torch.ones_like(input)tensor([[1., 1., 1.],
,        [1., 1., 1.]])

 

  1. torch.full_like(input, dtype=None, layout=torch.strided, device=None, requires_grad=False)
  2. 功能: 依input形状创建指定数据的张量
    • size: 张量的形状
    • fill_value: 张量的值
  3. torch.arange(start=0, end. step=1, out=None, dtype=None, layout=torch.strided, device=None, requires_grad=False)
  4. 功能:创建等差的1维张量
    • start: 数列起始值
    • end: 数列结束值
    • step: 数列公差,默认为1
torch.arange(1, 2.5, 0.5)tensor([1.0000, 1.5000, 2.0000])

 

 依概率分布创建张量

torch.normal(mean, std, out=None) : 生成正态分布

# mean为张量, std为张量
torch.normal(mean=torch.arange(1., 11.), std=torch.arange(1, 0, -0.1))tensor([0.8532, 2.7075, 3.7575, 3.2200, 6.0145, 5.5526, 6.8577, 8.3697, 9.0276,
,        9.8318])

 

torch.randn(*size, out=None, dtype=None, layout=torch.strided, device=None, requires_grad=False) : 生成标准正态分布

 

torch.randn(2, 3)tensor([[1.3955, 1.3470, 2.4382],
,        [0.2028, 2.4505, 2.0256]])

 

torch.rand(*size, out=None, dtype=None, layout=torch.strided, device=None, requires_grad=False) : 在[0,1)上,生成均匀分布

torch.rand(2, 3)tensor([[0.7405, 0.2529, 0.2332],
,        [0.9314, 0.9575, 0.5575]])

 张量拼接与切分

torch.cat(tensors, dim=0, out=None) : 将张量按维度进行拼接

 

x = torch.randn(2, 3)
torch.cat((x, x, x), 1)# 
tensor([[-1.7038,  0.6248,  0.1196, -1.7038,  0.6248,  0.1196, -1.7038,  0.6248,
,          0.1196],
,        [-0.8049,  1.6162,  0.2516, -0.8049,  1.6162,  0.2516, -0.8049,  1.6162,
,          0.2516]])

 

torch.stack(tensors, dim=0, out=None) : 在新创建的维度上进行拼接

torch.chunk(input, chunks, dim=0)  : 将张量按维度进行平均切分

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

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

相关文章

Arduino平台软硬件原理及使用——PWM脉宽调制信号的原理及使用

文章目录: 一、先看百度百科给出的定义及原理 二、一图看懂PWM脉宽调制原理 三、Arduino中PWM脉宽调制信号的使用 一、先看百度百科给出的定义及原理 脉冲宽度调制是一种模拟控制方式,根据相应载荷的变化来调制晶体管基极或MOS管栅极的偏置,…

(2023|CVPR,Corgi,偏移扩散,参数高斯分布,弥合差距)用于文本到图像生成的偏移扩散

Shifted Diffusion for Text-to-image Generation 公众:EDPJ(添加 VX:CV_EDPJ 或直接进 Q 交流群:922230617 获取资料) 目录 0. 摘要 1. 简介 2. 方法 2.1 偏移扩散 3. 实验 3.1 无监督文本到图像生成 3.2 无…

从0到1部署gitlab自动打包部署项目

本文重点在于配置ci/cd打包 使用的是docker desktop 第一步安装docker desktop Docker简介 Docker 就像一个盒子,里面可以装很多物件,如果需要某些物件,可以直接将该盒子拿走,而不需要从该盒子中一件一件的取。Docker中文社区、…

科研学习|论文解读——面向电商内容安全风险管控的协同过滤推荐算法研究

【论文完整内容详见知网链接】: 面向电商内容安全风险管控的协同过滤推荐算法研究 - 中国知网 (cnki.net) 面向电商内容安全风险管控的协同过滤推荐算法研究* 摘 要:[目的/意义]随着电商平台商家入驻要求降低以及商品上线审核流程简化,内容安…

CSS新手入门笔记整理:CSS3弹性盒模型

特点 子元素宽度之和小于父元素宽度,所有子元素最终的宽度就是原来定义的宽度。子元素宽度之和大于父元素宽度,子元素会按比例来划分宽度。在使用弹性盒子模型之前,必须为父元素定义“display:flex;”或“display:inline-flex;”。 弹性盒子…

力扣题目学习笔记(OC + Swift)21. 合并两个有序链表

21. 合并两个有序链表 将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。 链表解题经典三把斧: 哑巴节点栈快慢指针 此题比较容易想到的解法是迭代法,生成哑巴节点,然后迭代生成后续节点。…

【C++】string

文章目录 1. 标准库中的string类1.1 string类 2 string类的常用接口说明2.1 string类对象的常见构造2.2 string类对象的容量操作2.3. string类对象的访问及遍历操作2.4 string类对象的修改操作2.5 string类非成员函数2.6 vs和g下string结构的说明 1. 标准库中的string类 1.1 s…

Redis缓存穿透、缓存击穿、缓存雪崩介绍

一、Redis的缓存穿透 1.什么是缓存穿透? 缓存穿透是指:客户端请求的数据在缓存中和数据库中都不存在,这时缓存就永远不会生效,这些请求都打到数据库从而导致数据库压力过大。 2.出现缓存穿透的解决方案,以下是常用的两…

Matlab仿真2ASK/OOK、2FSK、2PSK、QPSK、4QAM在加性高斯白噪声信道中的误码率与归一化信噪比的关系

本文为学习所用,严禁转载。 本文参考链接 https://zhuanlan.zhihu.com/p/667382398 QPSK代码及高斯白噪声如何产生 https://ww2.mathworks.cn/help/signal/ref/butter.html 滤波器 https://www.python100.com/html/4LEF79KQK398.html 低通滤波器 本实验使用matlab仿…

Node.js(二)-模块化

1. 模块化的基本概念 1.1 什么是模块化 模块化是指解决一个复杂问题时,自顶向下逐层将系统拆分成若干模块的过程。对于整个系统来说,模块是可组合、分解和更换的单元。 1.2 编程领域中的模块化 编程领域中的模块化,就是遵守固定的规则&…

解决log4j多个日志都写到一个文件

之前客户端程序由于Websockt包依赖的log4j,就用log4j写日志了,Web用的log4j2没毛病。用log4j的多个logger的日志都写到一个文件里了,查了很多资料都没解决。今天闲了解决一下。 最后好使的配置 # 设置日志根 log4j.rootLogger INFO,Except…

谷歌Gemini造假始末

💡大家好,我是可夫小子,《小白玩转ChatGPT》专栏作者,关注AIGC、读书和自媒体。 在过去一年中,OpenAI ChatGPT引发了一股AI新浪潮,而谷歌则一直处于被压制的状态,迫切需要一款现象级的AI产品来…

Mysql(2)

目录 一.外键约束属性 创建主键表: ​编辑 创建外键表: 插入数据,先插入主表在插入外表: 删数数据记录时,要先从表再主表: 删除外键属性: 二.数据库的用户权限管理 看数据库中的用户&a…

Flutter详解及案例代码

概念 Flutter是由Google开发的开源UI框架,旨在快速构建高质量的移动应用程序。与传统的移动应用开发方式不同,Flutter使用单一代码库构建应用程序,可以同时在iOS和Android上运行。 Flutter的核心是使用Dart语言编写的,并且具有自…

C语言操作符if语句好习惯 详解分析操作符(详解4)

各位少年: 前言 还记得我们上一章讲过一个比较抽象的代码,它要比较两次都是真的情况下才能打印,那么很显然这样写代码是有弊端的?哪我们C语言之父丹尼斯.里奇,先介绍一下上次拉掉了if语句的好习惯 好再分享一些操作符…

大数据Doris(三十九):Duplicate 模型中的 ROLLUP

文章目录 Duplicate 模型中的 ROLLUP 一、前缀索引

SPFA算法总结

知识概览 SPFA算法是Bellman_Ford算法的优化。时间复杂度一般是O(m),最坏时间复杂度是O(nm)(遇到网格图、菊花图),其中n是点数,m是边数。SPFA算法其实是单源最短路限制最小的算法,只要图中没有负环&#xf…

C++ Qt开发:Charts绘制各类图表详解

Qt 是一个跨平台C图形界面开发库,利用Qt可以快速开发跨平台窗体应用程序,在Qt中我们可以通过拖拽的方式将不同组件放到指定的位置,实现图形化开发极大的方便了开发效率,本章将重点介绍TreeWidget与QCharts的常用方法及灵活运用。 …

Java之Synchronized与锁升级

Synchronized与锁升级 一、概述 在多线程并发编程中 synchronized 一直是元老级角色,很多人都会称呼它为重量级锁。但是,随着 Java SE 1.6 对 synchronized 进行了各种优化之后,有些情况下它就并不那么重了。 本文详细介绍 Java SE 1.6 中为…

《运维人员的未来:IT界的“万金油“如何继续闪耀光芒》

文章目录 每日一句正能量前言35岁被称为运维半衰期,究竟为何?如何顺利过渡半衰期运维的职业发展路径后记 每日一句正能量 凡事顺其自然,遇事处于泰然,得意之时淡然,失意之时坦然,艰辛曲折必然,历…