每个iteration做
optimizer.zero_grad() # 梯度清零
loss.backward() # 做梯度反传
opt.step() # apply 梯度
每一个epoch做
scheduler.step() # 更新 lr
原来是:
optimizer.zero_grad() # 梯度清零
loss.backward() # 做梯度反传
opt.step() # apply 梯度
梯度累加是:
多次 loss.backward() # 做梯度反传
opt.step() # apply 梯度
optimizer.zero_grad() # 梯度清零
lr_scheduler.ReduceLROnPlateau
当某指标不再变化(下降或升高),调整学习率,这是非常实用的学习率调整策略。例如,当验证集的loss不再下降时,进行学习率调整;或者监测验证集的accuracy,当accuracy不再上升时,则调整学习率。
torchvision.models.resnet34(pretrained=)
if pretrained=True
那么会被分配到一个固定的训练好的权值
else
会被分配到随机权值
自编CNN也会给随机权值
默认的dataloader得到的batch的shape为(batch_size, channel, w, h)
torch.nn.MaxPool2d(kernel_size, stride=None, padding=0, dilation=1, return_indices=False, ceil_mode=False)
例子 m = nn.MaxPool2d(3, stride=2), 默认的stride=kernel_size