Pytorch创建张量的四种方法

 更新时间:2023年05月16日 09:04:02   作者:ting_qifengl  
Pytorch创建张量的4种方法主要有:torch.Tensor()、torch.tensor()、torch.as_tensor()、torch.from_numpy(),本文通过实例代码介绍Pytorch创建张量的四种方法,需要的朋友可以参考下

一、Pytorch创建张量的4种方法

Pytorch创建张量的4种方法主要有:torch.Tensor()、torch.tensor()、torch.as_tensor()、torch.from_numpy()。具体使用方法如下方代码。其中torch.Tensor()是类构造函数,其余三种为工厂函数。工厂函数是指接受参数输入并返回特定类型对象的函数,其允许更多的动态对象创建,有更多的配置参数。通常情况下更倾向于选择工厂函数。

import torch
import numpy as np
t = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
print(torch.Tensor(t))  # 类构造函数
print(torch.tensor(t))  # 工厂函数
print(torch.as_tensor(t))  # 工厂函数
print(torch.from_numpy(t))  # 工厂函数

输出结果如下:

tensor([[1., 2., 3.],
        [4., 5., 6.],
        [7., 8., 9.]])
tensor([[1, 2, 3],
        [4, 5, 6],
        [7, 8, 9]], dtype=torch.int32)
tensor([[1, 2, 3],
        [4, 5, 6],
        [7, 8, 9]], dtype=torch.int32)
tensor([[1, 2, 3],
        [4, 5, 6],
        [7, 8, 9]], dtype=torch.int32)

二、4种方法的区别

1、数据类型

import torch
import numpy as np
data = np.array([1,2,3])
t1 = torch.Tensor(data)
print(t1)
print(t1.dtype)
t2 = torch.tensor(data)
print(t2)
print(t2.dtype)
t3 = torch.as_tensor(data)
print(t3)
print(t3.dtype)
t4 = torch.from_numpy(data)
print(t4)
print(t4.dtype)

输出结果如下:

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

可以看出,构造函数torch.Tensor()输出的数据类型与其它三种方法不同,其主要原因是:构造函数在构造一个张量时使用全局缺省值,而工厂函数通过输入数据的类型来推断输出数据的类型。我们可以使用如下代码查看全局缺省值的数据类型。

d = torch.get_default_dtype()
print(d)

输出结果为:

torch.float32

所以,构造函数torch.Tensor()输出的数据类型为torch.float32。而工厂函数可以显示指定数据类型,如下所示。

t = torch.tensor(np.array([1,2,3]), dtype=torch.float64)
print(t)

输出结果为:

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

2、数据内存分配方式

import torch
import numpy as np
data = np.array([1,2,3])
print(data)
t1 = torch.Tensor(data)
t2 = torch.tensor(data)
t3 = torch.as_tensor(data)
t4 = torch.from_numpy(data)
data[0] = 0
data[1] = 0
data[2] = 0
# t1 和 t2 输出的都是更改前的数组
print(t1)
print(t2)
# t3 和 t4 输出的都是更改后的数组
print(t3)
print(t4)

输出结果为:

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

上述差异是由创建时分配内存的方式造成的:torch.Tensor()和torch.tensor()的方式是将数组中的元素值直接拷贝到张量中,改变data中的元素值并不会影响到t1和t2中的值;torch.as_tensor()和torch.from_numpy()的方式是与data数组共享数据。(可将t1和t2的方式看作"值传递";t3和t4的方式看作“地址传递”)。数据共享比数据拷贝更高效,更节省内存空间。

共享数据拷贝数据
torch.as_tensor()torch.tensor()
torch.from_numpy()torch.Tensor()

三、最优的数据转换方法

1、数据拷贝方式的最优选择是 torch.tensor() (因为是工厂函数);

2、内存共享方式的最优选择是 torch.as_tensor() (因为torch.as_tensor可以接受任何python数据结构;而torch.from_numpy只接受numpy数组);

3、数据拷贝的方式更注重实现;而内存共享的方式更注重代码性能,日常使用时不注重性能的话选择torch.tensor()即可。

四、使用内存共享函数的注意事项

1、由于numpy.ndaaray对象分配在CPU上,所以如果使用GPU的话,torch.as_tensor函数必须把数据从CPU上拷到GPU上;

2.、as_tensor()对于python内置的数据结构,如列表,是无效的;

3、as_tensor的调用要求熟悉共享特征,以免对底层数据做不必要的更改,而影响到对象;

4、当as_tensor和numpy.ndarray有大量的相互往返的操作时,对性能的提升会有较大的影响。

到此这篇关于Pytorch创建张量的四种方法的文章就介绍到这了,更多相关Pytorch创建张量内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Python语言实现将图片转化为html页面

    Python语言实现将图片转化为html页面

    这篇文章主要介绍了Python实现将图片转化为html页面,具有一定参考价值,需要的朋友可以了解下。
    2017-12-12
  • Pyqt5 实现跳转界面并关闭当前界面的方法

    Pyqt5 实现跳转界面并关闭当前界面的方法

    今天小编就为大家分享一篇Pyqt5 实现跳转界面并关闭当前界面的方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-06-06
  • 通过Jython调用Python脚本的实现方法

    通过Jython调用Python脚本的实现方法

    Jython 是 Python 的纯 Java 实现。她无缝地结合了 Java 类与 Python,使用户能以 Python 语言的语法编写在 Java 虚拟机上运行的 软件,本文重点给大家介绍通过Jython调用Python脚本的实现方法,一起看看吧
    2021-06-06
  • Python 实现中值滤波、均值滤波的方法

    Python 实现中值滤波、均值滤波的方法

    今天小编就为大家分享一篇Python 实现中值滤波、均值滤波的方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-01-01
  • Python实现对照片中的人脸进行颜值预测

    Python实现对照片中的人脸进行颜值预测

    今天给大家带来的是关于Python实战的相关知识,文章围绕如何用Python实现对照片中的人脸进行颜值预测展开,文中有非常详细的介绍及代码示例,需要的朋友可以参考下
    2021-06-06
  • Tensorflow与Keras自适应使用显存方式

    Tensorflow与Keras自适应使用显存方式

    这篇文章主要介绍了Tensorflow与Keras自适应使用显存方式,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-06-06
  • PyTorch中torch.no_grad()用法举例详解

    PyTorch中torch.no_grad()用法举例详解

    这篇文章主要介绍了PyTorch中torch.no_grad()用法的相关资料,torch.no_grad()是PyTorch的上下文管理器,用于临时禁用自动梯度计算,减少内存消耗并加快计算速度,它适用于模型评估或推理阶段,可以显著提高效率,需要的朋友可以参考下
    2024-09-09
  • python3 mmh3安装及使用方法

    python3 mmh3安装及使用方法

    这篇文章主要介绍了python3 mmh3安装及使用方法,本文给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下
    2019-10-10
  • Python3数据库操作包pymysql的操作方法

    Python3数据库操作包pymysql的操作方法

    这篇文章主要介绍了Python3数据库操作包pymysql的操作方法,文章通过实例代码相结合给大家介绍的非常详细,需要的朋友可以参考下
    2018-07-07
  • python logging模块的分文件存放详析

    python logging模块的分文件存放详析

    这篇文章主要介绍了python logging模块的分文件存放详析,文章围绕主题展开详细的内容介绍,具有一定的参考价值,需要的朋友可以参考一下
    2022-07-07

最新评论