zoukankan      html  css  js  c++  java
  • [Pytorch] pytorch笔记 <三>

    pytorch笔记 <三>

    optimizer.zero_grad()

    将梯度变为0,用于每个batch最开始,因为梯度在不同batch之间不是累加的,所以必须在每个batch开始的时候初始化累计梯度,重置为0.

    for epoch in range(num_epoches):# 每个epoch
        for inputs,labels in dataloader:# 每个batch
            optimizer.zero_grad()# 初始化梯度
            outputs = model(inputs)# 正向
            _,pred = torch.max(outputs,1)
            loss = criterion(inputs,pred)# 计算loss
            #...
            loss.backward() # 反向
            optimizer.step()# 更新权重
    

    torch.max()

    在某个dim上返回最大的值以及在该dim上的索引,所以是返回两个值。

    max(input, dim, keepdim=False, out=None)

    >>> import torch
    >>> a = torch.randn(3,3)
    >>> print(torch.max(a,1))
    (tensor([1.0404, 1.8460, 0.5961]), tensor([2, 1, 0]))
    
    

    model(x)输出的是概率,要获得类别必须通过torch.max来获得,但是我们求loss的时候还是求网络输出概率与label的loss,因为我们的label是被one-hot编码的,所以这两者的loss才是有效的,因为交叉熵衡量的是两个概率分布之间的相似度。

    optimizer.step() 以及 scheduler.step()

    optimizer.step()用在每个batch内,当一个batch的数据计算完之后,通过optimizer.step()函数来完成权重的更新,而scheduler.step()用在每个epoch内,当一个epoch的数据运算完之后,调用一下这个函数,以此来决策是否更新我们的learning_rate超参等。

    exp_lr_scheduler = lr_scheduler.StepLR(optimizer_ft, step_size=7, gamma=0.1)
    # 每隔step_size个epoch learning_rate变为原来的0.1
    # 然后在一个epoch之后执行
    exp_lr_scheduler.step()
    
  • 相关阅读:
    Unity网格合并_材质合并
    windows7任务管理器内存相关列详细解释
    移动平台unity3d优化
    各种移动GPU压缩纹理的使用方法
    opengl VAO ,VBO
    GPU 与CPU的作用协调,工作流程、GPU整合到CPU得好处
    Unity3d的批渲染 batch rendering
    Android真机调测Profiler
    图片占用内存计算方法
    Unity3D–Texture图片空间和内存占用分析
  • 原文地址:https://www.cnblogs.com/aoru45/p/10720981.html
Copyright © 2011-2022 走看看