torch.as_tensor()、torch.Tensor() 、 torch.tensor() 、transforms.ToTensor()的区别

news2024/12/22 16:51:10

1)torch.as_tensor(data, dtype=None,device=None)->Tensor : 为data生成tensor,保留 autograd 历史记录并尽量避免复制(dtype和devices相同,尽量浅拷贝)

如果data已经是tensor,且dtype和device与参数相同,则生成的tensor会和data共享内存(浅拷贝)。如果data是ndarray,且dtype对应,devices为cpu,则同样共享内存。其他情况则不共享内存。

#1)数据类型和device相同,浅拷贝,共享内存
import numpy
a = numpy.array([1, 2, 3])
t = torch.as_tensor(a)
t[0] = -1
a,t

#Out[77]: (array([-1,  2,  3]), tensor([-1,  2,  3], dtype=torch.int32))

#2)数据类型相同,但是device不同,深拷贝,不再共享内存
import numpy
a = numpy.array([1, 2, 3])
t = torch.as_tensor(a, device=torch.device('cuda'))
t[0] = -1
a,t

#Out[78]: (array([1, 2, 3]), tensor([-1,  2,  3], device='cuda:0', dtype=torch.int32))

#3)device相同,但数据类型不同,深拷贝,不再共享内存
import numpy
a = numpy.array([1, 2, 3])
t = torch.as_tensor(a, dtype=torch.float32)
t[0] = -1
a,t

Out[80]: (array([1, 2, 3]), tensor([-1.,  2.,  3.]))

2) torch.tensor() 是一个通过深拷贝数据,构造一个新张量的函数

torch.tensor(data*dtype=Nonedevice=Nonerequires_grad=Falsepin_memory=False) →Tensor

深拷贝数据数据类型和device,with no autograd history (also known as a “leaf tensor”)。

重点是data的数据类型can be a list, tuple, NumPy ndarray, scalar, and other types,就没waring。
但data是tensor类型,使用torch.tensor(data)就会报waring:<ipython-input-107-2a217d68e4f8>:7: UserWarning: To copy construct from a tensor, it is recommended to use sourceTensor.clone().detach() or sourceTensor.clone().detach().requires_grad_(True), rather than torch.tensor(sourceTensor).

#没警告:data can be a list, tuple, NumPy ndarray, scalar, and other types

#没警告:data can be a list, tuple, NumPy ndarray, scalar, and other types
import torch
import numpy
a =  numpy.array([1, 2, 3])
t = torch.tensor(a) 
b = [1,2,3]
t= torch.tensor(b)
c = (1,2,3)
t= torch.tensor(c)

#data是tensor类型,有警告 

#data是tensor类型,有警告
import torch
import numpy

d = torch.tensor([[1,2,3],[1,2,3]])
t= torch.tensor(d) #能深拷贝,但会报warning,建议用t = a.clone().detach()
# detach是内存共享的,而clone()是不内存共享的。
print(d.shape,d.dtype,t.shape,t.dtype)
# torch.Size([2, 3]) torch.int64 torch.Size([2, 3]) torch.int64

 

 3)torch.Tensor() 是默认张量类型 (torch.FloatTensor()) 的别名。也就是说,torch.Tensor() 的作用实际上跟 torch.FloatTensor() 一样,都是生成一个数据类型为 32 位浮点数的张量,如果没传入数据就返回空张量,如果有列表或者 narray 的返回其对应张量。但无论传入数据本身的数据类型是什么,返回的都是 32 位浮点数的张量。

>>> torch.Tensor()
tensor([])
>>> torch.Tensor().dtype
torch.float32
>>> torch.FloatTensor()
tensor([])
>>> torch.FloatTensor().dtype
torch.float32

4)transforms.ToTensor()

ToTensor()将shape为(H, W, C)的nump.ndarray或img转为shape为(C, H, W)的tensor,其将每一个数值归一化到[0,1],其归一化方法比较简单。

# 归一化到(0,1)之后,再数据标准化处理 (x-mean)/std,归一化到(-1,1),数据中存在大于mean和小于mean
transform2 = transforms.Compose([
    transforms.ToTensor(), 
    transforms.Normalize(std=(0.5,0.5,0.5),
                         mean=(0.5,0.5,0.5))])

在transforms.Compose([transforms.ToTensor()])中加入transforms.Normalize(),如上面代码所示:则其作用就是先将输入归一化到(0,1),再使用公式"(x-mean)/std",将每个元素分布到(-1,1)。

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

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

