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 pandas找出、删除重复的数据实例

    Python pandas找出、删除重复的数据实例

    在面试中很可能遇到给定一个含有重复元素的列表,删除其中重复的元素,下面这篇文章主要给大家介绍了关于Python pandas找出、删除重复数据的相关资料,文中通过实例代码介绍的非常详细,需要的朋友可以参考下
    2022-07-07
  • 利用Python实现Json序列化库的方法步骤

    利用Python实现Json序列化库的方法步骤

    这篇文章主要给大家介绍了关于利用Python实现Json序列化库的方法步骤,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-09-09
  • python列表的构造方法list()

    python列表的构造方法list()

    这篇文章主要介绍了python列表的构造方法list(),python中没有数组这个概念,与之相应的是列表,本篇文章就来说说列表这个语法,下面文章详细内容,需要的小伙伴可以参考一下
    2022-03-03
  • Python headers请求头如何实现快速添加

    Python headers请求头如何实现快速添加

    这篇文章主要介绍了Python headers请求头如何实现快速添加,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-11-11
  • 使用Python写一个创意五子棋游戏源代码

    使用Python写一个创意五子棋游戏源代码

    这篇文章主要给大家介绍了关于使用Python写一个创意五子棋游戏的相关资料,Python作为一种简单易上手的编程语言,能够轻松实现五子棋游戏,需要的朋友可以参考下
    2023-08-08
  • pytorch多GPU并行运算的实现

    pytorch多GPU并行运算的实现

    这篇文章主要介绍了pytorch多GPU并行运算的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-09-09
  • 通过数据库向Django模型添加字段的示例

    通过数据库向Django模型添加字段的示例

    这篇文章主要介绍了通过数据库向Django模型添加字段的示例,Django是人气最高的Python web开发框架,需要的朋友可以参考下
    2015-07-07
  • Python selenium模拟网页点击爬虫交管12123违章数据

    Python selenium模拟网页点击爬虫交管12123违章数据

    本次介绍怎么以模拟点击方式进入交管12123爬取车辆违章数据,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-05-05
  • python实现简单聊天室功能 可以私聊

    python实现简单聊天室功能 可以私聊

    这篇文章主要为大家详细介绍了python实现简单聊天室功能,可以进行私聊,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-07-07
  • 使用Python防止SQL注入攻击的实现示例

    使用Python防止SQL注入攻击的实现示例

    这篇文章主要介绍了使用Python防止SQL注入攻击的实现示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-05-05

最新评论