tfboys——tensorflow模塊學習(二)


tf.contrib模塊

tf.contrib 模塊是一個比較復雜的模塊。

contrib細節:

tf.contrib.bayesflow.entropy  香農信息論

tf.contrib.bayesflow.monte_carlo Monte Carlo integration 蒙特卡洛積分

tf.contrib.bayesflow.stochastic_graph Stochastic Computation Graphs 隨機計算圖

tf.contrib.bayesflow.stochastic_tensor 隨機張量

tf.contrib.bayesflow.variational_inference 變分推斷

tf.contrib.crf CRF layer 條件隨機場(conditional random field)

tf.contrib.ffmpeg  ffmeg編解碼音頻

tf.contrib.framework 參數范圍、變量、檢查點

tf.contrib.graph_editor 運行時修改計算圖

tf.contrib.integrate.odeint ode解常微分方程

tf.contrib.layers   構建層、正則化、初始化、優化、Feature columns(數據與模型之間進行映射)

tf.contrib.learn    高級學習庫

tf.contrib.linalg   線性代數(矩陣)

tf.contrib.losses 損失函數

tf.contrib.metrics度量標准

tf.contrib.distributions概率分布

tf.contrib.rnn     rnn相關

tf.contrib.seq2seq 基於rnn,實現編解碼器

tf.contrib.staging.StagingArea 添加管線

tf.contrib.training  mini batch和組(bucket)

tf.contrib.util

tf.contrib.nn Sampling 裁剪 信息熵


tf.contrib.bayesflow.entropy.elbo_ratio(估計ELBO和KL散度中出現的比值)

elbo_ratio ( 
    log_p , 
    q , 
    z = None , 
    n = None , 
    seed = None , 
    form = None , 
    name = 'elbo_ratio' 
)

定義在 tensorflow/contrib/bayesflow/python/ops/entropy_impl.py

參見指南:貝葉斯熵(contrib)>操作

估計 ELBO 和 KL 散度中出現的比值

隨着 p(z) := exp{log_p(z)} ,該操作返回一個近似值:

E_q [ Log [ p ( Z ) / q ( Z )]  ]

術語 E_q[ Log[p(Z)] ] 總是被計算為樣本平均值。術語 E_q[ Log[q(Z)] ] 可以用樣本計算,或者定義了 q.entropy() 的精確公式,可以使用精確的公式計算。這是由 kwarg 形式控制的。

該對數比出現在不同的上下文中:

KL[q || p]

如果 log_p(z) = Log[p(z)] 分配 p,該操作近似計算負的 Kullback-Leibler 散度。

elbo_ratio ( log_p , q , n = 100 ) =  - 1  * KL [ q | | p ] , 
KL [ q | | p ]  = E [ Log [ q ( Z )]  - Log [ p ( Z )]  ]

請注意,如果 p 是一個 Distribution,那么 distributions.kl_divergence(q, p) 可能會被確定並作為確切可用的結果。

ELBO

如果 log_p (z) = log [p (z, x)] 是一個分布 p 的日志連接, 這是證據下限 (ELBO):

ELBO 〜= E[Log[ p(Z,X)] - Log[q(Z)]] 
       = Log[p(X)]-KL[q||p] 
      <= Log [p(x)]

用戶提供 Tensor 樣品 z ,或樣品數量來繪制 n。

ARGS:
  • log_p:從可調用映射樣本 q 到 Tensors 具有形狀 broadcastable 到 q.batch_shape。例如,log_p “就像” q.log_prob 一樣工作。
  • q:tf.contrib.distributions.Distribution。
  • z:Tensor 樣品來自q,由 q.sample(n) 某些 n 生成。
  • n:整數 Tensor。如果 z 不提供則生成樣本數。
  • seed:Python整數來生成隨機數生成器。
  • form:ELBOForms.analytic_entropy(使用熵的公式q)或 ELBOForms.sample(熵的樣本估計),或 ELBOForms.default(嘗試分析熵,樣本回退)。默認值為ELBOForms.default。
  • name:給這個操作起的名字。
