Pytorch详细教程——9.Creating PyTorch Tensors

9. Creating PyTorch Tensors - Best Options

一个张量的抽象概念和一个Pytorch张量的区别在于,Pytorch张量给了我们一个具体的实现,我们可以使用和编码它。

上节课我们说的创建张量的四种方法
大写T是一种类构造函数,小写的t是工厂函数,我们可以将工厂函数看作是接受参数输入并且返回特定类型对象的函数,在这个例子中是张量对象。事实上,三四个也是工厂函数。在这里插入图片描述
所以我们可以说除了第一个是构造函数,剩下的三个都是工厂函数,所有的工厂函数都有更好的文档,并且有更多的配置参数。所以我们选择的时候倾向于工厂函数而不是构造函数,。

我们可以看到输出的差异存在于数据类型中,之所以出现这种差异,是因为构造函数在构造一个张量的时候使用全局缺省值,而工厂函数则根据输入推断数据类型

在这里插入图片描述
缺省值是float32的形式
在这里插入图片描述
在这里插入图片描述
另一个方面,工厂函数是根据传入的数据选择一个dtype,这就是所谓的类型推断,dtype是根据传入的数据推断出来的 、

下面这个例子,第一个我们有整数的输入,就是一个整数的输出。
第二个是浮点的进入,浮点数的输出,这个说明了类型推断是如何工作的。

在这里插入图片描述

也可以显示的设置数据类型,而构造函数则没有这个功能,这是一个缺少配置选项的构造函数的例子
它涵盖了我们能够检查数出来直观的检测到这些差异
在这里插入图片描述

下面还有个更加深入的差异

我们将重新初始化我们的数据和张量,当我们创建我们的张量的时候,我们会修改numpy数组并且用它作为输入在这里插入图片描述
我们已经修改了数组中的值,并且把他们设为0,这里关键点是我们没有修改我们的张量

但是我们可以根据结果看到前两个张量没有变化,然而第二组也就是后两个出现了变化,这种差异是由于在创建选项分配内存的方式造成的,前两个选项在内存中创建一个额外的输入数据副本,第二种也就是后两个方法是用数字数组在内存中共享数据
在这里插入图片描述
在这里插入图片描述
因此隐藏在后面的不同之处就是在于对于性能的共享,这是使Pytorch和numpy互操作的特性之一,在这里插入图片描述
当我们说pytorch和numpy数组共享内存的时候,我们只是说内存中的实际数据存在于一个地方,因此在底层数据发生的任何变化都反应在这两个对象中,共享数据比复制数据更加有效,使用更小的内存,因为数据没有写到内存中的两个位置,而是只有一个位置。

所以说我们最常用的就是torch.tensor()

如果我们要对性能进行调优,我们还需要使用第二种方法,这将是内存共享的torch.as_tensor(),为什么这个比from_numpy好呢?原因就是这个可以接受任何像Python数据结构这样的数组,虽然from_numpy调用只接受numpy数组,但是其中任何一个都可以正常工作。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值