我正在使用 pytorch 来训练我的 CNN 网络。我想绘制训练和验证损失曲线以可视化模型性能。如何绘制两条曲线?
我有下面的代码
# create a function (this my favorite choice)
def RMSELoss(predicted,target):
return torch.sqrt(torch.mean((predicted-target)**2))
criterion = RMSELoss
# loss = torch.sqrt(criterion(x, y))
optimizer = torch.optim.Adam(model.parameters(), lr=0.0001)
epochs = 300
n_total_steps = len(train_dataset)
trainingEpoch_loss = []
validationEpoch_loss = []
for epoch in range(epochs):
step_loss = []
model.train()
for i, data in enumerate(train_dataset):
feature,target = data['data'].type(torch.FloatTensor),torch.tensor(data['target']).type(torch.FloatTensor)
# Clear the gradients
optimizer.zero_grad()
# Forward Pass
outputs = model(feature)
# Find the Loss
training_loss = criterion(outputs, target)
# Calculate gradients
training_loss.backward()
# Update Weights
optimizer.step()
# Calculate Loss
step_loss.append(training_loss.item())
if (i+1) % 1 == 0:
print (f'Epoch [{epoch+1}/{epochs}], Step [{i+1}/{n_total_steps}], Loss: {training_loss.item():.4f}')
trainingEpoch_loss.append(np.array(step_loss).mean())
model.eval() # Optional when not using Model Specific layer
for i, data in enumerate(val_dataset):
validationStep_loss = []
feature,target = data['data'].type(torch.FloatTensor),torch.tensor(data['target']).type(torch.FloatTensor)
# Forward Pass
outputs = model(feature)
# Find the Loss
validation_loss = criterion(outputs, target)
# Calculate Loss
validationStep_loss.append(validation_loss.item())
validationEpoch_loss.append(np.array(validationStep_loss).mean())
你能让我知道我做得对还是错吗?
另请让我知道如何绘制训练和验证损失?
你正确地收集了你的纪元损失trainingEpoch_loss
and validationEpoch_loss
列表。
现在,训练结束后,添加代码来绘制损失:
from matplotlib import pyplot as plt
plt.plot(trainingEpoch_loss, label='train_loss')
plt.plot(validationEpoch_loss,label='val_loss')
plt.legend()
plt.show
阅读 matplotlib 文档以获取更多奇特的绘图功能。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)