当前位置: 首页 > news >正文

正能量网站免费入口不用下载网络会议

正能量网站免费入口不用下载,网络会议,wordpress做新闻系统,有哪几个网站可以做贸易目录 手写数字识别之优化算法:观察Loss下降的情况判断合理的学习率 前提条件 设置学习率 学习率的主流优化算法 手写数字识别之优化算法:观察Loss下降的情况判断合理的学习率 我们明确了分类任务的损失函数#xff08;优化目标#xff09;的相关概念和实现方法#xff…目录 手写数字识别之优化算法:观察Loss下降的情况判断合理的学习率 前提条件 设置学习率 学习率的主流优化算法 手写数字识别之优化算法:观察Loss下降的情况判断合理的学习率 我们明确了分类任务的损失函数优化目标的相关概念和实现方法本节我们依旧横向展开横纵式教学法如 图1 所示本节主要探讨在手写数字识别任务中使得损失达到最小的参数取值的实现方法。 图1“横纵式”教学法 — 优化算法 前提条件 在优化算法之前需要进行数据处理、设计神经网络结构代码与上一节保持一致如下所示。 # 加载相关库 import os import random import paddle from paddle.nn import Conv2D, MaxPool2D, Linear import numpy as np from PIL import Image import gzip import json# 定义数据集读取器 def load_data(modetrain):# 读取数据文件datafile ./work/mnist.json.gzprint(loading mnist dataset from {} .......format(datafile))data json.load(gzip.open(datafile))# 读取数据集中的训练集验证集和测试集train_set, val_set, eval_set data# 数据集相关参数图片高度IMG_ROWS, 图片宽度IMG_COLSIMG_ROWS 28IMG_COLS 28# 根据输入mode参数决定使用训练集验证集还是测试if mode train:imgs train_set[0]labels train_set[1]elif mode valid:imgs val_set[0]labels val_set[1]elif mode eval:imgs eval_set[0]labels eval_set[1]# 获得所有图像的数量imgs_length len(imgs)# 验证图像数量和标签数量是否一致assert len(imgs) len(labels), \length of train_imgs({}) should be the same as train_labels({}).format(len(imgs), len(labels))index_list list(range(imgs_length))# 读入数据时用到的batchsizeBATCHSIZE 100# 定义数据生成器def data_generator():# 训练模式下打乱训练数据if mode train:random.shuffle(index_list)imgs_list []labels_list []# 按照索引读取数据for i in index_list:# 读取图像和标签转换其尺寸和类型img np.reshape(imgs[i], [1, IMG_ROWS, IMG_COLS]).astype(float32)label np.reshape(labels[i], [1]).astype(int64)imgs_list.append(img) labels_list.append(label)# 如果当前数据缓存达到了batch size就返回一个批次数据if len(imgs_list) BATCHSIZE:yield np.array(imgs_list), np.array(labels_list)# 清空数据缓存列表imgs_list []labels_list []# 如果剩余数据的数目小于BATCHSIZE# 则剩余数据一起构成一个大小为len(imgs_list)的mini-batchif len(imgs_list) 0:yield np.array(imgs_list), np.array(labels_list)return data_generator# 定义模型结构 import paddle.nn.functional as F # 多层卷积神经网络实现 class MNIST(paddle.nn.Layer):def __init__(self):super(MNIST, self).__init__()# 定义卷积层输出特征通道out_channels设置为20卷积核的大小kernel_size为5卷积步长stride1padding2self.conv1 Conv2D(in_channels1, out_channels20, kernel_size5, stride1, padding2)# 定义池化层池化核的大小kernel_size为2池化步长为2self.max_pool1 MaxPool2D(kernel_size2, stride2)# 定义卷积层输出特征通道out_channels设置为20卷积核的大小kernel_size为5卷积步长stride1padding2self.conv2 Conv2D(in_channels20, out_channels20, kernel_size5, stride1, padding2)# 定义池化层池化核的大小kernel_size为2池化步长为2self.max_pool2 MaxPool2D(kernel_size2, stride2)# 定义一层全连接层输出维度是10self.fc Linear(in_features980, out_features10)# 定义网络前向计算过程卷积后紧接着使用池化层最后使用全连接层计算最终输出# 卷积层激活函数使用Relu全连接层激活函数使用softmaxdef forward(self, inputs):x self.conv1(inputs)x F.relu(x)x self.max_pool1(x)x self.conv2(x)x F.relu(x)x self.max_pool2(x)x paddle.reshape(x, [x.shape[0], -1])x self.fc(x)return x 设置学习率 在深度学习神经网络模型中通常使用标准的随机梯度下降算法更新参数学习率代表参数更新幅度的大小即步长。当学习率最优时模型的有效容量最大最终能达到的效果最好。学习率和深度学习任务类型有关合适的学习率往往需要大量的实验和调参经验。探索学习率最优值时需要注意如下两点 学习率不是越小越好。学习率越小损失函数的变化速度越慢意味着我们需要花费更长的时间进行收敛如 图2 左图所示。学习率不是越大越好。只根据总样本集中的一个批次计算梯度抽样误差会导致计算出的梯度不是全局最优的方向且存在波动。在接近最优解时过大的学习率会导致参数在最优解附近震荡损失难以收敛如 图2 右图所示。 图2: 不同学习率步长过大/过小的示意图   在训练前我们往往不清楚一个特定问题设置成怎样的学习率是合理的因此在训练时可以尝试调小或调大通过观察Loss下降的情况判断合理的学习率设置学习率的代码如下所示。 #仅优化算法的设置有所差别 def train(model):model.train()#调用加载数据的函数train_loader load_data(train)#设置不同初始学习率opt paddle.optimizer.SGD(learning_rate0.001, parametersmodel.parameters())# opt paddle.optimizer.SGD(learning_rate0.0001, parametersmodel.parameters())# opt paddle.optimizer.SGD(learning_rate0.01, parametersmodel.parameters())EPOCH_NUM 10for epoch_id in range(EPOCH_NUM):for batch_id, data in enumerate(train_loader()):#准备数据images, labels dataimages paddle.to_tensor(images)labels paddle.to_tensor(labels)#前向计算的过程predicts model(images)#计算损失取一个批次样本损失的平均值loss F.cross_entropy(predicts, labels)avg_loss paddle.mean(loss)#每训练了100批次的数据打印下当前Loss的情况if batch_id % 200 0:print(epoch: {}, batch: {}, loss is: {}.format(epoch_id, batch_id, avg_loss.numpy()))#后向传播更新参数的过程avg_loss.backward()# 最小化loss,更新参数opt.step()# 清除梯度opt.clear_grad()#保存模型参数paddle.save(model.state_dict(), mnist.pdparams)#创建模型 model MNIST() #启动训练过程 train(model) 学习率的主流优化算法 学习率是优化器的一个参数调整学习率看似是一件非常麻烦的事情需要不断的调整步长观察训练时间和Loss的变化。经过研究员的不断的实验当前已经形成了四种比较成熟的优化算法SGD、Momentum、AdaGrad和Adam效果如 图3 所示。 图3: 不同学习率算法效果示意图   SGD 随机梯度下降算法每次训练少量数据抽样偏差导致的参数收敛过程中震荡。 Momentum 引入物理“动量”的概念累积速度减少震荡使参数更新的方向更稳定。 每个批次的数据含有抽样误差导致梯度更新的方向波动较大。如果我们引入物理动量的概念给梯度下降的过程加入一定的“惯性”累积就可以减少更新路径上的震荡即每次更新的梯度由“历史多次梯度的累积方向”和“当次梯度”加权相加得到。历史多次梯度的累积方向往往是从全局视角更正确的方向这与“惯性”的物理概念很像也是为何其起名为“Momentum”的原因。类似不同品牌和材质的篮球有一定的重量差别街头篮球队中的投手擅长中远距离投篮喜欢稍重篮球的比例较高。一个很重要的原因是重的篮球惯性大更不容易受到手势的小幅变形或风吹的影响。 AdaGrad 根据不同参数距离最优解的远近动态调整学习率。学习率逐渐下降依据各参数变化大小调整学习率。 通过调整学习率的实验可以发现当某个参数的现值距离最优解较远时表现为梯度的绝对值较大我们期望参数更新的步长大一些以便更快收敛到最优解。当某个参数的现值距离最优解较近时表现为梯度的绝对值较小我们期望参数的更新步长小一些以便更精细的逼近最优解。类似于打高尔夫球专业运动员第一杆开球时通常会大力打一个远球让球尽量落在洞口附近。当第二杆面对离洞口较近的球时他会更轻柔而细致的推杆避免将球打飞。与此类似参数更新的步长应该随着优化过程逐渐减少减少的程度与当前梯度的大小有关。根据这个思想编写的优化算法称为“AdaGrad”Ada是Adaptive的缩写表示“适应环境而变化”的意思。RMSProp是在AdaGrad基础上的改进学习率随着梯度变化而适应解决AdaGrad学习率急剧下降的问题。 Adam 由于动量和自适应学习率两个优化思路是正交的因此可以将两个思路结合起来这就是当前广泛应用的算法。 说明 每种优化算法均有更多的参数设置。理论最合理的未必在具体案例中最有效所以模型调参是很有必要的最优的模型配置往往是在一定“理论”和“经验”的指导下实验出来的。 我们可以尝试选择不同的优化算法训练模型观察训练时间和损失变化的情况代码实现如下。 #仅优化算法的设置有所差别 def train(model):model.train()#调用加载数据的函数train_loader load_data(train)#四种优化算法的设置方案可以逐一尝试效果opt paddle.optimizer.SGD(learning_rate0.01, parametersmodel.parameters())# opt paddle.optimizer.Momentum(learning_rate0.01, momentum0.9, parametersmodel.parameters())# opt paddle.optimizer.Adagrad(learning_rate0.01, parametersmodel.parameters())# opt paddle.optimizer.Adam(learning_rate0.01, parametersmodel.parameters())EPOCH_NUM 3for epoch_id in range(EPOCH_NUM):for batch_id, data in enumerate(train_loader()):#准备数据images, labels dataimages paddle.to_tensor(images)labels paddle.to_tensor(labels)#前向计算的过程predicts model(images)#计算损失取一个批次样本损失的平均值loss F.cross_entropy(predicts, labels)avg_loss paddle.mean(loss)#每训练了100批次的数据打印下当前Loss的情况if batch_id % 200 0:print(epoch: {}, batch: {}, loss is: {}.format(epoch_id, batch_id, avg_loss.numpy()))#后向传播更新参数的过程avg_loss.backward()# 最小化loss,更新参数opt.step()# 清除梯度opt.clear_grad()#保存模型参数paddle.save(model.state_dict(), mnist.pdparams)#创建模型 model MNIST() #启动训练过程 train(model)
http://www.w-s-a.com/news/11636/

