Я получил два выхода, и только один из них (x1
) является выходом модели. Я также хочу получить 2-й (x2
), но он используется только с потерями.
import tensorflow as tf
def myloss2(sigma):
gtsigma = 0.5
kl = sigma / gtsigma
def temp(gt, pr):
return kl + (gtsigma ** 2 + (pr - gt) ** 2) / (2 * sigma ** 2) - 0.5
return temp
def buildmodel2():
inputs = tf.keras.Input(shape=(10,))
x1 = tf.keras.layers.Dense(1, activation='linear')(inputs)
x2 = tf.keras.layers.Dense(1, activation='sigmoid')(inputs)
model = tf.keras.Model(inputs, x1)
model.compile(loss=myloss2(x2), optimizer=tf.keras.optimizers.Adam())
return model
И теперь я не могу видеть слой x2
в model2.summary()
, поэтому я не могу нарезать свою модель, чтобы получитьего вывод. Да, я могу сделать так:
def myloss(data):
pr, sigma, gt = data
gtsigma = 0.5
kl = sigma / gtsigma
return kl + (gtsigma ** 2 + (pr - gt) ** 2) / (2 * sigma ** 2) - 0.5
def buildmodel():
inputs = tf.keras.Input(shape=(10,))
gt = tf.keras.Input(shape=(10,))
x1 = tf.keras.layers.Dense(1, activation='linear')(inputs)
x2 = tf.keras.layers.Dense(1, activation='sigmoid')(inputs)
out = tf.keras.layers.Lambda(myloss)([x1, x2, gt])
model = tf.keras.Model([inputs, gt], out)
model.compile(loss=lambda a, b: b, optimizer=tf.keras.optimizers.Adam())
return model
Но для меня не очень удобно использовать такую модель, как эта. Есть ли другие способы?