当pytorch提供的内置损失函数无法实现需求时,可以通过自定义损失函数来实现目标。内置损失函数定义在torch.nn中,常用的有MSELoss(),L1Loss(),CrossEntropyLoss()等。自定义损失函数常通过类实现,像自定义神经网络一样,继承nn.Module()并且实现__init__()和forward()函数,在使用时,直接实例化类对象即可,这样实现的好处是全程用pytorch内置的数据结构进行处理,规范统一。
动态调整学习率的目的是让减少网络训练中震荡,是loss继续下降,模型收敛的更优。在pytorch中学习率被称为scheduler,一个优化器有多个参数组(param_group),每个参数组中用字典结构存储着信息,其中神经网络的参数组中,键‘lr’对应的就是学习率。定义优化器在torch.optim中,常用的优化器有Adam等,优化器需要至少一个参数,该参数即为该优化器需要优化的网络结构,例如 optimizer = torch.optim.Adam(net.parameters()),学习率的设置为 scheduler1 = torch.optim.lr_scheduler. StepLR (optimizer, ,step_size = 30),在实际训练时,需要先调用优化器optimizer.step()再调用scheduler1.step()进行学习率的改变。自定义调整学习率,定义一个函数def adjust_lr_rate(optimizer,…),通过for param_group in optimizer.param_groups: param_group[‘lr] = adjust_lr_rate