I am building a TF CNN model that takes a picture as input and has 3 outputs (multitask learning). On one of the output layers, I would like to output a distribution object,
tfp.distributions.Normal, from which I can take the
sttdv to figure out confidence intervals as in this example Case2.
The problem is that my model does not output a
tensorflow_probability.python.util.deferred_tensor.Normal type of object as in the model. Therefore, in the output I cannot call
.sttdv(). Instead it only outputs a numpy value. What am I doing wrong? How can I make my model output a distribution type object from which I can call
base_model ... output1 = Dense(16, activation='relu')(base_model) output1 = Dense(8, activation='relu')(output1) output1 = Dense(1, activation='sigmoid')(output1) ... output2 = Dense(32, activation='relu')(base_model) output2 = Dense(16, activation='relu')(output2) output2 = Dense(5, activation='softmax')(output2) ... dist_output3 = Dense(128, activation='relu')(base_model) dist_output3 = Dense(128, activation='relu')(output3) dist_output3 = Dense(2)(output3) dist_output3 = tfp.layers.DistributionLambda(lambda t: tfd.Normal(loc=t[..., :1], scale=1e-3 + tf.math.softplus(0.05 *t[...,1:])))(dist_output3) model = Model(inputs=base_model.layers.input, outputs=[output1, output2, dist_output3]) negloglik = lambda y, p_y: - p_y.log_prob(y) model.compile(optimizer = 'adam', loss =['binary_crossentropy', 'categorical_crossentropy', negloglik], metrics=['accuracy', 'mse']) history = model.fit_generator( train_generator, validation_data=validate_generator, epochs=100, ) ... predictions = model(test_generator) len(predictions) >>> 3 predictions >>> array([0.08734298723]) predictions >>> array([0.26107603, 0.1662454 , 0.24182138, 0.09926344, 0.23159383]) predictions >>> array([0.9827457034]) <-- I am expecting the output of this to be something like array([0.9827457034, 0.246534654]) as in array([<mean>, <std>])