Я пытаюсь обобщить пример, приведенный в Как использовать распределение MultiVariateNormal в последней версии Tensorflow для нормального распределения в 2D, но с более чем одним пакетом. Когда я запускаю следующее:
from tensorflow_probability import distributions as tfd
import tensorflow as tf
tf.compat.v1.enable_eager_execution()
mu = [[1, 2],
[-1,-2]]
cov = [[1, 3./5],
[3./5, 2]]
cov = [cov, cov] # for demonstration purpose, use same cov for both batches
mvn = tfd.MultivariateNormalFullCovariance(
loc=mu,
covariance_matrix=cov)
# generate the pdf
X, Y = tf.meshgrid(tf.range(-3, 3, 0.1), tf.range(-3, 3, 0.1))
idx = tf.concat([tf.reshape(X, [-1, 1]), tf.reshape(Y,[-1,1])], axis =1)
prob = tf.reshape(mvn.prob(idx), tf.shape(X))
Я получаю сообщение об ошибке «Несовместимые формы»:
tensorflow.python.framework.errors_impl.InvalidArgumentError: Incompatible shapes: [3600,2] vs. [2,2] [Op:Sub] name: MultivariateNormalFullCovariance/log_prob/affine_linear_operator/inverse/sub/
Мое понимание документации (https://www.tensorflow.org/api_docs/python/tf/contrib/distributions/MultivariateNormalFullCovariance) заключается в том, что для вычисления PDF требуется тензор [n_observation, n_dimensions] (как в этом примере: idx.shape
= TensorShape([Dimension(3600), Dimension(2)])
). Я ошибся в математике?