将分布放入张量

时间:2018-07-06 21:45:09

标签: python tensorflow

我试图找到相对于均值,协方差的关节分布梯度。我的意思是

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>]。考虑将元素强制转换为受支持的类型。

还有其他方法可以计算均值,协方差的分布梯度吗?

1 个答案:

答案 0 :(得分:0)

tf.distribution是您无法采用渐变的对象。相反,您需要调用其方法之一。

例如:

dist = tf.contrib.distributions.MultivariateNormalFullCovariance(...)
mean = dist.mean()

tf.gradients(mean, some_param)

通常,您将使用.mean.covariance甚至是.log_prob方法来创建这些张量,并对它们进行渐变。