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

posted @ 2018-01-13 16:07  彼岸花杀是条狗  阅读(2950)  评论(0编辑  收藏  举报