• 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

  • 相关阅读:
    快速排序算法
    HDOJ(1005) Number Sequence
    HDOJ(1004) Let the Balloon Rise
    HDOJ(1003) Max Sum
    HDOJ(1002) A + B Problem II
    HDOJ(1001) Sum Problem
    HDOJ(1000) A + B Problem
    DeepFaceLab小白入门(5):训练换脸模型!
    DeepFaceLab小白入门(4):提取人脸图片!
    DeepFaceLab小白入门(3):软件使用!
  • 原文地址:https://www.cnblogs.com/yifdu25/p/8279623.html
Copyright © 2020-2023  润新知