tensorflow-滑动平均模型

随机梯度下降算法训练时,使用滑动平均模型 可以提高模型健壮性。
在Tensorflow中提供了tf.train.ExponentialMovingAverage来实现滑动平均模型。在初始化ExponentialMovingAverage时,需要提供一个衰减率。控制模型更新速度,它对每个变量会维护一个影子变量,这个影子变量的初始值 就是相应变量的初始值 ,而每次运行变量更新时,影子变量的值会更新为:


shadow_variable为影子变量,variable为待更新变量。
decay为模型更新的速度,越大,模型越稳定,一般为0.999。
为了使模型在训练前期可更新得更快,ExponentialMovingAverage还提供了num_updates参数来动态设置decay的大小。
如果,在ExponentialMovingAverage初始化时,提供了num_updates参数,那么每次使用衰减率将是:

 #!/usr/bin/env python2
# -*- coding: utf-8 -*-
"""
Created on Fri Sep 28 10:00:44 2018

@author: myhaspl
@email:[email protected]
滑动平均模型
"""
from __future__ import division
import tensorflow as tf
import numpy as np

def averageOp(shawv,v,decay,step):
    nowdecay=min(decay,(1+step)/(10+step))#step即num_updates
    return shawv*nowdecay+(1-nowdecay)*v

w=tf.Variable([0.,0.],dtype=tf.float32)
step=tf.Variable(0,dtype=tf.int32,trainable=False)

ema=tf.train.ExponentialMovingAverage(0.99,step)
maintainAverageOp=ema.apply([w])#更新w的操作,更新的方式是滑动平均算法
init=tf.global_variables_initializer()
with tf.Session() as sess:
    sess.run(init)
    v,shawv,vstep=sess.run([w,ema.average(w),step])
    print averageOp(shawv,v,0.99,vstep)
    sess.run(tf.assign(w,np.array([2.,6.])))
    v,shawv,vstep=sess.run([w,ema.average(w),step])
    print averageOp(shawv,v,0.99,vstep)
    sess.run(maintainAverageOp)
    print sess.run([w,ema.average(w)])#ema.average(w)表示获取滑动平均值
[0. 0.]
[1.8       5.3999996]
[array([2., 6.], dtype=float32), array([1.8      , 5.3999996], dtype=float32)]

原文地址:http://blog.51cto.com/13959448/2320272

时间: 2024-10-13 12:54:17

tensorflow-滑动平均模型的相关文章

78、tensorflow滑动平均模型,用来更新迭代的衰减系数

''' Created on 2017年4月21日 @author: weizhen ''' #4.滑动平均模型 import tensorflow as tf #定义一个变量用于计算滑动平均,这个变量的初始值为0. #类型为tf.float32,因为所有需要计算滑动平均的变量必须是实数型 v1=tf.Variable(0,dtype=tf.float32) #这里step变量模拟神经网络中迭代的轮数,可以用于动态控制衰减率 step=tf.Variable(0,trainable=False)

神经网络优化(二) - 滑动平均

1 滑动平均概述 滑动平均(也称为 影子值 ):记录了每一个参数一段时间内过往值的平均,增加了模型的泛化性. 滑动平均通常针对所有参数进行优化:W 和 b, 简单地理解,滑动平均像是给参数加了一个影子,参数变化,影子缓慢追随. 滑动平均的表示公式为 影子 = 衰减率 * 影子 + ( 1 - 衰减率 ) * 参数 或 滑动平均值 = 衰减率 * 滑动平均值 + ( 1 - 衰减率 )* 参数 备注 影子初值 = 参数初值 衰减率 = min{ MOVING_AVERAGE_DECAY, (1+轮

tensorflow-正则化+指数衰减+滑动平均

#!/usr/bin/env python2 # -*- coding: utf-8 -*- """ Created on Tue Sep 19 09:42:22 2017 @author: myhaspl """ import tensorflow as tf from tensorflow.examples.tutorials.mnist import input_data INPUT_NODE=784 OUTPUT_NODE=10 LAYE

滑动平均滤波算法(递推平均滤波法)

//滑动平均滤波算法(递推平均滤波法) //ADNum为获得的AD数 //GN为数组value_buf[]的元素个数.该函数主要被调用,利用参数的数组传值 const int GN = 12; int filterPtr = 0; bool isFirst = true; public float gSum = 0; float[] gbuf  = new float[GN]; float GlideFilterAD(float ADNum) { if (isFirst) { isFirst =

求滑动平均

臭氧的滑动平均 select FID,version,fsiteid,fDATETIME, case when (count(fO3) OVER (partition by fsiteid order by fDATETIME RANGE interval '7' hour preceding ))>5 then (avg(fO3) OVER (partition by fsiteid order by fDATETIME RANGE interval '7' hour preceding ))

滑动平均滤波算法(递推平均滤波法)(转帖)

//滑动平均滤波算法(递推平均滤波法)--C语言版 int FilterI=0; //ADNum为获得的AD数 //n为数组value_buf[]的元素个数.该函数主要被调用,利用参数的数组传值 int GlideFilterAD(int value_buf[],int n,int ADNum) { int sum=0; value_buf[FilterI++]=ADNum; if(FilterI==n) FilterI=0; //先进先出,再求平均值 for(int count=0;count

TensorFlow(十三):模型的保存与载入

一:保存 import tensorflow as tf from tensorflow.examples.tutorials.mnist import input_data #载入数据集 mnist = input_data.read_data_sets("MNIST_data",one_hot=True) #每个批次100张照片 batch_size = 100 #计算一共有多少个批次 n_batch = mnist.train.num_examples // batch_size

tensorflow训练线性回归模型

完整代码 import tensorflow as tf import matplotlib.pyplot as plt import numpy as np #样本数据 x_train = np.linspace(-1,1,300)[:,np.newaxis] noise = np.random.normal(0, 0.1, x_train.shape) y_train = x_train * 3 + noise + 0.8 #线性模型 W = tf.Variable([0.1],dtype

基于Spark和Tensorflow构建DCN模型进行CTR预测

实验介绍 数据采用Criteo Display Ads.这个数据一共11G,有13个integer features,26个categorical features. Spark 由于数据比较大,且只在一个txt文件,处理前用split -l 400000 train.txt对数据进行切分. 连续型数据利用log进行变换,因为从实时训练的角度上来判断,一般的标准化方式,如Z-Score和最大最小标准化中用到的值都跟某一批数据的整体统计结果有关,换一批数据后标准化就程度就不一样了. 而对于离散型分