Def*_*ess 5 python keras tensorflow tensorflow-probability
我有一个简单的模型,当前输出一个数值,我已对其进行了调整,改为使用 TFP(平均值 + 标准差)输出分布,这样我就可以了解模型对预测的置信度。
model = tf.keras.Sequential([
tf.keras.layers.Dense(10, input_shape=[len(df.columns),], activation='relu'), # Should only be one input, so [1,]
tf.keras.layers.Dense(10, activation='relu'),
tf.keras.layers.Dense(2 * len(target.columns)), # there are 2 outputs, so we want a mean + standard deviation for EACH of the outputs
tfp.layers.DistributionLambda(
lambda t: tfd.Normal(loc=t[..., :1],
scale=1e-3 + tf.math.softplus(0.05 * t[...,1:]))
)
])
Run Code Online (Sandbox Code Playgroud)
当前 2 个 Dense 输出指向输出分布的平均值 + 标准差。
在我的真实数据集中,我尝试根据输入数据预测两个数值。如何使模型输出两个分布?我认为最终的密集层需要 4 个节点(2 个均值和 2 个标准差),但我不确定如何使其与分布 Lambda 一起正常工作。我希望有一个模型可以预测这一点,而不必为每个目标输出训练一个模型。
编辑:我创建了这个合作,让人们更容易地看到我的意思。我稍微简化了这个例子,希望它能更清楚地说明我想要完成的事情:
https://colab.research.google.com/drive/1Wlucked4V0z-Bm_ql8XJnOJL0Gm4EwnE?usp=sharing
查看有关 TFP 中形状的指南:https ://www.tensorflow.org/probability/examples/Understanding_TensorFlow_Distributions_Shapes
IIUC 你需要输出batch_shape = [2] 的分布。这实际上是同一族的两个分布,具有不同的参数。使用这批分布(样本、pdf/log_pdf 评估)完成的计算将被矢量化(并行运行)。