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没有被这个功能处理。
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