是否有可能从张量流中获取取决于随机变量的张量?我需要得到一个近似的样本分布,以便在损失函数中进行优化 . 具体来说,在下面的示例中,我希望能够获得Y_output的样本,以便能够计算输出分布的均值和方差,并在损失函数中使用这些参数 .
def sample_weight(mean, phi, seed=1):
P_epsilon = tf.distributions.Normal(loc=0., scale=1.0)
epsilon_s = P_epsilon.sample([1])
s = tf.multiply(epsilon_s, tf.log(1.0+tf.exp(phi)))
weight_sample = mean + s
return weight_sample
X = tf.placeholder(tf.float32, shape=[None, 1], name="X")
Y_labels = tf.placeholder(tf.float32, shape=[None, 1], name="Y_labels")
sw0 = sample_weight(u0,p0)
sw1 = sample_weight(u1,p1)
Y_output = sw0 + tf.multiply(sw1,X)
loss = tf.losses.mean_squared_error(labels=Y_labels, predictions=Y_output)
train_op = tf.train.AdamOptimizer(0.5e-1).minimize(loss)
init_op = tf.global_variables_initializer()
losses = []
predictions = []
Fx = lambda x: 0.5*x + 5.0
xrnge = 50
xs, ys = build_toy_data(funcx=Fx, stdev=2.0, num=xrnge)
with tf.Session() as sess:
sess.run(init_op)
iterations=1000
for i in range(iterations):
stat = sess.run(loss, feed_dict={X: xs, Y_labels: ys})
1 回答
不确定这是否回答了你的问题,但是:当你有一个采样
Op
的下游Tensor
时(例如,通过调用P_epsilon.sample([1])
创建Op
,任何时候你在下游Tensor
上调用sess.run
,样本操作将重新运行,并产生一个新的随机值 . 例如:如果你想要一堆
y
的样本,你可以做到我们在
tensorflow_probability
也有一些很酷的工具来做你在这里开车的那种东西 . 即Bijector
API,有点简单,trainable_distributions
API .(另一个小问题:我建议使用
tf.nn.softplus
,或者至少tf.log1p(tf.exp(x))
而不是tf.log(1.0 + tf.exp(x))
. 后者由于浮点不精确而具有较差的数值属性,前者被优化用于) .希望这是一些帮助!