滑动平均模型仿真_ ExponentailMovingAverage

 

动量方法原理(参考神经网络设计)

tensorflow中的滑动平均使用

 

实验过程:

1.生成正玄信号

2.创建tensorflow计算图

         1)创建滑动平均模型

           ema = tf.train.ExponentialMovingAverage(0.99,step)

        2)用于计算的张量

              maintain_averages_op = ema.apply([v1]) #计算张量

         3)用于取值的张量
             ema_average_op = ema.average(v1) # 取值张量

3.执行计算

        1)更新滑动平均的输入

            sess.run(tf.assign(v1,sin_y[i]))

        2)更新衰减系数

            sess.run(tf.assign(step, i * 2))

        3)计算滑动平均

             sess.run(maintain_averages_op)

        4)读取滑动平均结果,加入列表保存下来

             var_.append(sess.run(ema_average_op)) #读取数据

实验代码:


import tensorflow as tf
import math
import matplotlib.pyplot as plt
#生成正玄信号
N = 1000
FS = 10
sin_x = [2 * math.pi * FS * t /N for t in range(N)]
sin_y = [math.sin(i) for i in sin_x]
#创建滤波图
v1 = tf.Variable(0,dtype=tf.float32)
step = tf.Variable(0,trainable=False)
ema = tf.train.ExponentialMovingAverage(0.99,step)
maintain_averages_op = ema.apply([v1]) #计算张量
ema_average_op = ema.average(v1) # 取值张量
#variables_to_restore = ema.variables_to_restore() # 记录加载历史变量
var_ = []  #保存滑动平均后的变量
with tf.Session() as sess:
    init_op = tf.global_variables_initializer()
    sess.run(init_op)
    for i in range(N):
        #sess.run(tf.assign(v1,i)) #给v1赋值,作为滑动平均输入
        sess.run(tf.assign(v1,sin_y[i])) #给v1赋值,作为滑动平均输入
        sess.run(tf.assign(step, i * 2)) # 给step赋值,调节滑动平均系数
        sess.run(maintain_averages_op) # 计算滑动平均结果
        #print(sess.run([v1,ema_average_op])) #读取滑动平均结果
        var_.append(sess.run(ema_average_op)) #读取数据
        

plt.plot(sin_x,sin_y,label = 'sin(x)')
plt.plot(sin_x,var_, label = 'moving_sin(x)')
plt.legend()
plt.show()

实验结果

结果分析:

滑动平均模型减弱的震荡,初始时衰减系数比较小,状态可以快速适应新变量,随着衰减系数的增大,状态逐渐稳定在平均值

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值