pytorch 7 optimizer 优化器 加速训练

import torch
import torch.utils.data as Data
import torch.nn.functional as F
import matplotlib.pyplot as plt

# torch.manual_seed(1)    # reproducible

超参数设置

LR = 0.01
BATCH_SIZE = 32
EPOCH = 12
# fake dataset
x = torch.unsqueeze(torch.linspace(-1, 1, 1000), dim=1)
y = x.pow(2) + 0.1*torch.normal(torch.zeros(*x.size()))

# plot dataset
plt.scatter(x.numpy(), y.numpy())
plt.show()

# put dateset into torch dataset
torch_dataset = Data.TensorDataset(x, y)
loader = Data.DataLoader(dataset=torch_dataset, batch_size=BATCH_SIZE, shuffle=True, num_workers=2,)

# default network
class Net(torch.nn.Module):
    def __init__(self):
        super(Net, self).__init__()
        self.hidden = torch.nn.Linear(1, 20)   # hidden layer
        self.predict = torch.nn.Linear(20, 1)   # output layer

    def forward(self, x):
        x = F.relu(self.hidden(x))      # activation function for hidden layer
        x = self.predict(x)             # linear output
        return x

if __name__ == '__main__':
    # different nets
    net_SGD         = Net()
    net_Momentum    = Net()
    net_RMSprop     = Net()
    net_Adam        = Net()
    nets = [net_SGD, net_Momentum, net_RMSprop, net_Adam]  # 构造4个网络,谈们的结构都是相同的

    # different optimizers
    opt_SGD         = torch.optim.SGD(net_SGD.parameters(), lr=LR)
    opt_Momentum    = torch.optim.SGD(net_Momentum.parameters(), lr=LR, momentum=0.8)
    opt_RMSprop     = torch.optim.RMSprop(net_RMSprop.parameters(), lr=LR, alpha=0.9)
    opt_Adam        = torch.optim.Adam(net_Adam.parameters(), lr=LR, betas=(0.9, 0.99))
    optimizers = [opt_SGD, opt_Momentum, opt_RMSprop, opt_Adam]  # 使用4个不同的优化器来优化参数  

    loss_func = torch.nn.MSELoss()
    losses_his = [[], [], [], []]   # 使用四个列表来记录当前的lossz值,record loss

    # training
    for epoch in range(EPOCH):
        print('Epoch: ', epoch)
        for step, (b_x, b_y) in enumerate(loader):          # for each training step
            for net, opt, l_his in zip(nets, optimizers, losses_his):  # 每一次循环都使用一个网络和优化器来训练,添加当前loss值进列表
                output = net(b_x)              # get output for every net
                loss = loss_func(output, b_y)  # compute loss for every net
                opt.zero_grad()                # clear gradients for next train
                loss.backward()                # backpropagation, compute gradients
                opt.step()                     # apply gradients
                l_his.append(loss.data.numpy())     # loss recoder

    labels = ['SGD', 'Momentum', 'RMSprop', 'Adam']
    for i, l_his in enumerate(losses_his):
        plt.plot(l_his, label=labels[i])
    plt.legend(loc='best')
    plt.xlabel('Steps')
    plt.ylabel('Loss')
    plt.ylim((0, 0.2))
    plt.show()
  • 数据

  • 4种优化器的训练过程的loss变化,下降的越快越好

END

原文地址:https://www.cnblogs.com/yangzhaonan/p/10440049.html

时间: 2024-10-12 06:48:42

pytorch 7 optimizer 优化器 加速训练的相关文章

Catalyst Optimizer优化器

Spark SQL的优化器Catalyst是易于扩展的.它同时支持基于规则(rule-based)和基于代价(cost-based)的优化方法. 在它内部,Catalyst包含了一个表示树和操作树的规则的通用库.在此框架下,目前实现了针对关系查询处理(如,表达式,逻辑查询计划)的库,和在处理查询执行不同阶段(分析,逻辑优化,物理优化,代码生成)的一些规则. Tree 在Catalyst主要的数据类型就是由节点对象组成的树.每个节点都有一个节点类型和0至多个孩子.新节点类型都是Scala里面Tre