相关文章:

  • 自己开的网站 可以做代销吗百度查找相似图片
  • 网站建设设计作业网站备案渝
  • 中国重庆网站建设福州短视频seo获客
  • 遵义官网网站建设网站移动端开发公司
  • 宜春网站推广优化电子商务网站建设收益举例
  • 游戏网站开发实验报告装修平台哪家好
  • 外贸自己建网站小红门网站建设
  • 中国著名的做网站渗透设计规范网站
  • 公司网站备案多少钱推特最新消息今天
  • 网站关键词设置代码seo搜索优化 指数
  • 做网站卖东西送上门做暧暧xoxo网站
  • 网站网站设计公司网站维护运营好做吗
  • 照片做成视频的软件seo两个域名一个网站有影响吗
  • 制作动画的网站河南省住房城乡建设门户网站
  • 网站推广原则做网站的那个语言好
  • 潍坊网站建设怎样商品网站建设设计思路
  • 建网站公司是如何赚钱南昌营销网站公司哪家好
  • 淘宝客网站管理质量好网站建设费用
  • 网站建设教程搭建青岛中企动力做网站怎么样
  • wordpress最底部网站优化怎么弄
  • 二手市场网站建设的目的长沙ui设计公司
  • 微信公众号做留言网站wordpress详情页选择模板
  • php网站开发面向对象教程如何做分享赚钱的网站
  • 山东网站建设最便宜常州网站建站公司
  • 网站地图 seo中国建设招标网是私人网站吗
  • 高中作文网站全网营销有哪些平台
  • 网站构建建设制作平台上海搬家公司收费价目表
  • 成功案例展示网站做网站赚多少钱
  • 建设银行网站用什么字体网站建站后维护需要做哪些
  • 有哪些做平面设计好素材网站有哪些开网站建设