内置/自己设计的损失函数使用对比
- 1.内置损失函数
- 2.自己设计损失函数
Pytorch内置了许多常用的损失函数,但是,实际应用中,往往需要依据不同的需求设计不同的损失函数。本篇博文对比总结了使用 内置和 自己设计损失函数的语法规则流程。
1.内置损失函数
使用内嵌的损失函数:
optimizer_d = torch.optim.Adam(netd.parameters(), opt.lr2, betas=(opt.beta1, 0.999)) #要优化网路netd中的参数,使用Adam优化算法
criterion = t.nn.BCELoss().to(device) #官方损失函数
output = netd(real_img) #网络输出 output
error_d_real = criterion(output, true_labels) #将网路输出output传入损失函数计算真实值,一批次的输出直接穿传进去
optimizer_d.zero_grad() #要优化参数梯度归零
error_d_real.backward() #由损失函数从最后一层开始极端各个参数的梯度
optimizer_d.step() #梯度反向传播,更新参数
2.自己设计损失函数
optimizer_D = torch.optim.Adam(D.parameters(), lr=LR_D) #要优化网路D中的参数,使用Adam优化算法
prob_artist0 = D(artist_paintings) #网络输出prob_artist0
D_loss = - torch.mean(torch.log(prob_artist0) + torch.log(1. - prob_artist1)) #自己设计的损失函数,直接由网络输出prob_artist0计算损失
optimizer_D.zero_grad() #要优化参数梯度归零
D_loss.backward(retain_graph=True) #由损失函数从最后一层开始的各个参数的梯度
optimizer_D.step() #梯度反向传播,更新参数
核心过程都是一样的,只不过在实际使用时会因为编程需要调整一些步骤的顺序。