农产品网站开发方案,wordpress 自定义内容类型,同城装修网,利用html做博客网站介绍PyTorch张量
介绍PyTorch张量
PyTorch张量是我们在PyTorch中编程神经网络时将使用的数据结构。
在编程神经网络时#xff0c;数据预处理通常是整个过程的第一步#xff0c;数据预处理的一个目标是将原始输入数据转换为张量形式。
torch.Tensor类的实例
PyTorch张量…介绍PyTorch张量
介绍PyTorch张量
PyTorch张量是我们在PyTorch中编程神经网络时将使用的数据结构。
在编程神经网络时数据预处理通常是整个过程的第一步数据预处理的一个目标是将原始输入数据转换为张量形式。
torch.Tensor类的实例
PyTorch张量是torch.Tensor Python类的实例。我们可以使用类构造函数创建一个torch.Tensor对象如下所示 t torch.Tensor()type(t)
torch.Tensor
这创建了一个空张量没有数据的张量但我们很快就会添加数据。
张量属性
首先让我们看看一些张量属性。每个torch.Tensor都有这些属性
torch.dtypetorch.devicetorch.layout
查看我们的张量t我们可以看到以下默认属性值 print(t.dtype)print(t.device)print(t.layout)
torch.float32
cpu
torch.strided
张量具有torch.dtype
dtype在我们的例子中是torch.float32指定了张量中包含的数据类型。张量包含统一相同类型的数值数据类型如下
数据类型dtypeCPU张量GPU张量32位浮点数torch.float32torch.FloatTensortorch.cuda.FloatTensor64位浮点数torch.float64torch.DoubleTensortorch.cuda.DoubleTensor16位浮点数torch.float16torch.HalfTensortorch.cuda.HalfTensor8位整数无符号torch.uint8torch.ByteTensortorch.cuda.ByteTensor8位整数有符号torch.int8torch.CharTensortorch.cuda.CharTensor16位整数有符号torch.int16torch.ShortTensortorch.cuda.ShortTensor32位整数有符号torch.int32torch.IntTensortorch.cuda.IntTensor64位整数有符号torch.int64torch.LongTensortorch.cuda.LongTensor
注意每种类型都有CPU和GPU版本。关于张量数据类型的一点需要注意张量之间的张量操作必须在具有相同数据类型的张量之间进行。然而这个声明只适用于PyTorch版本低于1.3。有关详细信息请参阅下面的_PyTorch张量类型提升_部分。
PyTorch张量类型提升
从PyTorch版本1.3开始算术和比较操作可以执行混合类型操作这些操作提升为共同的dtype。
下面的例子在版本1.2中是不允许的。然而在版本1.3及以上相同的代码返回一个dtypetorch.float32的张量。
torch.tensor([1], dtypetorch.int)
torch.tensor([1], dtypetorch.float32)
有关更多详细信息请参阅完整文档。
torch.result_type 提供函数以确定混合类型操作的结果torch.can_cast 公开类型提升的转换规则torch.promote_types 公开提升逻辑
张量具有torch.device
设备在我们的例子中是cpu指定了张量数据分配的设备CPU或GPU。这决定了给定张量的张量计算将在哪里执行。
PyTorch支持使用多个设备它们使用索引指定 device torch.device(cuda:0)device
device(typecuda, index0)
如果我们有这样的设备我们可以通过将设备传递给张量的构造函数来在设备上创建张量。关于使用多个设备的一点需要注意张量之间的张量操作必须在存在于同一设备上的张量之间进行。
使用多个设备通常是我们在成为更高级用户时会做的事情所以现在不必担心。
张量具有torch.layout
布局在我们的例子中是strided指定了张量如何在内存中存储。要了解更多关于步幅的信息请点击这里。
目前这就是我们需要知道的全部。
从张量属性中提取的信息
作为神经网络程序员我们需要意识到以下几点
张量包含统一类型的数据dtype。张量之间的张量计算取决于dtype和device。
现在让我们看看在PyTorch中使用数据创建张量的常见方法。
使用数据创建张量
这些是在PyTorch中使用数据类似数组创建张量对象torch.Tensor类的实例的主要方法
torch.Tensor(data)torch.tensor(data)torch.as_tensor(data)torch.from_numpy(data)
让我们看看这些选项。它们都接受某种形式的数据并给我们一个torch.Tensor类的实例。有时当有多种方法可以实现相同的结果时事情可能会变得混乱所以让我们来分解一下。
我们将首先使用每个选项创建一个张量看看我们得到了什么。我们将首先创建一些数据。
我们可以使用Python列表或序列但numpy.ndarray将是更常见的选项所以我们将使用一个numpy.ndarray如下所示 data np.array([1,2,3])type(data)
numpy.ndarray
这给我们提供了一个类型为numpy.ndarray的简单数据。
现在让我们使用这些选项1-4创建我们的张量并看看我们得到了什么 o1 torch.Tensor(data)o2 torch.tensor(data)o3 torch.as_tensor(data)o4 torch.from_numpy(data) print(o1)print(o2)print(o3)print(o4)
tensor([1., 2., 3.])
tensor([1, 2, 3], dtypetorch.int32)
tensor([1, 2, 3], dtypetorch.int32)
tensor([1, 2, 3], dtypetorch.int32)
所有选项o1o2o3o4似乎都产生了相同的张量除了第一个。第一个选项o1在数字后面有点表示这些数字是float而接下来的三个选项类型为int32。
// Python代码示例说明我们的意思 type(2.)
float type(2)
int
在下一篇文章中我们将更深入地探讨这种差异以及其他一些重要的差异这些差异隐藏在幕后。
下一篇文章的讨论将使我们能够看到这些选项中哪一个最适合创建张量。目前让我们看看一些无需任何数据即可创建张量的创建选项。
无需数据的创建选项
以下是一些其他可用的创建选项。
我们有torch.eye()函数它返回一个2-D张量对角线上是1其他地方是0。eye()这个名字与单位矩阵的概念有关单位矩阵是一个方阵主对角线上是1其他地方都是0。 print(torch.eye(2))
tensor([[1., 0.],[0., 1.]
])
我们有torch.zeros()函数它创建一个指定形状参数的零张量。 print(torch.zeros([2,2]))
tensor([[0., 0.],[0., 0.]
])
同样我们有torch.ones()函数它创建一个1的张量。 print(torch.ones([2,2]))
tensor([[1., 1.],[1., 1.]
])
我们还有torch.rand()函数它创建一个指定参数形状的张量其值是随机的。 print(torch.rand([2,2]))
tensor([[0.0465, 0.4557],[0.6596, 0.0941]
])
这是不需要数据的可用创建函数的一小部分。查看PyTorch文档以获取完整列表。
我希望现在你对如何使用PyTorch从数据以及不需要数据的内置函数创建张量有了很好的理解。如果我们使用numpy.ndarray这个任务将变得轻而易举所以如果你已经熟悉NumPy那么恭喜你。