我有两个输出,而其中只有一个(x1
)是模型的输出。我也想获得第二(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,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
但是对我来说,使用这样的模型并不方便。 还有其他方法吗?