https://pytorch.org/tutorials/beginner/deep_learning_60min_blitz.html
1. Pytorch的基本单元,tensor,本质上和numpy的操作类似;不同的主要在与可以自动计算微分和梯度(Autograd);
2. 每个tensor的requires_grad设置为True时,就能够自动计算梯度;操作时,只能修改枝叶变量的requires_grad;
3. Pytorch中建立神经网络的基本步骤:
1) 在Net(nn.Module)类的__init__中定义网络的基本结构(几层conv,几层fc全连接层),输入数据格式;
2) 在forward中定义每层结构的池化和激发函数
3) 定义Loss Function(criterion = nn.CrossEntropyLoss)和优化方法(optim.SGD)
3) 如果要使用GPU进行计算,需要将net,以及输入数据通过.to(device)的方式送给GPU
device = torch.device("cuda:0" if torch.cuda.is_available() else "cpu")
4. Pytorch的神经网络训练步骤:
在每个epoch中
1) 循环获得一个batch的训练数据
2) optimizer.zero_grad()将梯度缓存置零
3) 使用forward,获得网络结果 output = net(input)
4) 计算结果与目标的差别 loss = criterion(output, label)
5) 反向传播梯度 loss.backward()
6) 优化并更新 optimizer.step()