这是一个基于Python的科学计算软件包,针对两组受众群体:
- 替代NumPy以使用GPU的功能
- 提供最大灵活性和速度的深度学习研究平台
入门
张量
张量类似于NumPy的ndarrays,此外,张量还可以在GPU上使用以加速计算。
from __future__ import print_function
import torch
声明了一个未初始化的矩阵,但在使用前不包含确定的已知值。创建未初始化的矩阵时,当时分配的内存中的任何值都将显示为初始值。
构造一个未初始化的5x3矩阵:
x = torch.empty(5, 3) print(x)
得到:
tensor([[2.2175e-06, 9.3046e-43, 2.2175e-06, 9.3046e-43], [2.2175e-06, 9.3046e-43, 2.2175e-06, 9.3046e-43], [2.2175e-06, 9.3046e-43, 2.2175e-06, 9.3046e-43], [1.0720e-05, 9.3046e-43, 5.7422e-06, 9.3046e-43], [1.0691e-05, 9.3046e-43, 1.0702e-05, 9.3046e-43]])
构造一个随机初始化的矩阵:
x = torch.rand(5, 3) print(x)
得到:
tensor([[0.2217, 0.2328, 0.2461, 0.9303], [0.6475, 0.5343, 0.2883, 0.7229], [0.4985, 0.3712, 0.0861, 0.9239], [0.8324, 0.2922, 0.7670, 0.1293], [0.1383, 0.6214, 0.5711, 0.6211]])
构造一个填充零且类型为long的矩阵:
x = torch.zeros(5, 3, dtype=torch.long) print(x)
得到:
tensor([[0, 0, 0], [0, 0, 0], [0, 0, 0], [0, 0, 0], [0, 0, 0]])
直接用数据构造张量:
x = torch.tensor([5.5, 3]) print(x)
得到:
tensor([5.5000, 3.0000])
也可以基于现有张量创建张量。这些方法将重用输入张量的属性,如dtype,除非我们改变它的值
x = x.new_ones(5, 3, dtype=torch.double) # new_* methods take in sizes
print(x)
x = torch.randn_like(x, dtype=torch.float) # override dtype!
print(x) # result has the same size
得到:
tensor([[1., 1., 1.],
[1., 1., 1.],
[1., 1., 1.],
[1., 1., 1.],
[1., 1., 1.]], dtype=torch.float64)
tensor([[ 0.7439, 1.5300, 1.3811],
[-1.7157, 1.5165, -0.3656],
[-0.3837, -1.0080, 0.6171],
[ 1.5008, 0.7158, 1.2910],
[-0.8027, 1.5907, 0.8117]])
获取大小:
print(x.size())
得到:
torch.Size([5, 3])
注意
torch.Size
实际上是一个元组,因此它支持所有元组操作。
运算方法
运算有多种语法。我们先来看一下加法运算。
加法:语法1
y = torch.rand(5, 3) print(x + y)
得到:
tensor([[ 0.9677, 1.6589, 1.9352], [-1.3216, 1.9978, -0.1499], [ 0.0919, -0.0465, 1.1896], [ 2.1469, 1.4338, 2.0504], [ 0.0121, 2.0782, 0.9128]])
加法:语法2
print(torch.add(x, y))
得到:
tensor([[ 0.9677, 1.6589, 1.9352], [-1.3216, 1.9978, -0.1499], [ 0.0919, -0.0465, 1.1896], [ 2.1469, 1.4338, 2.0504], [ 0.0121, 2.0782, 0.9128]])
加法:提供输出张量作为参数
result = torch.empty(5, 3)
torch.add(x, y, out=result)
print(result)
得到:
tensor([[ 0.9677, 1.6589, 1.9352], [-1.3216, 1.9978, -0.1499], [ 0.0919, -0.0465, 1.1896], [ 2.1469, 1.4338, 2.0504], [ 0.0121, 2.0782, 0.9128]])
加法:直接运算
# adds x to y
y.add_(x)
print(y)
得到:
tensor([[ 0.9677, 1.6589, 1.9352], [-1.3216, 1.9978, -0.1499], [ 0.0919, -0.0465, 1.1896], [ 2.1469, 1.4338, 2.0504], [ 0.0121, 2.0782, 0.9128]])
注意
所有使张量就地发生变化的运算方法后缀都固定用_
。例如:x.copy_(y)
,x.t_()
,将改变x
。
当然也可以华丽丽地用类似NumPy的引用方法!
print(x[:, 1])
就会得到:
tensor([ 1.5300, 1.5165, -1.0080, 0.7158, 1.5907])
调整大小:如果要调整张量的大小/形状,可以使用torch.view
:
x = torch.randn(4, 4)
y = x.view(16)
z = x.view(-1, 8) # the size -1 is inferred from other dimensions
print(x.size(), y.size(), z.size())
得到:
torch.Size([4, 4]) torch.Size([16]) torch.Size([2, 8])
如果你有单元素张量,就可以使用.item()
将该值作为Python数字获取
x = torch.randn(1)
print(x)
print(x.item())
得到:
tensor([0.7378]) 0.7378432154655457
今日份的学习就到这里啦!下班!
更多内容请访问:IT源点
注意:本文归作者所有,未经作者允许,不得转载