0

我试图通过一个接收多个输入的模型来运行道具,即 3 个不同批次的具有相同形状但不同来源的数据,其中一个批次具有一种类型的损失,其他批次具有另一种。我可以使用梯度胶带同时计算所有这些吗?

这是一个例子:

with tf.GradientTape() as tape:
           model_pred_1 = model(batch1, True)
           loss_value_1 = tf.reduce_mean(tf.keras.losses.sparse_categorical_crossentropy(y_true=y_1,y_pred=model_pred_1, from_logits=True))
           
           model_pred_2 = c_model(batch_2,True)
           synt_data = another_model(another_input,True)
           model_pred_3 = c_model(synt_data,True)

           loss_value_2 = 0.5 * tf.reduce_mean(tf.keras.losses.binary_crossentropy(y_true=y_2,y_pred=model_pred_2 , from_logits=True))
           loss_value_3 = 0.5 * tf.reduce_mean(tf.keras.losses.binary_crossentropy(y_true=y_3,y_pred=model_pred_3, from_logits=False))

total_loss_value =  loss_value_1 + loss_value_2 + loss_value_3 
grads = tape.gradient([loss_value_1 ,loss_value_2 ,loss_value_3 ],model.trainable_weights)


optimizer.apply_gradients(zip(grads, model.trainable_weights))
4

0 回答 0