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()
    
  • 相关阅读:
    在浏览器中浏览git上项目目录结构
    部署elasticsearch(三节点)集群+filebeat+kibana
    谷歌浏览器安装Elasticsearch-head 插件
    Logstash配置文件修改自动加载和指定目录进行启动
    使用Dbvisualizer 连接 Elasticsearch
    Elasticsearch常见用法-分布式集群
    Elasticsearch常见用法-入门
    Elastic Stack 7.5.0白金版永不过期
    配置 Nginx 反向代理 WebSocket
    ES7.3.0配置
  • 原文地址:https://www.cnblogs.com/aoru45/p/10720981.html
Copyright © 2011-2022 走看看