作为项目的一部分,我在使用 tensorflow_probability 的正态分布梯度时遇到了问题。为此,我创建了一个正态分布,从中抽取了一个样本。然后将这个样本的 log_prob 输入优化器以更新网络的权重。
如果我得到某个常数的 log_prob,我总是得到非零梯度。不幸的是,我没有在教程或类似的帮助来源中找到任何相关帮助。
def get_log_prob(mu, std)
extracted_location = tf.squeeze(extracted_location)
normal = tfd.Normal(mu, scale=std)
samples = normal.sample(sample_shape=(1))
log_prob = normal.log_prob(samples)
return log_prob
const = tf.constant([0.1], dtype=np.float32)
log_prob = get_log_prob(const, 0.01)
grads = tf.gradients(log_prob, const)
with tf.Session() as sess:
gradients = sess.run([grads])
print('gradients', gradients)
输出:梯度 [array([0.], dtype=float32)]
如果在计算样本的梯度时,我希望得到非零梯度。相反,输出始终为“0”。