我试图找到相对于均值,协方差的关节分布梯度。我的意思是
means = [tf.contrib.distributions.MultivariateNormalFullCovariance(name = 'mu_%d' % i, loc=np.zeros(2), covariance_matrix=0.1 * np.eye(2))
for i in range(2)]
现在,如果找到联合分布,则需要执行计算其梯度的任务。要使用tf.gradients()
,所有内容都必须为张量形式。因此,我尝试使用theta_ = tf.convert_to_tensor(means)
将均值转换为张量,但抛出错误提示我
TypeError:无法将类型的对象转换为Tensor。内容:[{
<tf.distributions.MultivariateNormalFullCovariance 'mu_0' batch_shape=() event_shape=(2,) dtype=float64>, <tf.distributions.MultivariateNormalFullCovariance 'mu_1' batch_shape=() event_shape=(2,) dtype=float64>
]。考虑将元素强制转换为受支持的类型。
还有其他方法可以计算均值,协方差的分布梯度吗?
答案 0 :(得分:0)
tf.distribution是您无法采用渐变的对象。相反,您需要调用其方法之一。
例如:
dist = tf.contrib.distributions.MultivariateNormalFullCovariance(...)
mean = dist.mean()
tf.gradients(mean, some_param)
通常,您将使用.mean
,.covariance
甚至是.log_prob
方法来创建这些张量,并对它们进行渐变。