有关Tensorflow梯度下降常用的优化方法分享

1.tf.train.exponential_decay() 指数衰减学习率:

#tf.train.exponential_decay(learning_rate, global_steps, decay_steps, decay_rate, staircase=True/False):
#指数衰减学习率
#learning_rate-学习率
#global_steps-训练轮数
#decay_steps-完整的使用一遍训练数据所需的迭代轮数;=总训练样本数/batch
#decay_rate-衰减速度
#staircase-衰减方式;=True,那就表明每decay_steps次计算学习速率变化,更新原始学习速率;=alse,那就是每一步都更新学习速率。learning_rate = tf.train.exponential_decay(
initial_learning_rate = 0.001
global_step = tf.Variable(0, trainable=False)
decay_steps = 100
decay_rate = 0.95
total_loss = slim.losses.get_total_loss()
learning_rate = tf.train.exponential_decay(initial_learning_rate, global_step, decay_steps, decay_rate, True, name='learning_rate')
optimizer = tf.train.GradientDescentOptimizer(learning_rate).minimize(total_loss, global_step)

2.tf.train.ExponentialMovingAverage(decay, steps) 滑动平均更新参数:

initial_learning_rate = 0.001
global_step = tf.Variable(0, trainable=False)
decay_steps = 100
decay_rate = 0.95
total_loss = slim.losses.get_total_loss()
learning_rate = tf.train.exponential_decay(initial_learning_rate, global_step, decay_steps, decay_rate, True, name='learning_rate')
optimizer = tf.train.GradientDescentOptimizer(learning_rate).minimize(total_loss, global_step)
ema = tf.train.ExponentialMovingAverage(decay=0.9999)
#tf.trainable_variables--返回的是需要训练的变量列表
averages_op = ema.apply(tf.trainable_variables())
with tf.control_dependencies([optimizer]):
   train_op = tf.group(averages_op)

以上这篇有关Tensorflow梯度下降常用的优化方法分享就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持我们。

(0)

