神经网络训练过程:
1.定义一个包含可训练参数的神经网络
2.对数据集迭代输入
3.通过神经网络处理输入数据
4.计算loss函数
5.反向传播梯度到神经网络的参数
6.更新网络的参数(w=w-lr*g)
编写整体框架
1.定义Net
2.数据集导入
transform
dataload
dataset
见–
4.损失函数
5.梯度清零,启用反向传播
net.zero_grad()
loss.backward()
6.参数更新
#python
learning_rate = 0.01
for f in net.parameters():
f.data.sub_(f.grad.data * learning_rate)
[4/5/6]torch.optim可直接对参数进行优化
import torch.optim as optim
#1.create your optimizer
optimizer = optim.SGD(net.parameters(), lr=0.01)
#2.in your training loop:
optimizer.zero_grad() #zero the gradient buffers
output = net(input)
loss = criterion(output, target)
loss.backward
optimizer.step() #does the update
GPU训练
PyTorch 默认只会使用一个 GPU
device = torch.device("cuda:0" if torch.cuda.is_available() else "cpu")
用 DataParallel 来使用多 GPU,数据并行自动拆分了你的数据并且将任务单发送到多个 GPU 上。当每一个模型都完成自己的任务之后,DataParallel 收集并且合并这些结果,然后再返回给你。