pytorch多任务并行训练

import torch

# Encoder参数共享  Decoder分别训练
Encoder = SharedEncoder().cuda()
Dose_decoder = Dose_prediction().cuda()
Gra_decoder = Gradient_regression().cuda()

criterion = torch.nn.MSELoss()
lr1 = 0.0002
lr2 = 0.0001

####
F1
# 使用三个优化器
opt1 = torch.optim.Adam(Encoder.parameters(), lr=lr1)
opt2 = torch.optim.Adam(Dose_decoder.parameters(), lr=lr1)
opt3 = torch.optim.Adam(Gra_decoder.parameters(), lr=lr2)

Encoder.train()
Dose_decoder.train()
Gra_decoder.train()

for input, label, gra_label, _ in tqdm.tqdm(train_dataloaders):

	inputs = input.cuda()
	labels = label.cuda()
	gra_labels = gra_label.cuda()

	opt1.zero_grad()
	opt2.zero_grad()
	opt3.zero_grad()

	conv1, conv2, conv3, conv4, center = Encoder(inputs)
	outputs = Dose_decoder(conv1, conv2, conv3, conv4, center)
	output_gra = Gra_decoder(conv1, conv2, conv3, conv4, center)
      
	loss_main = criterion(outputs, labels)
	loss_gra = criterion(output_gra, gra_labels)
	# 损失要加起来反向传播
	loss = 10 * loss_main + 5 * loss_gra

	loss.backward()

	opt1.step()
	opt2.step()
	opt3.step()

################
F2
# 如果对某个网络不设置学习率,则使用最外层的lr
optimizer = torch.optim.Adam([
        {'params': Encoder.parameters()},
        {'params': Dose_decoder.parameters()},
        {'params': Gra_decoder.parameters(),'lr': lr2}
    ], lr=lr1)

#################
F3
from itertools import chain

optimizer = torch.optim.Adam(params=chain(Encoder.parameters(), Dose_decoder.parameters(), Gra_decoder.parameters()), lr=0.0001)


  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值