相关推荐

  • opencv python图像梯度实例详解

    这篇文章主要介绍了opencv python图像梯度实例详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 一阶导数与Soble算子 二阶导数与拉普拉斯算子 图像边缘: Soble算子: 二阶导数: 拉普拉斯算子: import cv2 as cv import numpy as np # 图像梯度(由x,y方向上的偏导数和偏移构成),有一阶导数(sobel算子)和二阶导数(Laplace算子) # 用于求解图像边缘,一阶的极大值,二阶的零点

  • 基于TensorFlow中自定义梯度的2种方式

    前言 在深度学习中,有时候我们需要对某些节点的梯度进行一些定制,特别是该节点操作不可导(比如阶梯除法如 ),如果实在需要对这个节点进行操作,而且希望其可以反向传播,那么就需要对其进行自定义反向传播时的梯度.在有些场景,如[2]中介绍到的梯度反转(gradient inverse)中,就必须在某层节点对反向传播的梯度进行反转,也就是需要更改正常的梯度传播过程,如下图的 所示. 在tensorflow中有若干可以实现定制梯度的方法,这里介绍两种. 1. 重写梯度法 重写梯度法指的是通过tensorf

  • tensorflow求导和梯度计算实例

    1. 函数求一阶导 import tensorflow as tf tf.enable_eager_execution() tfe=tf.contrib.eager from math import pi def f(x): return tf.square(tf.sin(x)) assert f(pi/2).numpy()==1.0 sess=tf.Session() grad_f=tfe.gradients_function(f) print(grad_f(np.zeros(1))[0].n

  • pytorch梯度剪裁方式

    我就废话不多说,看例子吧! import torch.nn as nn outputs = model(data) loss= loss_fn(outputs, target) optimizer.zero_grad() loss.backward() nn.utils.clip_grad_norm_(model.parameters(), max_norm=20, norm_type=2) optimizer.step() nn.utils.clip_grad_norm_ 的参数: param

  • tensorflow 查看梯度方式

    1. 为什么要查看梯度 对于初学者来说网络经常不收敛,loss很奇怪(就是不收敛),所以怀疑是反向传播中梯度的问题 (1)求导之后的数(的绝对值)越来越小(趋近于0),这就是梯度消失 (2)求导之后的数(的绝对值)越来越大(特别大,发散),这就是梯度爆炸 所以说呢,当loss不正常时,可以看看梯度是否处于爆炸,或者是消失了,梯度爆炸的话,网络中的W也会很大,人工控制一下(初始化的时候弄小点等等肯定还有其它方法,只是我不知道,知道的大神也可以稍微告诉我一下~~),要是梯度消失,可以试着用用resn

  • TensorFlow梯度求解tf.gradients实例

    我就废话不多说了,直接上代码吧! import tensorflow as tf w1 = tf.Variable([[1,2]]) w2 = tf.Variable([[3,4]]) res = tf.matmul(w1, [[2],[1]]) grads = tf.gradients(res,[w1]) with tf.Session() as sess: tf.global_variables_initializer().run() print sess.run(res) print se

  • pytorch对梯度进行可视化进行梯度检查教程

    目的: 在训练神经网络的时候,有时候需要自己写操作,比如faster_rcnn中的roi_pooling,我们可以可视化前向传播的图像和反向传播的梯度图像,前向传播可以检查流程和计算的正确性,而反向传播则可以大概检查流程的正确性. 实验 可视化rroi_align的梯度 1.pytorch 0.4.1及之前,需要声明需要参数,这里将图片数据声明为variable im_data = Variable(im_data, requires_grad=True) 2.进行前向传播,最后的loss映射为

  • 基于梯度爆炸的解决方法:clip gradient

    1. 梯度爆炸的影响 在一个只有一个隐藏节点的网络中,损失函数和权值w偏置b构成error surface,其中有一堵墙,如下所示 损失函数每次迭代都是每次一小步,但是当遇到这堵墙时,在墙上的某点计算梯度,梯度会瞬间增大,指向某处不理想的位置.如果我们使用缩放,可以把误导控制在可接受范围内,如虚线箭头所示 2. 解决梯度爆炸问题的方法 通常会使用一种叫"clip gradients "的方法. 它能有效地权重控制在一定范围之内. 算法步骤如下. 首先设置一个梯度阈值:clip_grad

  • 有关Tensorflow梯度下降常用的优化方法分享

    1.tf.train.exponential_decay() 指数衰减学习率: #tf.train.exponential_decay(learning_rate, global_steps, decay_steps, decay_rate, staircase=True/False): #指数衰减学习率 #learning_rate-学习率 #global_steps-训练轮数 #decay_steps-完整的使用一遍训练数据所需的迭代轮数:=总训练样本数/batch #decay_rate-

  • mysql limit分页优化方法分享

    同样是取10条数据 select * from yanxue8_visit limit 10000,10 和 select * from yanxue8_visit limit 0,10 就不是一个数量级别的. 网上也很多关于limit的五条优化准则,都是翻译自MySQL手册,虽然正确但不实用.今天发现一篇文章写了些关于limit优化的,很不错. 文中不是直接使用limit,而是首先获取到offset的id然后直接使用limit size来获取数据.根据他的数据,明显要好于直接使用limit.这

  • MySQL配置文件my.cnf中文详解附mysql性能优化方法分享

    下面先说我的服务器的硬件以及论坛情况,CPU: 2颗四核Intel Xeon 2.00GHz内存: 4GB DDR硬盘: SCSI 146GB论坛:在线会员 一般在 5000 人左右 – 最高记录是 13264.下面,我们根据以上硬件配置结合一份已经做过一次优化的my.cnf进行分析说明:有些参数可能还得根据论坛的变化情况以及程序员的程序进行再调整.[mysqld]port = 3306serverid = 1socket = /tmp/mysql.sockskip-locking # 避免My

  • 运用TensorFlow进行简单实现线性回归、梯度下降示例

    线性回归属于监督学习,因此方法和监督学习应该是一样的,先给定一个训练集,根据这个训练集学习出一个线性函数,然后测试这个函数训练的好不好(即此函数是否足够拟合训练集数据),挑选出最好的函数(cost function最小)即可. 单变量线性回归: a) 因为是线性回归,所以学习到的函数为线性函数,即直线函数: b) 因为是单变量,因此只有一个x. 我们能够给出单变量线性回归的模型: 我们常称x为feature,h(x)为hypothesis. 上面介绍的方法中,我们肯定有一个疑问,怎样能够看出线性

  • 人工智能学习Pytorch梯度下降优化示例详解

    目录 一.激活函数 1.Sigmoid函数 2.Tanh函数 3.ReLU函数 二.损失函数及求导 1.autograd.grad 2.loss.backward() 3.softmax及其求导 三.链式法则 1.单层感知机梯度 2. 多输出感知机梯度 3. 中间有隐藏层的求导 4.多层感知机的反向传播 四.优化举例 一.激活函数 1.Sigmoid函数 函数图像以及表达式如下: 通过该函数,可以将输入的负无穷到正无穷的输入压缩到0-1之间.在x=0的时候,输出0.5 通过PyTorch实现方式

  • Keras SGD 随机梯度下降优化器参数设置方式

    SGD 随机梯度下降 Keras 中包含了各式优化器供我们使用,但通常我会倾向于使用 SGD 验证模型能否快速收敛,然后调整不同的学习速率看看模型最后的性能,然后再尝试使用其他优化器. Keras 中文文档中对 SGD 的描述如下: keras.optimizers.SGD(lr=0.01, momentum=0.0, decay=0.0, nesterov=False) 随机梯度下降法,支持动量参数,支持学习衰减率,支持Nesterov动量 参数: lr:大或等于0的浮点数,学习率 momen

  • PyTorch加载数据集梯度下降优化

    目录 一.实现过程 1.准备数据 2.设计模型 3.构造损失函数和优化器 4.训练过程 5.结果展示 二.参考文献 一.实现过程 1.准备数据 与PyTorch实现多维度特征输入的逻辑回归的方法不同的是:本文使用DataLoader方法,并继承DataSet抽象类,可实现对数据集进行mini_batch梯度下降优化. 代码如下: import torch import numpy as np from torch.utils.data import Dataset,DataLoader clas

  • PyTorch: 梯度下降及反向传播的实例详解

    线性模型 线性模型介绍 线性模型是很常见的机器学习模型,通常通过线性的公式来拟合训练数据集.训练集包括(x,y),x为特征,y为目标.如下图: 将真实值和预测值用于构建损失函数,训练的目标是最小化这个函数,从而更新w.当损失函数达到最小时(理想上,实际情况可能会陷入局部最优),此时的模型为最优模型,线性模型常见的的损失函数: 线性模型例子 下面通过一个例子可以观察不同权重(w)对模型损失函数的影响. #author:yuquanle #data:2018.2.5 #Study of Linear

  • 基于随机梯度下降的矩阵分解推荐算法(python)

    SVD是矩阵分解常用的方法,其原理为:矩阵M可以写成矩阵A.B与C相乘得到,而B可以与A或者C合并,就变成了两个元素M1与M2的矩阵相乘可以得到M. 矩阵分解推荐的思想就是基于此,将每个user和item的内在feature构成的矩阵分别表示为M1与M2,则内在feature的乘积得到M:因此我们可以利用已有数据(user对item的打分)通过随机梯度下降的方法计算出现有user和item最可能的feature对应到的M1与M2(相当于得到每个user和每个item的内在属性),这样就可以得到通

  • Python3 常用数据标准化方法详解

    数据标准化是机器学习.数据挖掘中常用的一种方法.包括我自己在做深度学习方面的研究时,数据标准化是最基本的一个步骤. 数据标准化主要是应对特征向量中数据很分散的情况,防止小数据被大数据(绝对值)吞并的情况. 另外,数据标准化也有加速训练,防止梯度爆炸的作用. 下面是从李宏毅教授视频中截下来的两张图. 左图表示未经过数据标准化处理的loss更新函数,右图表示经过数据标准化后的loss更新图.可见经过标准化后的数据更容易迭代到最优点,而且收敛更快. 一.[0, 1] 标准化 [0, 1] 标准化是最基

随机推荐