我试图用张量流概率层来创建多元正态分布的混合体。当我使用IndependentNormal层时,它工作得很好,但是当我使用多变量normaltil层时,我遇到了事件形状的问题。我把这些层和MixtureSameFamily层结合起来。以下代码可以很好地说明我的问题,并且可以在google colab中使用:
import tensorflow as tf
import tensorflow_probability as tfp
import tensorflow.keras as keras
tfpl = tfp.layers
print(tf.__version__)
# >> '1.15.0-rc3'
# but I get the same result with extra warnings in 1.14.0
print(tfp.__version__)
# >> '0.7.0'
print(tfpl.MultivariateNormalTriL(100)(
keras.layers.Input(shape=tfpl.MultivariateNormalTriL.params_size(100))
))
# >> tfp.distributions.MultivariateNormalTriL("multivariate_normal_tri_l_4/MultivariateNormalTriL/MultivariateNormalTriL/",
# batch_shape=[?], event_shape=[100], dtype=float32)
print(tfpl.IndependentNormal((100,))(
keras.layers.Input(shape=(tfpl.IndependentNormal.params_size(100),))
))
# >> tfp.distributions.Independent("Independentindependent_normal_2/IndependentNormal/Normal/",
# batch_shape=[?], event_shape=[100], dtype=float32)
print(tfpl.MixtureSameFamily(16, tfpl.MultivariateNormalTriL(100))(
keras.layers.Input(shape=(16*tfpl.MultivariateNormalTriL.params_size(100),))
))
# >> tfp.distributions.MixtureSameFamily("mixture_same_family_2/MixtureSameFamily/MixtureSameFamily/",
# batch_shape=[?], event_shape=[?], dtype=float32)
print(tfpl.MixtureSameFamily(16, tfpl.IndependentNormal((100,)))(
keras.layers.Input(shape=(16*tfpl.IndependentNormal.params_size(100,),))
))
# >> tfp.distributions.MixtureSameFamily("mixture_same_family_3/MixtureSameFamily/MixtureSameFamily/",
# batch_shape=[?], event_shape=[100], dtype=float32)
尽管多变量极大值和独立正态函数具有相同的批处理形状和事件形状,但将它们与MixtureSameFamily相结合会产生不同的事件形状。在
所以我的问题是:为什么它们会导致不同的事件形状,我如何得到多元正态分布的混合层,具有不同的(不一定是对角的)协方差矩阵和事件形状=[100]?在
编辑:tensorflow probability版本0.8也是如此
我误解了MixtureSameFamily层的工作原理,所以在阅读了所有相关层的代码之后,我想出了以下解决方案:
不过,我仍在进行全面测试。在
相关问题 更多 >
编程相关推荐