PyTorch学习笔记(一)

PyTorch学习笔记(一)

  • PyTorch学习笔记
    • PyTorch中的数据类型
    • 自动求梯度
  • 未完待续……

来自 https://pytorch.org/tutorials/beginner/deep_learning_60min_blitz.html

PyTorch学习笔记

类似TensorFlow,PyTorch也是一个深度学习的框架,另外它也作为NumPy中的数据在GPU上运算时使用的一种替代品。

其实框架无所谓好坏,对于小白来说不去打基本功,狠狠的学上几年的深度学习的基础理论,反而一上来就使用框架也许不是一件坏事,谁不想马上看到一些成果呢?

其他框架诸如TensorFlow、Keras、scikit-learn等已经资格很老啦,PyTorch最近发展的比较火,于是打算深入了解一下。

PyTorch中的数据类型

类似TensorFlow中,也是使用张量Tensor。这里的empty、ones、zero等都是模仿numpy中的名称。注意python原生的四则运算需要替换成torch.add()这样的运算函数。

result = torch.empty(5, 3)
torch.add(x, y, out=result)
print(result)
  1. a.numpy()可以转换成Numpy数组。
  2. torch.from_numpy()可以转换成Tensor。

如果想把数据放在GPU上运算呢?很简单,一个to()函数就行了。

if torch.cuda.is_available():
    device = torch.device("cuda")          # a CUDA device object
    y = torch.ones_like(x, device=device)  # directly create a tensor on GPU
    x = x.to(device)                       # or just use strings ``.to("cuda")``
    z = x + y
    print(z)
    print(z.to("cpu", torch.double))       # ``.to`` can also change dtype together!

自动求梯度

autograd包是PyTorch的关键,torch.Tensor是基本的数据单元。
Tensor的grad、requires_grad、grad_fn(一个Function对象)等属性都跟梯度有关。(Tensor和Funciton构成一个无环图,上面编码了完整的计算历史)

x = torch.ones(2, 2, requires_grad=True)
y = x + 2
z = y * y * 3
out = z.mean()

可以打印验证y、z的grad_fn属性都是存在的。一个是加,一个是乘,这里的grad_fn指的是产生这个Tensor的函数。

然后:

out.backward()
print(x.grad)

就会打印:

tensor([[4.5000, 4.5000],
[4.5000, 4.5000]])

这里out对x的梯度就能得到了。

未完待续……

你可能感兴趣的:(机器学习)