在Tensorflow.keras 2.0中,当一个模型有多个输出时,如何为model.fit()定义一个灵活的损失函数?

时间:2019-11-05 09:19:49

标签: python keras tensorflow2.0 tf.keras

比方说,这是一个具有两个输出的模型。

import tensorflow as tf
import numpy as np 

x = tf.keras.Input(shape=(35, 7), dtype=tf.float32)     # (None, 35, 7)
net = tf.keras.layers.Dense(11, activation='relu')(x)   # (None, 35, 11)
net = tf.reduce_max(net, axis=1, name='maxpool')        # (None, 11)

a = tf.keras.layers.Dense(13, activation='relu')(net)   # (None, 35, 11)
b = tf.keras.layers.Dense(17, activation='relu')(net)   # (None, 35, 11)
model = tf.keras.Model(inputs=x, outputs=[a, b])

当我执行model.compile(loss=loss_fn, optimizer='sgd')时:
model.fit(x=train, y=(label1, label2))为每对输出和标签(即loss_fnloss_fn(a, l1))运行loss_fn(b, l1)

当我执行model.compile(loss=[loss_fn1, loss_fn2], optimizer='sgd')时:
model.fit(x=train, y=(label1, label2))loss_fn1运行a,为loss_fn2运行b(即{ {1}}和loss_fn1(a, l1))。

因此,基本上,它似乎可以单独处理输出(与给定的对应标签配对)。

如果我必须定义一个损失函数,该函数应该一起处理/考虑两个输出,并将该函数与loss_fn2(b, l1)一起使用?

(我想到的一件事是将输出连接到一个张量中,并用损失函数将它们分开。但是,我不想去那里,因为两个输出的形状可能不一致。 ,例如,类似...)

model.fit

1 个答案:

答案 0 :(得分:0)

您将连接两个密集层,并执行与您提到的完全相同的操作:

exit code -1073740791 (0xC0000409)

编辑;尚未看到@ bit01实际已经评论了要使用的方法