比方说,这是一个具有两个输出的模型。
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_fn
和loss_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
答案 0 :(得分:0)
您将连接两个密集层,并执行与您提到的完全相同的操作:
exit code -1073740791 (0xC0000409)
编辑;尚未看到@ bit01实际已经评论了要使用的方法