使用Visdom对损失函数进行监控

问题

需要监控损失函数Loss啥时候训练收敛了。

解决

pip

pip3 install visdom

Visdom

运行:


python3 -m visdom.server

然后,打开http://localhost:8097/即可。

Python

最后,在Python程序中埋点即可。

def cifar10_go():
    # 实例化一个窗口
    viz = Visdom(port=8097)
    # 初始化窗口的信息
    viz.line([0.], [0.], win='train_loss', opts=dict(title='train loss'))

    transform = transforms.Compose([
        transforms.RandomResizedCrop((224, 224)),
        transforms.ToTensor(),
        transforms.Normalize(mean=[0.485, 0.456, 0.406], std=[0.229, 0.224, 0.225])
    ])
    cifar10_dataset = torchvision.datasets.CIFAR10(root='./data',
                                                   train=False,
                                                   transform=transform,
                                                   target_transform=None,
                                                   download=True)
    dataloader = DataLoader(dataset=cifar10_dataset,  # 传入的数据集, 必须参数
                            batch_size=32,  # 输出的batch大小
                            shuffle=True,  # 数据是否打乱
                            num_workers=4)  # 进程数, 0表示只有主进程
    model = MyCNN()
    # 交叉熵损失函数
    criterion = nn.CrossEntropyLoss()
    # 定义优化器
    optimizer = torch.optim.SGD(model.parameters(), lr=1e-4, weight_decay=1e-2, momentum=0.9)
    # 下面开始训练
    start = time.time()  # 记时开始
    for epoch in range(3):  # 设置要在全部数据上训练的次数

        for i, data in enumerate(dataloader):
            # data就是我们获取的一个batch size大小的数据

            inputs, labels = data  # 分别得到输入的数据及其对应的类别结果
            # 首先要通过zero_grad()函数把梯度清零,不然PyTorch每次计算梯度会累加,不清零的话第二次算的梯度等于第一次加第二次的
            optimizer.zero_grad()
            # 获得模型的输出结果,也即是当前模型学到的效果
            outputs = model(inputs)
            # 获得输出结果和数据真正类别的损失函数
            loss = criterion(outputs, labels)
            print('Epoch {}, Loss {}'.format(epoch + 1, loss))
            # 算完loss之后进行反向梯度传播,这个过程之后梯度会记录在变量中
            loss.backward()
            # 用计算的梯度去做优化
            optimizer.step()
            # 更新监听的信息
            viz.line([loss.item()], [i], win='train_loss', update='append')
    end = time.time()  # 计时结束
    print('使用时间: {:.5f} s'.format(end - start))
    # 保存模型训练结果
    torch.save(model, './MyCNN_model_23.pth')

这里以为上一个例子:《PyTorch使用CIFAR-10数据进行训练》

效果

visdom效果

参考:

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值