Pytorch torch.optim优化器个性化使用

一.简化前馈网络LeNet 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 import torch as t class LeNet(t.nn.Module):     def __init__(self):         super(LeNet, self).__init__()         self.features = t.nn.Sequential(      

PLSQL_性能优化系列04_Oracle Optimizer优化器

2014-09-25 BaoXinjian 一.摘要 1. Oracle优化器介绍 本文讲述了Oracle优化器的概念.工作原理和使用方法,兼顾了Oracle8i.9i以及最新的10g三个版本.理解本文将有助于您更好的更有效的进行SQL优化工作. 2. RBO优化器 RBO是一种基于规则的优化器,随着CBO优化器的逐步发展和完善,在最新的10g版本中Oracle已经彻底废除了RBO. 正在使用Oracle8i或9i的人们或多或少的都会碰到RBO,因此在详细介绍CBO之前,我们有必要简单回顾一下古

各种优化器Optimizer的总结与比较

1.梯度下降法(Gradient Descent) 梯度下降法是最基本的一类优化器,目前主要分为三种梯度下降法: 标准梯度下降法(GD, Gradient Descent) 随机梯度下降法(SGD, Stochastic Gradient Descent) 批量梯度下降法(BGD, Batch Gradient Descent) class tf.train.GradientDescentOptimizer 使用梯度下降算法的Optimizer 标准梯度下降法(GD) 假设要学习训练的模型参数为

优化器Optimizer

目前最流行的5种优化器:Momentum(动量优化).NAG(Nesterov梯度加速).AdaGrad.RMSProp.Adam,所有的优化算法都是在原始梯度下降算法的基础上增加惯性和环境感知因素进行持续优化 Momentum优化 momentum优化的一个简单思想:考虑物体运动惯性,想象一个保龄球在光滑表面滚下一个平缓的坡度,最开始会很慢,但是会迅速地恢复动力,直到达到最终速度(假设又一定的摩擦力核空气阻力) momentum优化关注以前的梯度是多少,公式: \((1)m \leftarro

『PyTorch』第十一弹_torch.optim优化器

一.简化前馈网络LeNet import torch as t class LeNet(t.nn.Module): def __init__(self): super(LeNet, self).__init__() self.features = t.nn.Sequential( t.nn.Conv2d(3, 6, 5), t.nn.ReLU(), t.nn.MaxPool2d(2, 2), t.nn.Conv2d(6, 16, 5), t.nn.ReLU(), t.nn.MaxPool2d(2

优化器算法Optimizer详解(BGD、SGD、MBGD、Momentum、NAG、Adagrad、Adadelta、RMSprop、Adam)

在机器学习.深度学习中使用的优化算法除了常见的梯度下降,还有 Adadelta,Adagrad,RMSProp 等几种优化器,都是什么呢,又该怎么选择呢? 在 Sebastian Ruder 的这篇论文中给出了常用优化器的比较,今天来学习一下:https://arxiv.org/pdf/1609.04747.pdf 本文将梳理: 每个算法的梯度更新规则和缺点 为了应对这个不足而提出的下一个算法 超参数的一般设定值 几种算法的效果比较 选择哪种算法 0.梯度下降法深入理解 以下为个人总结,如有错误

optimizer for eclipse--Eclipse优化器

官网:http://zeroturnaround.com/free/optimizer-for-eclipse/ infoq网址:http://www.infoq.com/cn/news/2015/03/eclipse-optimizer 视频教程地址:https://vimeo.com/121659307 在2015年EclipseCon上,Zero Turnaround(消除Java重新部署的流行工具JRebel的创建者)发布了Eclipse优化器,一个可以通过调整JVM设置提升性能的自助向

百度PaddlePaddle入门-14(多个CPU加速训练)

接下来介绍在paddlepaddle中如何使用多CPU来加速训练. 接着前面几节讲的手写数字识别部分,在启动训练前,加载数据和网络结构的代码部分均不变. 1 # 加载相关库 2 import os 3 import random 4 import paddle 5 import paddle.fluid as fluid 6 from paddle.fluid.dygraph.nn import Conv2D, Pool2D, FC 7 import numpy as np 8 from PIL