广告
返回顶部
首页 > 资讯 > 后端开发 > Python >PyTorch中torch.tensor()和torch.to_tensor()的区别
  • 694
分享到

PyTorch中torch.tensor()和torch.to_tensor()的区别

torch.tensor和torch.Tensor的区别torch.tensor() 2023-01-28 12:01:47 694人浏览 八月长安

Python 官方文档:入门教程 => 点击学习

摘要

目录前言1、torch.as_tensor()2、torch.tensor()总结前言 在跑模型的时候,遇到如下报错 UserWarning: To copy construct f

前言

在跑模型的时候,遇到如下报错

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).

网上查了一下,发现将 torch.tensor() 改写成 torch.as_tensor() 就可以避免报错了。

# 如下写法报错
 feature = torch.tensor(image, dtype=torch.float32)
 
# 改为
feature = torch.as_tensor(image, dtype=torch.float32)

然后就又仔细研究了下 torch.as_tensor()torch.tensor() 的区别,在此记录。

1、torch.as_tensor()

new_data = torch.as_tensor(data, dtype=None,device=None)->Tensor

作用:生成一个新的 tensor, 这个新生成的tensor 会根据原数据的实际情况,来决定是进行浅拷贝,还是深拷贝。当然,会优先浅拷贝,浅拷贝会共享内存,并共享 autograd 历史记录。

情况一:数据类型相同 且 device相同,会进行浅拷贝,共享内存

import numpy
import torch

a = numpy.array([1, 2, 3])
t = torch.as_tensor(a)
t[0] = -1

print(a)   # [-1  2  3]
print(a.dtype)   # int64
print(t)   # tensor([-1,  2,  3])
print(t.dtype)   # torch.int64
import numpy
import torch

a = torch.tensor([1, 2, 3], device=torch.device('cuda'))
t = torch.as_tensor(a)
t[0] = -1

print(a)   # tensor([-1,  2,  3], device='cuda:0')
print(t)   # tensor([-1,  2,  3], device='cuda:0')

情况二: 数据类型相同,但是device不同,深拷贝,不再共享内存

import numpy
import torch

import numpy
a = numpy.array([1, 2, 3])
t = torch.as_tensor(a, device=torch.device('cuda'))
t[0] = -1

print(a)   # [1 2 3]
print(a.dtype)   # int64
print(t)   # tensor([-1,  2,  3], device='cuda:0')
print(t.dtype)   # torch.int64

情况三:device相同,但数据类型不同,深拷贝,不再共享内存

import numpy
import torch

a = numpy.array([1, 2, 3])
t = torch.as_tensor(a, dtype=torch.float32)
t[0] = -1

print(a)   # [1 2 3]
print(a.dtype)   # int64
print(t)   # tensor([-1.,  2.,  3.])
print(t.dtype)   # torch.float32

2、torch.tensor()

torch.tensor() 是深拷贝方式。

torch.tensor(data, dtype=None, device=None, requires_grad=False, pin_memory=False)

深拷贝:会拷贝 数据类型 和 device,不会记录 autograd 历史 (also known as a “leaf tensor” 叶子tensor)

重点是:

  • 如果原数据的数据类型是:list, tuple, NumPy ndarray, Scalar, and other types,不会 waring
  • 如果原数据的数据类型是:tensor,使用 torch.tensor(data) 就会报waring
# 原数据类型是:tensor 会发出警告
import numpy
import torch

a = torch.tensor([1, 2, 3], device=torch.device('cuda'))
t = torch.tensor(a)
t[0] = -1

print(a)
print(t)

# 输出:
# tensor([1, 2, 3], device='cuda:0')
# tensor([-1,  2,  3], device='cuda:0')
# /opt/conda/lib/python3.7/site-packages/ipykernel_launcher.py:5: 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).
# 原数据类型是: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)

结论就是:以后尽量用 torch.as_tensor()

总结

到此这篇关于PyTorch中torch.tensor()和torch.to_tensor()区别的文章就介绍到这了,更多相关torch.tensor()和torch.to_tensor()区别内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: PyTorch中torch.tensor()和torch.to_tensor()的区别

