1

在 Tensorflow 中,计算图可以依赖于随机变量。在随机变量代表分布中的单个样本的情况下,可能会感兴趣的是用 N 个单独的样本计算数量,例如进行方差较小的样本估计。

有没有办法用不同的随机样本运行相同的图,尽可能多地重用中间计算?

可能的解决方案:

  • 在循环内创建图形和随机变量。缺点:制作不依赖于随机变量的数量的冗余副本。
  • 使用批次维度扩展随机变量。缺点:有点麻烦。似乎 TF 应该能够自动执行某些操作。
  • 也许图形编辑器(在 .contrib 中)可用于制作具有不同噪声的副本,但我不确定这是否比循环更好。
  • 理想情况下,应该只有一个操作来重新评估随机变量或将依赖项标记为未实现,从而强制它对新数量进行采样。但这很可能是不可能的。

循环策略示例:

import tensorflow as tf
x = tf.Variable(1.)
g = []
f = lambda x: tf.identity(x) #op not depending on noise 
for i in range(10):
    a = tf.random_normal(()) # random variable
    y = tf.pow(f(x)+a*x, 2) # quantity to be repeated for diff samples
    g += [y]

#here, the mean is the quantity of interest
m = tf.reduce_mean(g)

#the variance demonstrates that the samples are different
v = tf.reduce_mean(tf.map_fn(lambda x: tf.square(x-m), tf.stack(g)))

with tf.Session() as sess:
    sess.run(tf.global_variables_initializer())
    print(sess.run(g))
    print('variance: {}'.format(sess.run(v)))

iff(x)是一个昂贵的函数,我只能假设循环会进行大量冗余计算。

4

0 回答 0