返回:

標量張量持有樣本平均 KL 散度。形狀是 q 的批次形狀, dtype 與 q 相同。

舉:
  • ValueError:如果form沒有被這個功能處理。

關於KL散度和ELBO


tf.contrib.bayesflow.entropy.entropy_shannon  計算Monte Carlo或Shannon熵的確定性

entropy_shannon (  
    p ,  
    z = None ,  
    n = None ,  
    seed = None ,  
    form = None ,  
    name = 'entropy_shannon' 
)

定義在:tensorflow/contrib/bayesflow/python/ops/entropy_impl.py

參見指南:貝葉斯熵(contrib)>操作

蒙特卡羅或香農熵的確定性計算。

根據 kwarg form,該操作返回分布的分析熵 p 或采樣熵:

- n ^ { - 1 } sum_ {i = 1 }^n p.log_prob( z_i ), where z_i 〜 p ,  
    \approx- E_p [Log[ p(Z)]] 
    =Entropy[p]

用戶提供的任何一個樣本 z 張量, 或一定數量的樣本來繪制 n。

ARGS:
  • p: tf.contrib.distributions.Distribution
  • z:Tensor 樣品來自 p,由 p.sample(n) 某些產生 n。
  • n:整數 Tensor。如果未提供 z, 則生成的樣本數。
  • seed:Python 整數用來尋找隨機數生成器。
  • form:要么 ELBOForms. analytic_entropy (使用公式熵的 q) 或 ELBOForms. sample (熵的抽樣估計),或 ELBOForms. default (嘗試分析熵, 在樣本上返回)。默認值為 ELBOForms.default。
  • name:給該操作的一個名字。
返回:

與 p 相同的 dtype 的張量,並且形狀等於 p. batch_shape。

舉:
  • ValueError:如果 form 沒有由這個函數處理。
  • ValueError:如果 form 是 ELBOForms. analytic_entropy 和 n 被提供。

 

 

tf.contrib.bayesflow.entropy.renyi_alpha

renyi_ratio (  
    log_p ,  
    q ,  
    alpha ,  
    z = None ,  
    n = None ,  
    seed = None ,  
    name = 'renyi_ratio' 
)

定義在 tensorflow/contrib/bayesflow/python/ops/entropy_impl.py

參見指南:貝葉斯熵(contrib)>操作

使用 Monte Carlo 估計出現在 Renyi 分歧中的比率。

這可以用於計算 Renyi(alpha)分歧,或者基於 Renyi 分歧的日志痕跡近似值。

定義

用 z_i 獨立同分布樣品 q,和 exp{log_p(z)} = p(z),這操作返回查看(偏向有限個 n)估計:

