模型为model,优化器为optimizer
- min_val_loss = np.inf
- for epoch in range(1, epochs + 1):
-
- ############################训练部分开始#############################
- model.train()
- train_losses = []
- for (batch_x, batch_y) in train_loader:
-
- output = model(batch_x)
- loss = criterion(output, batch_y)
-
- optimizer.zero_grad()
- loss.backward()
- optimizer.step()
- #pytorch 老三样
-
- ############################训练部分结束#############################
-
-
- ############################验证部分开始#############################
- model.eval()
- for (batch_x, batch_y) in val_loader:
-
- with torch.no_grad():
- output = model(batch_x)
- loss = criterion(output, batch_y)
-
- val_losses.append(loss.item())
- val_loss = np.mean(val_losses)
-
- if val_loss < min_val_loss:
- min_val_loss = val_loss
- torch.save(model.state_dict(), save_path)
- #保存最优模型
- ############################验证部分结束#############################
test的时候,就可以加载这个最佳模型对应的参数(model.load_state_dict),进行测试
在PyTorch中进行validation时,使用他们均可切换到测试模式。
eg,对于dropout层和batchnorm层:
**with torch.zero_grad()**则停止autograd模块的工作,也就是停止gradient计算,以起到加速和节省显存的作用,从而节省了GPU算力和显存,但是并不会影响dropout和batchnorm层的行为。(这俩还是train模式下的样子)
——>二者搭配使用