PyTorch 实现批训练和 Optimizer 优化器
批训练
import torch
import torch.utils.data as DataBATCH_SIZE = 5x = torch.linspace(1, 10, 10) # this is x data
y = torch.linspace(10, 1, 10) # this is y datatorch_dataset = Data.TensorDataset(x, y)
loader = Data.DataLoader(dataset=torch_dataset,batch_size=BATCH_SIZE,shuffle=True, # 是否随机打乱数据num_workers=2, # 使用几个线程/进程
)if __name__ == "__main__":for epoch in range(3):for step, (batch_x, batch_y) in enumerate(loader):# training...print('Epoch: ', epoch, '| Step:', step, '| batch x:',batch_x.numpy(), '| batch y:', batch_y.numpy())
Optimizer 优化器
SGD
喝醉的人,回家的时候,摇摇晃晃,曲折无比,走了很多弯路
w + = − L e a r n i n g w += -Learning w+=−Learning \; r a t e ∗ d x rate * dx rate∗dx
Momentum
将这个喝醉的人放到斜坡上,这个人就会不自觉的依靠惯性向下走,走得弯路也就少了
m = b 1 ∗ m − L e a r n i n g m = b1 * m - Learning m=b1∗m−Learning \; r a t e ∗ d x rate * dx rate∗dx
W + = m W += m W+=m
AdaGrad
学习率上动了手脚,使得每个参数的更新都会有自己与众不同的学习效率。
给他一双不好走的鞋子,鞋子变成了向前走的阻力,逼着他向前直着走。
v + = d x 2 v += dx^2 v+=dx2
W + = − L e a r n i n g W += -Learning W+=−Learning \; r a t e ∗ d x / v rate * dx / \sqrt v rate∗dx/v
RMsProp
将 Momentum 与 AdaGrad 结合
m = b 1 ∗ m + ( 1 − b 1 ) ∗ d x m = b1 * m +(1-b1) * dx m=b1∗m+(1−b1)∗dx ------>Momentum
b 2 ∗ v + ( 1 − b 2 ) ∗ d x 2 b2 *v +(1-b2)*dx^2 b2∗v+(1−b2)∗dx2 ------------->AdaGrad
W + = − L e a r n i n g W += -Learning W+=−Learning \; r a t e ∗ m / v rate * m/ \sqrt v rate∗m/v
import torch
import torch.utils.data as Data
import torch.nn.functional as F
from torch.autograd import Variable
import matplotlib.pyplot as plt# hyper parameters
LR = 0.01
BATCH_SIZE = 32
EPOCH = 12x = torch.unsqueeze(torch.linspace(-1, 1, 1000), dim=1)
y = x.pow(2) + 0.1 * torch.normal(torch.zeros(*x.size()))# plot dataset
# plot.scatter(x.numpy(), y.numpy())
# plt.show()torch_dataset = Data.TensorDataset(x, y)
loader = Data.DataLoader(dataset=torch_dataset, batch_size=BATCH_SIZE, shuffle=True)# default network
class Net(torch.nn.Module):def __init__(self):super(Net, self).__init__()self.hidden = torch.nn.Linear(1, 20) # hidden layerself.predict = torch.nn.Linear(20, 1) # output layerdef forward(self, x):x = F.relu(self.hidden(x)) # activation function for hidden layerx = self.predict(x) # linear outputreturn x# different nets
net_SGD = Net()
net_Momentum = Net()
net_RMSprop = Net()
net_Adam = Net()
nets = [net_SGD, net_Momentum, net_RMSprop, net_Adam]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]loss_func = torch.nn.MSELoss()
losses_his = [[], [], [], []] # record lossfor epoch in range(EPOCH):print(epoch)for step, (batch_x, batch_y) in enumerate(loader):b_x, b_y = Variable(batch_x), Variable(batch_y)for net, opt, l_his in zip(nets, optimizers, losses_his):output = net(b_x) # get output for every netloss = loss_func(output, b_y) # compute loss for every netopt.zero_grad() # clear gradients for next trainloss.backward() # backpropagation, compute gradientsopt.step() # apply gradientsl_his.append(loss.item()) # loss recoderlabels = ['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()
PyTorch 实现批训练和 Optimizer 优化器相关推荐
- 深度学习训练之optimizer优化器(BGD、SGD、MBGD、SGDM、NAG、AdaGrad、AdaDelta、Adam)的最全系统详解
文章目录 1.BGD(批量梯度下降) 2.SGD(随机梯度下降) 2.1.SGD导致的Zigzag现象 3.MBGD(小批量梯度下降) 3.1 BGD.SGD.MBGD的比较 4.SGDM 5.NAG ...
- pytorch 7 optimizer 优化器 加速训练
pytorch 7 optimizer 优化器 加速训练 import torch import torch.utils.data as Data import torch.nn.functional ...
- 加速神经网络训练方法及不同Optimizer优化器性能比较
本篇博客主要介绍几种加速神经网络训练的方法. 我们知道,在训练样本非常多的情况下,如果一次性把所有的样本送入神经网络,每迭代一次更新网络参数,这样的效率是很低的.为什么?因为梯度下降法参数更新的公式一 ...
- Optimizer优化器
这节内容主要是对比在 Torch 实践中所会用到的几种优化器 编写伪数据 为了对比各种优化器的效果, 需要有一些数据, 可以自己编一些伪数据, 这批数据是这样的: 具体的数据生成代码如下: impor ...
- NLP 神经网络训练慎用 Adam 优化器
https://www.jianshu.com/p/48e71b72ca67 NLP 神经网络训练慎用 Adam 优化器 theoqian关注 12019.02.10 16:01:45字数 499阅读 ...
- [Python人工智能] 四.TensorFlow创建回归神经网络及Optimizer优化器
从本篇文章开始,作者正式开始研究Python深度学习.神经网络及人工智能相关知识.前一篇文章讲解了TensorFlow基础和一元直线预测的案例,以及Session.变量.传入值和激励函数:这篇文章将详 ...
- 【Pytorch神经网络理论篇】 10 优化器模块+退化学习率
1 优化器模块的作用 1.1 反向传播的核心思想 反向传播的意义在于告诉模型我们需要将权重修改到什么数值可以得到最优解,在开始探索合适权重的过程中,正向传播所生成的结果与实际标签的目标值存在误差,反向 ...
- pytorch学习笔记十二:优化器
前言 机器学习中的五个步骤:数据 --> 模型 --> 损失函数 --> 优化器 --> 迭代训练,通过前向传播,得到模型的输出和真实标签之间的差异,也就是损失函数,有了损失函 ...
- Optimizer 优化器
要点 这节内容主要是用 Torch 实践 这个 优化器 动画简介 中起到的几种优化器, 这几种优化器具体的优势不会在这个节内容中说了, 所以想快速了解的话, 上面的那个动画链接是很好的去处. 下图就是 ...
最新文章
- golang的mongodb操作(mgo)
- mysql 数据怎么导出_mysql怎么导出数据
- Linux下的基本指令
- 在Spring Boot中使用内存数据库
- exception javax.crypto.BadPaddingException: Given final block not properly padded
- mac中apache服务器及虚拟主机配置
- 纽交所决定将蛋壳公寓ADS摘牌
- 在一个函数中把值放到Cookies中比较是否相等
- 82相似标准形03——不变因子、行列式因子、相抵标准形的唯一性、用求行列式因子法求标准形
- 基于接口式的开发模式
- 安装程序提示本地计算机已存在源,安装卡巴斯基出现“不能访问Window Installer服务”...
- matlab单元刚度矩阵,求助:关于有限元三角形单元合成总刚度矩阵怎么处理
- dmg文件如何安装linux,我怎么能打开.dmg文件?
- 上海流浪汉沈巍身份大爆光26年不上班照常领工资
- 华为OD机试真题目录(Java JavaScript)
- ffmpeg库编译加文字_我自己的FFMpeg编译之路
- django和mezzanine搭建博客小站1
- 文储研习社第20期 | 关于对区块链培训的一些思考
- 每天坚持慢跑30分钟,一个月身体会有什么变化?
- Choosing Smartly: Adaptive Multimodal Fusion for Object Detection in Changing Environments论文阅读笔记
热门文章
- 华为matebook x pro蓝屏和拆机更换固态硬盘
- python多线程下载(荣耀)photo
- 腾讯|阿里|百度|字节跳动人才体系的职位层级、薪酬、晋升标准
- 【优化求解】基于matlab遗传算法求解仓库货位优化问题【含Matlab源码 022期】
- python如何输出多个星号_如何使用python输出连续星号?
- Kali Linux下口令字典破解WAP2加密小实验
- Python 手写机器学习最简单的 kNN 算法
- Android性能调优 - 稳定性优化
- android8.1字体,Android 8.1换上全新字体 阅读起来会更舒爽
- PCIE LANE翻转和PN翻转(lane reversal and polarity)