(1 -alpha)^ { - 1 } Log[ n^{- 1} sum_ {i = 1 } ^ n ( p(z_i)/q(z_i))^ {1-alpha}  
\approx(1-alpha)^ {- 1 } Log[ E_q [( p(Z)/q(Z))^ { 1 - alpha }]]

該比例出現在不同的上下文中:

Renyi 分歧

如果 log_p(z) = Log[p(z)] 是分配的日志概率,並且 alpha > 0,alpha != 1 ,那么該操作近似於 -1 倍仁義分歧:

# 選擇合理的高 n 來限制偏移,見下文 
renyi_ratio ( log_p , q ,alpha,n = 100 )  
                \approx - 1  * D_alpha [ q || p ] ,where
D_alpha [ q || p ]  :=  (1 - alpha)^ {-1} Log E_q [(p(Z)/q(Z))^ { 1 - alpha} ] 

Renyi(或 “alpha”)的分歧是非負數,並且當且僅當 q = p 時它等於零;alpha 的各種限制導致不同的特殊情況:

alpha D_alpha[q||p] 
-----      --------------- 
-- > 0     Log[int_ {q >0} p(Z)dz] 
= 0.5 ,   -2 Log[ 1- Hel^ 2[q||p]] ,(\propto squared Hellinger distance)
-- > 1     KL[q||p] 
= 2        Log[1 + chi ^ 2[q||p]] ,(\propto squared Chi - 2 divergence )
-- > infty Log[max_z{q(z)/ p(z)}] ,(min description length principle)。
對數證據近似

如果 log_p (z) = log [p (z, x)] 是聯合分布 p 的日志,這是在變分推理中常見的 ELBO 的一種替代方法。

L_alpha( q ,p )= Log[p(X)] - D_alpha[q||p]

如果 q 和 p 有同樣的支持,並且 0 < a <= b < 1,則可以顯示出 ELBO <= D_b <= D_a <= Log[p(x)]。因此,該操作允許 ELBO 和真實證據之間進行平滑的插值。

穩定性說明

請注意,當 1 - alpha 值不小的時候,比例 (p(z) / q(z))^{1 - alpha} 會受到下溢/溢出問題的影響。因此,它在集中后在對數空間中進行評估。盡管如此,infinite / NaN 的結果還是會出現。為此,人們可能希望 alpha 逐漸縮小,見操作 renyi_alpha;使用 float64 也將有所幫助。

有限樣本量的偏差

由於對數的非線性,對於隨機變量{X_1,...,X_n},有 E[ Log[sum_{i=1}^n X_i] ] != Log[ E[sum_{i=1}^n X_i] ]。結果,這個估計是有限偏移的 n。對於 alpha < 1 ,它是不減少的 n(預期中)。例如,如果 n = 1,此估計器產生與 elbo_ratio 相同的結果,並且當 n 增加的時候,估計的預期值也增加。

呼叫簽名

用戶提供 Tensor 樣品 z 或 樣品數量來繪制 n。

ARGS:
  • log_p:從可調用映射樣本 q 到具有形狀 broadcastable 的 Tensors 再到 q.batch_shape。例如,log_p “就像” q.log_prob 一樣工作。
  • q:tf.contrib.distributions.Distribution;log_p 和 q 應在同一組中得到支持。
  • alpha:張量與形狀 q. batch_shape 和的值不等於1。
  • z:來自 p 的樣品張量,由 p.sample 從一些 n 生成。
  • n:整數張量;未提供 z 時要使用的樣本數。請注意,這可能是高度偏移的小 n, 見字符串。
  • seed:隨機數生成器的 Python 整數。
  • name:給該操作提供一個名字。
返回:
  • renyi_result:樣本的縮放對數平均值。形狀張量等於 q 的批次形狀,並且 dtype= q.dtype。

renyi entropy(瑞麗熵)


tf.contrib.bayesflow.entropy.renyi_ratio   計算Renyi分歧

renyi_ratio (  
    log_p ,  
    q ,  
    alpha ,  
    z = None ,  
    n = None ,  
    seed = None ,  
    name = 'renyi_ratio' 
)

定義在 tensorflow/contrib/bayesflow/python/ops/entropy_impl.py

參見指南:貝葉斯熵(contrib)>操作

使用 Monte Carlo 估計出現在 Renyi 分歧中的比率。

這可以用於計算 Renyi(alpha)分歧,或者基於 Renyi 分歧的日志痕跡近似值。

定義

用 z_i 獨立同分布樣品 q,和 exp{log_p(z)} = p(z),這操作返回查看(偏向有限個 n)估計:

(1 -alpha)^ { - 1 } Log[ n^{- 1} sum_ {i = 1 } ^ n ( p(z_i)/q(z_i))^ {1-alpha}  
\approx(1-alpha)^ {- 1 } Log[ E_q [( p(Z)/q(Z))^ { 1 - alpha }]]

該比例出現在不同的上下文中:

Renyi 分歧

如果 log_p(z) = Log[p(z)] 是分配的日志概率,並且 alpha > 0,alpha != 1 ,那么該操作近似於 -1 倍仁義分歧:

# 選擇合理的高 n 來限制偏移,見下文 
renyi_ratio ( log_p , q ,alpha,n = 100 )  
                \approx - 1  * D_alpha [ q || p ] ,where
D_alpha [ q || p ]  :=  (1 - alpha)^ {-1} Log E_q [(p(Z)/q(Z))^ { 1 - alpha} ] 

Renyi(或 “alpha”)的分歧是非負數,並且當且僅當 q = p 時它等於零;alpha 的各種限制導致不同的特殊情況:

alpha D_alpha[q||p] 
-----      --------------- 
-- > 0     Log[int_ {q >0} p(Z)dz] 
= 0.5 ,   -2 Log[ 1- Hel^ 2[q||p]] ,(\propto squared Hellinger distance)
-- > 1     KL[q||p] 
= 2        Log[1 + chi ^ 2[q||p]] ,(\propto squared Chi - 2 divergence )
-- > infty Log[max_z{q(z)/ p(z)}] ,(min description length principle)。
對數證據近似

如果 log_p (z) = log [p (z, x)] 是聯合分布 p 的日志,這是在變分推理中常見的 ELBO 的一種替代方法。

L_alpha( q ,p )= Log[p(X)] - D_alpha[q||p]

如果 q 和 p 有同樣的支持,並且 0 < a <= b < 1,則可以顯示出 ELBO <= D_b <= D_a <= Log[p(x)]。因此,該操作允許 ELBO 和真實證據之間進行平滑的插值。

穩定性說明

請注意,當 1 - alpha 值不小的時候,比例 (p(z) / q(z))^{1 - alpha} 會受到下溢/溢出問題的影響。因此,它在集中后在對數空間中進行評估。盡管如此,infinite / NaN 的結果還是會出現。為此,人們可能希望 alpha 逐漸縮小,見操作 renyi_alpha;使用 float64 也將有所幫助。

有限樣本量的偏差

由於對數的非線性,對於隨機變量{X_1,...,X_n},有 E[ Log[sum_{i=1}^n X_i] ] != Log[ E[sum_{i=1}^n X_i] ]。結果,這個估計是有限偏移的 n。對於 alpha < 1 ,它是不減少的 n(預期中)。例如,如果 n = 1,此估計器產生與 elbo_ratio 相同的結果,並且當 n 增加的時候,估計的預期值也增加。

呼叫簽名

用戶提供 Tensor 樣品 z 或 樣品數量來繪制 n。

ARGS:
  • log_p:從可調用映射樣本 q 到具有形狀 broadcastable 的 Tensors 再到 q.batch_shape。例如,log_p “就像” q.log_prob 一樣工作。
  • q:tf.contrib.distributions.Distribution;log_p 和 q 應在同一組中得到支持。
  • alpha:張量與形狀 q. batch_shape 和的值不等於1。
  • z:來自 p 的樣品張量,由 p.sample 從一些 n 生成。
  • n:整數張量;未提供 z 時要使用的樣本數。請注意,這可能是高度偏移的小 n, 見字符串。
  • seed:隨機數生成器的 Python 整數。
  • name:給該操作提供一個名字。
返回:
  • renyi_result:樣本的縮放對數平均值。形狀張量等於 q 的批次形狀,並且 dtype= q.dtype。

tf.contrib.bayesflow.monte_carlo.expectation

expectation( 
    f , 
    p , 
    z = none, 
    n = none, 
    seed = none, 
    name = 'expectation' 
)

定義在tensorflow/contrib/bayesflow/python/ops/monte_carlo_impl.py

參見指南:貝葉斯蒙特卡羅(contrib)>行動

蒙特卡羅估計的期望:E_p[f(Z)] 與樣本具有均值。

該操作返回:

n ^ { - 1 } sum_ {i= 1 } ^ n f( z_i ),where z_i 〜 p
\approx E_p[f(Z)]
ARGS:
  • f:從 p 到張量的可調用映射樣本。
  • p:tf.contrib.distributions.Distribution。
  • z:p 樣品的張量,由 p.sample 為一些 n 生成。
  • n:整數張量。如果未提供z生成的樣本數。
  • seed:Python整數來尋找隨機數程序。
  • name:為該操作提供一個名字。
返回:

與一個 Tensor 具有相同 dtype 的 p,舉例:

N_samples =  10000
distribute = tf.contrib.distributions
dist =distributions.Uniform([ 0.0,0.0 ] ,[1.0,2.0]) 
elementwise_mean =  lambda x :x
mean_sum =  lambda x : tf.reduce_sum(x ,1)
estimate_elementwise_mean_tf = monte_carlo.expectation( elementwise_mean , 
                                                       dist , 
                                                       n = N_samples ) 
estimate_mean_sum_tf = monte_carlo.expectation( mean_sum , 
                                               dist , 
                                               n = N_samples )
with tf.Session()as sess : 
  estimate_elementwise_mean , estimate_mean_sum =  ( 
     sess.run([estimate_elementwise_mean_tf ,estimate_mean_sum_tf]))
print estimate_elementwise_mean
 >>> np.array([0.50018013  1.00097895 ] ,dtype=np. float32 )
print estimate_mean_sum
>>>  1.49571

tf.contrib.bayesflow.monte_carlo.expectation_importance_sampler  重要性抽樣估計

expectation_importance_sampler ( 
    f , 
    log_p , 
    sampling_dist_q , 
    z = None , 
    n = None , 
    seed = None , 
    name = 'expectation_importance_sampler' 
)

定義在tensorflow/contrib/bayesflow/python/ops/monte_carlo_impl.py

參見指南:貝葉斯蒙特卡羅(contrib)>行動

蒙特卡羅估計 E_p[f(Z)] = E_q[f(Z) p(Z) / q(Z)]。

隨着 p(z) := exp{log_p(z)},這Op返回

n ^ { - 1 } sum_ {i= 1 } ^ n[ F ( z_i ) p ( z_i ) / q ( z_i ) ] ,z_i 〜 q , 
\approx E_q [ F (Z) p (Z) / q (Z) ] 
=        E_p [ f ( Z )]

這個積分是通過最大減法在對數空間中完成的,以更好地處理 f(z) p(z) / q(z)可能承受的極端值。

如果 f >= 0,將 expectation_importance_sampler_logspace 應用的結果取冪,則效率高達2倍 Log[f]。

用戶提供的任何一個樣本 z 張量, 或樣本數繪制 n

ARGS:
  • f:從可調用映射樣本 sampling_dist_q 到具有形狀 broadcastable 的 Tensors 到 q.batch_shape。例如,f “就像” q.log_prob 一樣工作。
  • log_p:從可調用映射樣本 sampling_dist_q 到具有形狀 broadcastable 的 Tensors 到 q.batch_shape。例如,log_p “就像” sampling_dist_q.log_prob 一樣工作。
  • sampling_dist_q:抽樣分布。tf.contrib.distributions.Distribution。log_p 和 q 應在同一組中得到支持。
  • z:p 樣品的張量,由 p.sample 為一些 n 生成。
  • n:整數張量。如果未提供z生成的樣本數。
  • seed:Python整數來尋找隨機數程序。
  • name:為該操作提供一個名字。
返回:

重要性抽樣估計。形狀張量等於 q 的批次形狀,並且 dtype= q.dtype。

 


tf.contrib.bayesflow.monte_carlo.expectation_importance_sampler_logspace  對數空間的重要性抽樣估計

expectation_importance_sampler_logspace (
log_f ,
log_p ,
sampling_dist_q ,
z = None ,
n = None ,
seed = None ,
name = 'expectation_importance_sampler_logspace'

定義在tensorflow/contrib/bayesflow/python/ops/monte_carlo_impl.py

參見指南:貝葉斯蒙特卡羅(contrib)>行動

在對數空間中具有正函數的重要性抽樣。

隨着 p(z) := exp{log_p(z)},而且 f(z) = exp{log_f(z)},該操作返回:

Log[ n ^ { - 1 } sum_ {i = 1 } ^ n [ F( z_i ) p( z_i )/q(z_i)]] ,z_i 〜 q ,
\approx Log[ E_q [ F ( Z ) p (Z ) / q ( Z ) ] ]
= Log[ E_p [ f ( Z )] ]

這個積分是通過最大減法在對數空間中完成的,以更好地處理 f(z) p(z) / q(z) 可能承受的極端值。

和 expectation_importance_sampler 相反,該操作將返回對數空間中的值。

用戶提供的任何一個樣本 z 張量, 或樣本數繪制 n。

ARGS:
  • log_f:從可調用映射樣本 sampling_dist_q 到具有形狀 broadcastable 的 Tensors 到 q.batch_shape。例如,log_f “就像”  sampling_dist_q.log_prob一樣工作。
  • log_p:從可調用映射樣本 sampling_dist_q 到具有形狀 broadcastable 的 Tensors 到 q.batch_shape。例如,log_p “就像” q.log_prob 一樣工作。
  • sampling_dist_q:抽樣分布。tf.contrib.distributions.Distribution。log_p 和 q 應在同一組中得到支持。
  • z:p 樣品的張量,由 p.sample 為一些 n 生成。
  • n:整數張量。如果未提供z生成的樣本數。
  • seed:Python整數來尋找隨機數程序。
  • name:為該操作提供一個名字。
返回:

重要性抽樣估計的對數。形狀張量等於 q 的批次形狀, 並且 dtype = q. dtype。


tf.contrib.bayesflow.stochastic_graph.surrogate_loss  隨機圖的代理損失

surrogate_loss (  
    sample_losses ,  
    stochastic_tensors = None ,  
    name = 'SurrogateLoss' 
)

定義在:tensorflow/contrib/bayesflow/python/ops/stochastic_graph_impl.py

參考指南:BayesFlow隨機圖(contrib)>隨機計算圖形輔助函數

隨機圖的代理損失。

這個函數將調用 loss_fn 在每個 StochasticTensor 上游的 sample_losses,傳遞其影響的損失。

請注意,目前的 surrogate_loss 並不能與在 while_loops 或其他控制結構中實例化的 stochastictenUNK 一起工作。

ARGS:
  • sample_losses:最后損失的列表或元組。每一次損失應在批次 (可能每個樣品) 的例子;那就是, 它應該有1或更大的維度。所有損失應具有相同的形狀。
  • stochastic_tensors:StochasticTensor 用於添加損失條款的列表。如果沒有, 則默認為 sample_losses 中張量的圖上游所有的 StochasticTensors。
  • name:用於准備創建操作的名稱。
返回:

張量損失,是 sample_losses 和 StochasticTensors 返回的 loss_fns 的總和。

注意:
  • TypeError:如果 sample_losses 不是列表或元組,並且它的元素不是張量。
  • ValueError:如果 sample_losses 的任何損失都沒有維度1或更大。

tf.contrib.bayesflow.stochastic_tensor.BaseStochasticTensor  發出隨機值的張量

tf.contrib.bayesflow.stochastic_tensor.BaseStochasticTensor 類

定義在:tensorflow/contrib/bayesflow/python/ops/stochastic_tensor_impl.py

參見指南:BayesFlow隨機張量(contrib)>隨機張量類

用於發出隨機值的張量對象的基類。

屬性

  • dtype
  • graph
  • name

方法

  • __init__
    __init__ ()
  • loss
    loss( sample_loss )

返回添加到代理損失中的術語。

這個方法被 surrogate_loss 調用。輸入 sample_loss 應該已經應用了 stop_gradient。這是因為 surrogate_loss 通常提供了一個 Monte Carlo 樣例術語 differentiable_surrogate * sample_loss,其中 sample_loss 被認為是常量,因為它的目的是梯度輸入。

ARGS:
  • sample_loss:張量,在這個 StochasticTensor 的下游樣本損失。
返回:

要么返回 None ,要么返回 Tensor。

value
value( name = None )

 







參考文獻:https://www.w3cschool.cn/tensorflow_python/tensorflow_python-1i7f2c8z.html


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM