1.pytorch的官网
https://pytorch.org/
2.tutorials
2.1 Deep Learning with PyTorch: A 60 Minute Blitz
2.1.1 what is pytorch
可以使用GPU的numpy替代者
深度学习研究平台
第一个demo,各种操做非常类似numpy
----------------
import torch
x = toruch.empty(5,3)
print(x)
----------------
torch和numpy相互转化
----------------
import torch
import numpy as np
a = torch.ones(5)
b = a.numpy()
c = np.ones(5)
d = tourch.frome_numpy(c)
-----------------
使用GPU
----------------
import torch
x = torch.rand(5,3)
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!
----------------
2.1.2 autograd 自动微分
pytorch神经网络的核心是autograd包。这个包提供tensor上的所有操作的自动微分。autograd是运行时定义的。
torch.Tensor是pytorch的核心类。如果一个Tensor对象的属性requires_grad设置成True,那么,pytorch会跟踪这个对象上的所有运算,当全部计算完成后,调用backwoard()函数,可以自动计算出这个对象上的梯度,记录到这个对象的grad属性。注意detach()和with torch.no_grad()的用法。
Function类。Tensor和Function构造无环图。每个Tensor的grad_fn属性都指向一个创建这个Tensor的Function对象,有些grad_fn指向None,有些grad_fn指向有意义的函数。
调用一个Tensor对象的backward函数,可以得到它的微分结果。如果Tensor是一个标量,backward函数不需要指定参数。如果Tensor不是标量,需要给backward函数指定gradinet参数。
-------------------
import torch
x = torch.ones(2,2, requires_grad=True)
print(x)
y = x+2
print(y)
print(y.grad_fn)
z = y*y*3
print(z)
print(z.grad_fn)
out = z.mean()
print(out)
print(out.grad_fn)
-------------------
注意,out是最终输出结果,out是标量,因此可以求解具体的微分值。对神经网络的训练而言,大多数情况下,神经网络的输出层是向量,把输出层向量和目标值放到损失函数loss function,得到的是结果是标量,根据这个标量做自动微分,然后更新神经网络的参数。
https://pytorch.org/tutorials/beginner/blitz/autograd_tutorial.html,注意这里,对自动微分的解释。
如果x是变量,中间无论经历过多少对x的操作,最后的结果一定是x的某种形式的函数。这个过程走一遍就知道了。
x.grad可以清空,否则就是累加。x.grad.data.zero_()是清空grad。
2.1.3 neual networks 神经网络
使用一个最简单的卷积核,py代码如下
----------------
import torch
import torch.nn as nn
import torch.nn.functional as F
class Net(nn.Module):
def __init__(self):
super(Net, self).__init__()
#输入图像1层,输出图像3层(也就是意味着有3个卷积核),2x2正方形卷积核(也就意味着这3个卷积核都是2x2的)
self.conv1 = nn.Conv2d(1,3,2)
#对x做卷积&#x