TensorFlow学习--指数移动平均/tf.train.ExponentialMovingAverage
時間序列模型
時間序列是指將同一統(tǒng)計(jì)指標(biāo)的數(shù)值按其發(fā)生的時間先后順序排列而成的數(shù)列.時間序列分析的主要目的是根據(jù)已有的歷史數(shù)據(jù)對未來進(jìn)行預(yù)測.處理與時間相關(guān)數(shù)據(jù)的方法叫做時間序列模型.
當(dāng)一個平穩(wěn)序列?X(t)X(t)中混入噪聲?Er(t)Er(t),變成如圖所示:
此時引入Rho系數(shù)
?X(t)=Rho×X(t?1)+Er(t)X(t)=Rho×X(t?1)+Er(t)
將?RhoRho的值增加到0.5,將會得到如下圖所示:
將?RhoRho的值增加到0.9,如圖.這樣逐漸得到一個平穩(wěn)時間序列.
移動平均/MA
移動平均/滑動平均(Moving average,MA)是一種簡單平滑預(yù)測技術(shù),當(dāng)時間序列的數(shù)值由于受周期變動和隨機(jī)波動的影響,起伏較大,不易顯示出事件的發(fā)展趨勢時,使用移動平均法可以消除這些因素的影響,顯示出事件的發(fā)展方向與趨勢.
移動平均可分以下幾種:
- 簡單移動平均(SMA):前n個數(shù)據(jù)的未加權(quán)均值.如K線圖中的5天移動平均線即5天內(nèi)收盤價的均值.
- 累計(jì)移動平均(CMA):數(shù)據(jù)以有序基準(zhǔn)流的形式到達(dá),用戶希望獲得所有直到當(dāng)前基準(zhǔn)點(diǎn)數(shù)據(jù)的平均值.詳細(xì)解釋見wikipedia:Cumulative moving average.
- 加權(quán)移動平均(WMA):為樣本窗口內(nèi)不同位置的變量分配不同的權(quán)重,各變量乘以對應(yīng)的權(quán)重后求均值.即基準(zhǔn)點(diǎn)與固定加權(quán)函數(shù)的卷積.
- 指數(shù)移動平均(EMA):也稱為指數(shù)加權(quán)移動平均(Exponentially Weighted Moving Average),是一種無限脈沖響應(yīng)濾波器,采用指數(shù)下降的加權(quán)因子.每個舊數(shù)據(jù)的權(quán)重都呈指數(shù)遞減,且不達(dá)到零.
指數(shù)移動平均與加權(quán)移動平均對比:
WMA權(quán)重 N = 15
EMA權(quán)重 N = 15
指數(shù)移動平均/EMA
指數(shù)移動平均/EMA(或指數(shù)加權(quán)移動平均Exponentially Weighted Moving Average)是一種常用的序列數(shù)據(jù)處理方式.處理過程為:
α控制衰減速率,Yt表示時間t時的原始值,St表示經(jīng)過EMA后的時間t的值.指數(shù)移動平均就是把一系列的離散數(shù)據(jù)點(diǎn)轉(zhuǎn)化為更好的數(shù)據(jù)點(diǎn),后面的數(shù)據(jù)點(diǎn)會記住前面的數(shù)據(jù)點(diǎn)的一些信息,離得越遠(yuǎn)記得越少.
在TensorFlow中提供了tf.train.ExponentialMovingAverage() 來實(shí)現(xiàn)移動平均模型,即通過采用指數(shù)衰減保持變量的平均值.
在訓(xùn)練/保存模型時,使用tf.train.ExponentialMovingAverage()取不同迭代次數(shù)模型參數(shù)的移動平均,可以使模型在測試數(shù)據(jù)上更加robust.可以移動平均后的模型在性能上通常會比最后一次迭代保存的模型要好一些,在一定上可以提高最終模型在測試數(shù)據(jù)上的表現(xiàn).
tf.train.ExponentialMovingAverage()
tf.train.ExponentialMovingAverage()
- decay:衰減率.
- num_updates:變量更新次數(shù)計(jì)數(shù).
- zero_debias:若為True,則使用張量初始化零移動平均值.
- name:在apply()中添加的操作名稱的前綴名稱.
tf.train.ExponentialMovingAverage()需要提供一個衰減率/decay.該衰減率用于控制模型更新的速度.ExponentialMovingAverage對每一個待更新訓(xùn)練學(xué)習(xí)的變量/variable都會維護(hù)一個影子變量/shadow variable.影子變量的初始值就是這個變量的初始值,每次更新影子變量的值更新為:
shadow_variable = decay * shadow_variable + (1 - decay) * variableshadow_variable為影子變量,variable為待更新變量,decay為衰減率.
decay決定了模型更新速度,decay越大模型越趨于穩(wěn)定.實(shí)際應(yīng)用中,decay 一般會設(shè)為十分接近 1 的常數(shù)(0.99或0.999).為了使模型在訓(xùn)練初始階段更新更快,ExponentialMovingAverage還提供了 num_updates參數(shù)來動態(tài)設(shè)置 decay 的大小.若ExponentialMovingAverage初始化時提供了num_updates參數(shù),則每次使用的衰減率為:
即在訓(xùn)練開始時衰減率較低,這使得移動均線移動更快.隨著變量更新次數(shù)的增加,衰減率(1 + num_updates) / (10 + num_updates)逐漸變高,當(dāng)增加到一定次數(shù)后最終(1 + num_updates) / (10 + num_updates)大于decay,衰減率變?yōu)閐ecay.
apply(var_list=None) 保持變量的平均值.返回更新移動平均線的操作.var_list:變量或張量對象的列表.
average(var) 返回Variable持有的平均值var.
ExponentialMovingAverage使用示例
#!/usr/bin/python # coding:utf-8import tensorflow as tf v1 = tf.Variable([1, 2, 0], dtype=tf.float32) step = tf.Variable(tf.constant(0)) # 通過采用指數(shù)衰減保持變量的平均值 ema = tf.train.ExponentialMovingAverage(decay=0.99, num_updates=step) maintain_average = ema.apply([v1])with tf.Session() as sess:# 初始的值都為[1, 2, 0]sess.run(tf.global_variables_initializer())print sess.run([v1, ema.average(v1)])# # 把[1, 2, 0]變?yōu)閇1, 2, 5]sess.run(tf.assign(v1, [1, 2, 5]))sess.run(maintain_average)# decay=min(0.99, 1/10)=0.1, v1=0.1*0+0.9*5=4.5print sess.run([v1, ema.average(v1)])# steps=10000sess.run(tf.assign(step, 10000))# 把v1變?yōu)?0sess.run(tf.assign(v1, [1, 3, 10]))sess.run(maintain_average)# decay=min(0.99,(1+10000)/(10+10000))=0.99, v1=0.99*2+0.01*4=2.01# decay=min(0.99,(1+10000)/(10+10000))=0.99, v1=0.99*4.5+0.01*10=4.555print sess.run([v1, ema.average(v1)])sess.run(maintain_average)print sess.run([v1, ema.average(v1)])輸出:
[array([ 1., 2., 0.], dtype=float32), array([ 1., 2., 0.], dtype=float32)] [array([ 1., 2., 5.], dtype=float32), array([ 1. , 2. , 4.5], dtype=float32)] [array([ 1., 3., 10.], dtype=float32), array([ 1. , 2.00999999, 4.55499983], dtype=float32)] [array([ 1., 3., 10.], dtype=float32), array([ 1. , 2.01990008, 4.60944986], dtype=float32)]參考:
wikipedia:Moving average
TensorFlow-API-ExponentialMovingAverage
A Complete Tutorial on Time Series Modeling in R
《Tensorflow實(shí)戰(zhàn)Google深度學(xué)習(xí)框架》4.4.3滑動平均模型.
總結(jié)
以上是生活随笔為你收集整理的TensorFlow学习--指数移动平均/tf.train.ExponentialMovingAverage的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 云计算入门:FusionAccess桌面
- 下一篇: 消防应急疏散照明在体育馆的应用