本文链接: https://www.lsjlt.com/news/178482.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • PyTorch中torch.tensor()和torch.to_tensor()的区别
    目录前言1、torch.as_tensor()2、torch.tensor()总结前言 在跑模型的时候,遇到如下报错 UserWarning: To copy construct f...
    99+
    2023-01-28
    torch.tensor和torch.Tensor的区别 torch.tensor()
  • PyTorch中tensor.detach()和tensor.data的区别解析
    目录PyTorch中 tensor.detach() 和 tensor.data 的区别不同点:为什么.data是不安全的?那么.detach()为什么是安全的?补充:pytorch...
    99+
    2023-05-14
    PyTorch tensor.detach() tensor.data PyTorch tensor.detach() tensor.data区别 python detach()函数
  • pytorch中.to(device) 和.cuda()的区别说明
    原理 .to(device) 可以指定CPU 或者GPU device = torch.device("cuda:0" if torch.cuda.is_available() ...
    99+
    2022-11-12
  • PyTorch中Tensor和tensor的区别及说明
    目录Tensor和tensor的区别pytorch Tensor变形函数Tensor的排序与取极值Tensor与NumPy转换Tensor和tensor的区别 本文列举的框架源码基于...
    99+
    2022-11-11
  • PyTorch中tensor.detach()和tensor.data的区别有哪些
    这篇文章主要介绍“PyTorch中tensor.detach()和tensor.data的区别有哪些”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“PyTorch中tensor.detach()和te...
    99+
    2023-07-05
  • PyTorch中Tensor和tensor的区别是什么
    这篇文章主要介绍“PyTorch中Tensor和tensor的区别是什么”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“PyTorch中Tensor和tensor的区别是什么”文章能帮助大家解决问题。...
    99+
    2023-07-02
  • pytorch:.detach()、.detach_()的作用和区别
    文章目录 pytorch的两个函数:.detach()、.detach_()的作用和区别一、torch.detach()二、tensor.detach_() 补充:requires_gr...
    99+
    2023-09-06
    pytorch 深度学习 python
  • pytorch中.to(device) 和.cuda()的区别有哪些
    这篇文章主要介绍了pytorch中.to(device) 和.cuda()的区别有哪些,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。原理.to(device) 可以指定CPU...
    99+
    2023-06-15
  • pytorch中.to(device) 和.cuda()有什么区别
    这篇文章主要介绍了pytorch中.to(device) 和.cuda()有什么区别,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。原理.to(device) 可以指定CPU ...
    99+
    2023-06-15
  • pytorch中Tensor.to(device)和model.to(device)的区别及说明
    目录Tensor.to(device)和model.to(device)的区别区别所在举例pytorch学习笔记--to(device)用法这段代码到底有什么用呢?为什么要在GPU上...
    99+
    2022-11-11
  • pytorch中Tensor.to(device)和model.to(device)的区别是什么
    这篇文章主要介绍了pytorch中Tensor.to(device)和model.to(device)的区别是什么的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇pytorch中Tensor.to(device)...
    99+
    2023-07-02
  • PyTorch中view()与 reshape()的区别详析
    目录前言一、PyTorch中tensor的存储方式1、PyTorch张量存储的底层原理2、PyTorch张量的步长(stride)属性二、对“视图(view)&rdquo...
    99+
    2022-11-13
  • pytorch中的matmul与mm,bmm区别说明
    pytorch中matmul和mm和bmm区别 matmulmmbmm结论 先看下官网上对这三个函数的介绍。 matmul mm bmm 顾名思义, 就是两个batch矩阵乘法....
    99+
    2022-11-12
  • 聊聊Pytorch torch.cat与torch.stack的区别
    torch.cat()函数可以将多个张量拼接成一个张量。torch.cat()有两个参数,第一个是要拼接的张量的列表或是元组;第二个参数是拼接的维度。 torch.cat()的示例如...
    99+
    2022-11-12
  • Pytorch中 torch.cat与torch.stack有什么区别
    今天就跟大家聊聊有关Pytorch中 torch.cat与torch.stack有什么区别,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。torch.cat()函数可以将多个张量拼接成...
    99+
    2023-06-15
  • 显卡驱动CUDA 和 pytorch CUDA 之间的区别
    目录写在前面如何查看CUDA 版本为何三个指令 三种结果?nvidia-sminvcc 和 torch.version.cudaRuntime CUDA写在前面 我的 CUDA 版本...
    99+
    2023-03-19
    显卡驱动CUDA  pytorch CUDA 
  • 显卡驱动CUDA和pytorch CUDA 之间的区别是什么
    今天小编给大家分享一下显卡驱动CUDA和pytorch CUDA 之间的区别是什么的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下...
    99+
    2023-07-05
  • python中=和==的区别
    python中“=”表示的是赋值,是将某一数值赋给某个变量,且无返回值;而“==”表示的是判断两个数据是否相等,其返回值为True或False。实例:a = 33 == 4print(a)输出结果为:3false...
    99+
    2022-10-19
  • Mybatis中#和$的区别
    在使用mybatis框架开发项目编写SQL语句的时候,经常需要用到变量替换值,那么用来替换变量值的操作经常用到$和#这两个符号,同样在一些Java面试中也经常被问到它们的区别。那么它们在使用上面有什么区别呢?下面根据使用情况分析总结,两者的...
    99+
    2023-09-02
    大数据 java mybatis mysql
  • mybatis中的#和$的区别
    #相当于对数据 加上 双引号,$相当于直接显示数据  #将传入的数据都当成一个字符串,会对自动传入的数据加一个双引号。如:order by #user_id#,如果传入的值是111,那么解析成sql时的值为order by "11...
    99+
    2023-06-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作