本文主要是介绍Pytorch打怪路(一)pytorch进行CIFAR-10分类(4)训练,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
我的系列博文:
Pytorch打怪路(一)pytorch进行CIFAR-10分类(1)CIFAR-10数据加载和处理
Pytorch打怪路(一)pytorch进行CIFAR-10分类(2)定义卷积神经网络
Pytorch打怪路(一)pytorch进行CIFAR-10分类(3)定义损失函数和优化器
Pytorch打怪路(一)pytorch进行CIFAR-10分类(4)训练(本文)
Pytorch打怪路(一)pytorch进行CIFAR-10分类(5)测试
1、简述
2、代码
for epoch in range(2): # loop over the dataset multiple times 指定训练一共要循环几个epochrunning_loss = 0.0 #定义一个变量方便我们对loss进行输出for i, data in enumerate(trainloader, 0): # 这里我们遇到了第一步中出现的trailoader,代码传入数据# enumerate是python的内置函数,既获得索引也获得数据,详见下文# get the inputsinputs, labels = data # data是从enumerate返回的data,包含数据和标签信息,分别赋值给inputs和labels# wrap them in Variableinputs, labels = Variable(inputs), Variable(labels) # 将数据转换成Variable,第二步里面我们已经引入这个模块# 所以这段程序里面就直接使用了,下文会分析# zero the parameter gradientsoptimizer.zero_grad() # 要把梯度重新归零,因为反向传播过程中梯度会累加上一次循环的梯度# forward + backward + optimize outputs = net(inputs) # 把数据输进网络net,这个net()在第二步的代码最后一行我们已经定义了loss = criterion(outputs, labels) # 计算损失值,criterion我们在第三步里面定义了loss.backward() # loss进行反向传播,下文详解optimizer.step() # 当执行反向传播之后,把优化器的参数进行更新,以便进行下一轮# print statistics # 这几行代码不是必须的,为了打印出loss方便我们看而已,不影响训练过程running_loss += loss.data[0] # 从下面一行代码可以看出它是每循环0-1999共两千次才打印一次if i % 2000 == 1999: # print every 2000 mini-batches 所以每个2000次之类先用running_loss进行累加print('[%d, %5d] loss: %.3f' %(epoch + 1, i + 1, running_loss / 2000)) # 然后再除以2000,就得到这两千次的平均损失值running_loss = 0.0 # 这一个2000次结束后,就把running_loss归零,下一个2000次继续使用print('Finished Training')
3、分析
这篇关于Pytorch打怪路(一)pytorch进行CIFAR-10分类(4)训练的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!