炼丹小技巧1:通过TensorBoard查看loss走向判断模型是否收敛
Posted --believe
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了炼丹小技巧1:通过TensorBoard查看loss走向判断模型是否收敛相关的知识,希望对你有一定的参考价值。
1.目的
我们在训练模型的时候,不知道自己的超参数epochs设置的是够正确,能否训练出一个足够好的模型?
通过参看loss的走向,如果loss稳定在较低值附近,就可以判断该模型已经收敛。
可以通过plt.show自己绘制loss的走向图,当然也可以通过TensorBoard绘制loss的走向图,更加高大上。
TensorBoard绘图简单原理如下:1.将要绘制的数据保存为一个文件 2.用tensorboard命令读取文件并绘制图形
2.步骤
安装
pip install tensorboard
训练模型代码中保存loss值
from torch.utils.tensorboard import SummaryWriter
writer = SummaryWriter("logs") # 写入文件存放的位置
for i in range(100):
writer.add_scalar("y=2*x", 2 * i, i) # "y=2*x"为图片描述,2 * i 为纵坐标, i为step(横坐标)
writer.close()
启动TensorBoard
tensorboard --logdir=logs
–logdir :读取文件所在的文件夹
3.举例
import torch
from torch.utils.tensorboard import SummaryWriter
x_data = torch.Tensor([[1.0], [2.0], [3.0]])
y_data = torch.Tensor([[2.0], [4.0], [6.0]])
# 终端中输入 tensorboard --logdir=./logs 启动tensorboard读取logs下文件,进行绘制
# epochs = 100 # 设置为100时模型还没有收敛
epochs = 1000
class LinearModel(torch.nn.Module):
def __init__(self):
super(LinearModel, self).__init__()
self.linear = torch.nn.Linear(1, 1)
def forward(self, x):
y_pred = self.linear(x)
return y_pred
model = LinearModel()
loss = torch.nn.MSELoss(reduction='mean')
opmizier = torch.optim.SGD(model.parameters(), lr=0.001)
writer = SummaryWriter("logs")
for epoch in range(epochs):
y_pred = model(x_data)
l = loss(y_pred, y_data)
print(l.item())
writer.add_scalar('loss', l.item(), epoch) # 使用tensorboard
l.backward()
opmizier.step()
opmizier.zero_grad()
writer.close()
print("w:", model.linear.weight.item())
print("b:", model.linear.bias.item())
x_test = torch.tensor([4.0])
y_test = model(x_test)
print("y_pred:", y_test.item())
3.1 epochs设置过小
3.2 epochs设置合理
以上是关于炼丹小技巧1:通过TensorBoard查看loss走向判断模型是否收敛的主要内容,如果未能解决你的问题,请参考以下文章
开发小技巧 navicate如何点击单元格显示全部的文本内容或通过图像查看内容
恒源云(Gpushare)_自动化训练小技巧白送给你,不要吗?