标签:24 loss 32 self torch import 优化
一、官方文档
torch.optimizer
-
优化器的定义
-
之后调用优化器的step方法
作用:就是利用得到的梯度对参数进行更新
- 相关优化器的算法
共同点:模型参数,学习速率,优化器自身的参数
二、案例
1. 代码
-
学习速率的设置:太大-模型不稳定,太小-速率太慢,一般由大到小设置
-
多个epoch进行参数更新,查看每轮loss和
点击查看代码
import torch
import torchvision
from torch import nn
from torch.nn import Conv2d,MaxPool2d,Flatten,Linear,Sequential
from torch.utils.tensorboard import SummaryWriter
# 测试集
from torch.utils.data import DataLoader
test_data=torchvision.datasets.CIFAR10(root="./CIFAR10_dataset",transform=torchvision.transforms.ToTensor(),train=False,download=True)
test_loader=DataLoader(dataset=test_data,batch_size=1)
# 定义网络结构
class Tudui(nn.Module):
def __init__(self):
super(Tudui, self).__init__()
# self.conv1=Conv2d(3,32,5,padding=2) #可以每一层都用这种方式定义,下面再用这种方式调用
self.model1=Sequential( #使用sequential
Conv2d(3,32,5,padding=2), #in_channel 3;out_channel 32;kernel 5;padding需要计算(一般不会太大)
MaxPool2d(2), #kennel_Size=2
Conv2d(32,32,5,padding=2),
MaxPool2d(2),
Conv2d(32,64,5,padding=2),
MaxPool2d(2),
Flatten(), #展平 :可以把后面的删掉 获得输出的大小
Linear(1024,64),#看上一层的大小 ,可以看到是1024
Linear(64,10) #输入大小 64 输出大小 10
)
def forward(self,x):
x=self.model1(x)
return x
# 声明网络
tudui=Tudui()
#定义loss
loss=nn.CrossEntropyLoss()
#设置优化器
optim=torch.optim.SGD(tudui.parameters(),lr=0.01)
#进行多轮学习
for epoch in range(20):
running_loss=0.0
for data in test_loader:
imgs,targets=data
outputs=tudui(imgs)
result_loss=loss(outputs,targets)
# 清0
optim.zero_grad()
# 计算梯度 反向传播:注意反向传播的对象 下一步就是利用优化器来优化
result_loss.backward()
#利用grad更新参数
optim.step()
running_loss=running_loss+result_loss #每一轮所有误差的结果
##损失的结果
print(running_loss)
2.debug
获得loss,进行反向传播,并进行参数更新的过程
3. 结果
- 一开始下降,后面就反向优化了,所以就上升了
标签:24,loss,32,self,torch,import,优化 来源: https://www.cnblogs.com/yuyingblogs/p/16304887.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。