相关文章

基于复杂环境下的雷达目标检测技术(Matlab代码实现)

&#x1f352;&#x1f352;&#x1f352;欢迎关注&#x1f308;&#x1f308;&#x1f308; &#x1f4dd;个人主页&#xff1a;我爱Matlab &#x1f44d;点赞➕评论➕收藏 养成习惯&#xff08;一键三连&#xff09;&#x1f33b;&#x1f33b;&#x1f33b; &#x1f34c;希…

轻量级模型设计与部署总结

前言一些关键字定义及理解 计算量 FLOPs内存访问代价 MACGPU 内存带宽Latency and Throughput英伟达 GPU 架构 CNN 架构的理解手动设计高效 CNN 架构建议 一些结论&#xff1a; 一些建议轻量级网络模型部署总结轻量级网络论文解析文章 参考资料 文章同步发于 github 仓库 和 知…

论文阅读11——《Mutual Boost Network for Attributed Graph Clustering》

原文地址&#xff1a; 论文阅读11——《Mutual Boost Network for Attributed Graph Clustering》 作者&#xff1a;Xiaoqiang Yan, Xiangyu Yu, Shizhe Hu, Yangdong Ye 发表时间&#xff1a;预印本 论文地址&#xff1a;https://papers.ssrn.com/sol3/papers.cfm?abstract_i…

Camtasia Studio2023喀秋莎免费实用的屏幕录像工具

CamtasiaStudio2023是一款非常不错的软件。总的来说CamtasiaStudio的功能从专业度来说&#xff0c;分别有&#xff1a;录制桌面&#xff0c;录制视频教程&#xff0c;录制音频&#xff1b;剪截视频&#xff0c;拼接合成视频&#xff0c;制作小视频Camtasia Studio是TechSmith的…

web网页设计期末课程大作业:环境保护主题网站设计——农业三级带表单带js(14页)HTML+CSS+JavaScript

&#x1f380; 精彩专栏推荐&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb; ✍️ 作者简介: 一个热爱把逻辑思维转变为代码的技术博主 &#x1f482; 作者主页: 【主页——&#x1f680;获取更多优质源码】 &#x1f393; web前端期末大作业…

自顶向下计算机网络学习 传输层

自顶向下计算机网络学习 传输层一、概述和传输层服务1.1 传输层提供的服务1.2传输层和网络层的关系1.3 传输层协议可靠的、保序的传输&#xff1a;TCP不可靠、不保序的传输&#xff1a;UDP二、多路复用与解复用2.1 什么是复用与解复用2.2 面向连接(TCP)的多路复用与分解2.3 无连…

Verilog 实现无毛刺时钟切换电路,RTL代码设计+testbench代码测试,波形前仿真

Verilog 实现无毛刺时钟切换电路 1,原理2,无毛刺时钟切换3,RTL代码设计4,testbench测试代码5,RTL+testbench综合的 Netlist6,前仿真波形验证参考文献1 1,原理 想要切换时钟电路,最简单的方法肯定是使用一个MUX,control作为控制信号; control = 1, clk_output = clk_…

JVM 双亲委派模型

一言以蔽之&#xff0c;向上委托&#xff0c;向下委派。 向上委托&#xff1a;如果一个类加载器收到了类加载请求&#xff0c;它并不会自己先去加载&#xff0c;而是把这个请求委托给父类的加载器去执行&#xff0c;如果父类加载器还存在其父类加载器&#xff0c;则进一步向上…

家居建材如何在线管理订单?数商云采购系统实现订单发收货、退换货流程化管控

新时代的流程化业务&#xff0c;利用信息互通的时效性&#xff0c;提高员工执行力&#xff0c;提升市场竞争力&#xff0c;在悄无声息地促进企业发展。订单管理作为企业客户关系管理的有效延伸&#xff0c;能更好的把个性化、差异化服务有机的融入到客户管理中去&#xff0c;能…

220kV降压变电所电气部分初步设计33号

目录 1 绪论 5 &#xff11;.&#xff11; 概述 5 &#xff11;.&#xff12; 本次设计内容 5 &#xff11;.&#xff13; 本次设计任务 5 2 变电站总体分析 6 2.&#xff11;变电所总体分析 6 2.2主变压器选择 7 3 电气主接线选择 10 3.1 电气主接线的概念 10 3.2 电气主接…

