Если вы установите более низкую матрицу tri angular, подобную этой, и затем нормализуете строки, чтобы они стали единичными, вы, похоже, всегда получаете nans в распределении LKJ. Что-то не так с этим?
In [335]: d = 50
In [336]: B = tfp.math.fill_triangular(np.random.randn(int(d * (d + 1) / 2)))
In [337]: s = tf.math.sqrt(tf.reduce_sum(B ** 2, axis=1))
...: B = B / s[:, None]
In [339]: dist.log_prob(B)
Out[339]: <tf.Tensor: shape=(), dtype=float64, numpy=nan>
In [341]: B @ tf.transpose(B)
Out[341]:
<tf.Tensor: shape=(50, 50), dtype=float64, numpy=
array([[ 1. , -0.73015288, 0.73013938, ..., -0.13672552, 0.26941728, 0.02689988],
[-0.73015288, 1. , -0.91766958, ..., -0.00929982, -0.17288787, -0.10765312],
[ 0.73013938, -0.91766958, 1. , ..., -0.05525723, 0.14590141, 0.08019668],
...,
[-0.13672552, -0.00929982, -0.05525723, ..., 1. , -0.31836374, 0.09192339],
[ 0.26941728, -0.17288787, 0.14590141, ..., -0.31836374, 1. , 0.10353604],
[ 0.02689988, -0.10765312, 0.08019668, ..., 0.09192339, 0.10353604, 1. ]])>
ОБНОВЛЕНИЕ:
Просто используйте dist.sample (1) [0] if в качестве инициализатора, если вы просто пытаетесь выбрать начальные веса. Есть некоторые числовые проблемы в более высоких измерениях, если вы не будете осторожны при создании корреляционных матриц для dist.