什么是Pytorch - Pytorch入门笔记

Mr::Z::
4个月前 阅读 24 点赞 0

这是一个基于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


今日份的学习就到这里啦!下班!

| 0
登录后可评论,马上登录吧~
评论 ( 0 )

还没有人评论...

相关推荐