Linux —— 进程控制

1.进程控制的四个概念 进程控制分为四类&#xff0c;分别是&#xff1a; 进程创建进程终止进程等待进程替换 2.进程创建 2.1初识fork fork的作用是通过拷贝当前进程创建一个子进程&#xff0c;这两个进程的区别在于PID不同(还有一些资源、统计量也不同&#xff0c;但PID是我…

E. Split Into Two Sets(染色法判断二分图)

Problem - 1702E - Codeforces 波利卡普最近得到了一组n&#xff08;数字n-偶数&#xff09;的骨牌。每块多米诺骨牌包含1到n的两个整数。 他能把所有的骨牌分成两组&#xff0c;使每组骨牌上的数字都不一样吗&#xff1f;每张多米诺骨牌必须正好进入两组中的一组。 例如&…

7种主流数据分析软件比较及经典教材推荐

前言 STATA 软件优点&#xff1a;Stata以其简单易懂和功能强大受到初学者和高级用户的普遍欢迎。使用时可以每次只输入一个命令&#xff0c;也可以通过一个Stata程序一次输入多个命令。这样的话即使发生错误&#xff0c;也较容易找出并加以修改。尽管Stata的数据管理能力没有…

智慧点餐系统源码 扫码点餐小程序源码

&#x1f353;&#x1f353;文末获取联系&#x1f353;&#x1f353; JAVAUniappMySQLWinForm 系统功能介绍 1、单/多门店自由切换&#xff1b; 2、扫码&#xff08;桌号&#xff09;点餐&#xff1b; 3、多规格商品&#xff1b; 4、手动/自动接单&#xff1b; 5、自助&am…

MyBatis-Plus标准数据层开发

1. 标准CRUD使用 对于标准的CRUD功能都有哪些以及MP都提供了哪些方法可以使用呢&#xff1f; 我们先来看张表&#xff1a; 功能自定义接口MP接口新增boolean save(T t)int insert(T t)删除boolean delete(int id)int deleteById(Serializeble id)修改boolean update(T t)int…

系统分析与设计 复习

文章目录系统分析与设计 复习第 1 章 系统分析与设计概述系统特性DevOps第 2 章 系统规划**系统规划步骤**规划模型诺兰模型**CMM 模型**系统规划方法战略集合转换法 SST关键成功因素法 CSF企业资源规划法 BSPCSB 三者联系和区别第 3 章系统分析系统分析概述业务流程图系统流程…

【微电网优化】萤火虫算法求解微电网优化问题【含Matlab源码 2146期】

⛄一、萤火虫算法求解微电网经济优化问题简介 利用迭代搜索法、剔除劣势策略法、逆推归纳法和最大最小优化方法[7,8,9]等均可实现博弈均衡点的求解。但当维数较大时, 这些方法可能存在搜索速度、路径和精度上的问题。萤火虫优化算法[10]由于其原理简单、参数少、易于实现、具有…

Maven中依赖无法导入的终极解决方案

maven依赖无法引入的问题解决 修改maven配置 添加阿里云的设置 阿里云云效maven官方配置指南 创建自己的maven库 jdk的导入设置 阿里云仓库官网 仓库服务 (aliyun.com) jar包下载所在位置 在命令终端进行jar包的引入 mvn install:install-file -Dfilejar包所在路径…

【SQLite】二、SQLite 和 HeidiSQL 的安装

作者主页&#xff1a;Designer 小郑 作者简介&#xff1a;浙江某公司软件工程师&#xff0c;负责开发管理公司OA、CRM业务系统&#xff0c;全栈领域优质创作者&#xff0c;CSDN学院、蓝桥云课认证讲师&#xff0c;开发过20余个前后端分离实战项目&#xff0c;主要发展方向为Vue…

生物素标记试剂:(1458576-00-5,1802908-00-4)Biotin-PEG4-alkyne,Dde-生物素-四聚乙二醇-炔

一、Biotin-PEG4-alkyne 【中文名称】生物素-四聚乙二醇-炔&#xff0c;生物素-四聚乙二醇-丙炔基 【英文名称】 Biotin-PEG4-alkyne 【CAS】1458576-00-5 【分子式】C21H35N3O6S 【分子量】457.58 【纯度】95% 【外观】 淡黄色或白色固体 &#xff08;具体由其分子量大小决定…