问题描述:
想咨询一下,就是我有两个网络net1,net2,定义了损失函数是loss1+loss2,怎么同时用这一个loss优化这两个网络?
应该如何定义我的TrainOneStepCell?看这个定义好像只支持一个network啊。这怎么办?
解答:
将两个前向net,两个loss计算,以及loss求和封装为一个network。 两个loss求和: https://mindspore.cn/docs/programming_guide/zh-CN/r1.6/loss.html#%E5%AE%9A%E4%B9%89%E5%A4%9A%E6%A0%87%E7%AD%BE%E6%95%B0%E6%8D%AE%E9%9B%86 可参考modelzoo中bert实现: https://gitee.com/mindspore/models/blob/r1.6/official/nlp/bert/run_pretrain.py 其中: net_with_loss = BertNetworkWithLoss(bert_net_cfg, True) net_with_grads = BertTrainOneStepCell(net_with_loss, optimizer=optimizer, sens=cfg.Thor.loss_scale, enable_clip_grad=False) BertNetworkWithLoss就是计算两个net的loss,并求和