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沒有被這個功能處理。
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。
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