x = F.relu(x, inplace=True)
device = torch.device('cuda:0')
optimizer = optim.SGD(net.parameters(), lr=learning_rate, weight_decay=0.01)
- # 为Loss添加L1正则化项
- L1_reg = 0
- for param in net.parameters():
- L1_reg += torch.sum(torch.abs(param))
- loss += 0.001 * L1_reg # lambda=0.001
注:使用L1正则化项时如果指定和使用L2正则化项时相同的λ = 0.01 发生under-fitting,似乎如果要用L1正则化的话要把其系数设置的小一点,所以这里用了0.001。optimizer = optim.SGD(net.parameters(), lr=learning_rate, momentum=0.78)
- from torch.optim.lr_scheduler import ReduceLROnPlateau
-
- optimizer = ......
- # 传入优化器让学习率受其管理,当连续200次没有减少loss时就会减少学习率(乘以0.7)
- scheduler = ReduceLROnPlateau(optimizer, mode="min", patience=200, factor=0.7)
- optimizer.step()
- # 传入要监控的量,每调用一次step就会监控一次loss
- # 前面定义时的mode="min"即是监控量没有减少时触发减小lr的操作的
- scheduler.step(loss)
- from torch.optim.lr_scheduler import StepLR
-
- optimizer = ......
- # 每跑800个step就把学习率乘以0.9
- scheduler = StepLR(optimizer, step_size=800, gamma=0.9)
- optimizer.step()
- scheduler.step()
- # 指明使用"训练用"的网络模式,这里的目的是开启使用Dropout
- net.train()
- logits = net(data)
- loss = ......
- # 在验证集上需要把Dropout去掉,只在训练的时候使用!这里是切换一下模式
- net.eval()
- logits = net(data)
- test_loss += ......
- from torch import optim
- # ......
- optimizer = optim.SGD(net.parameters(), lr=learning_rate, momentum=0.78)
- pip install -e:以可编辑的模式安装项目
- pip install -e .的直接执行对象是当前文件下面的 setup.py 。
- setup.py 内包含了执行命令,也就是 安装依赖 和将 命名空间软件 重新安装到包管理器中。
- pip install -v:输出更详细的信息