【Pytorch】With TensorBoard

在这里插入图片描述

TensorFlowKeras 配合 TensorBoard 使用,能非常便捷的可视化网络的各种结构细节和参数变化(参考 《Tensorflow | 莫烦 》learning notes),本博客介绍 pytorch 如何配合 tensorboard 使用!


下面用一个例子介绍下 pytorch 中使用 tensorboard 记录 loss,acc 和 learn rate

大致流程如下 (pytorch中使用tensorboard查看损失

在这里插入图片描述

代码参考 pytorch训练自己图像分类数据集


from tensorboardX import SummaryWriter
epochs = 71
milestones = [20,40,50,60,70]
optimizer = torch.optim.Adam(net.parameters(),lr=lr, weight_decay=weight_decay)
lr_scheduler = torch.optim.lr_scheduler.MultiStepLR(optimizer,
                                                    milestones=milestones, last_epoch= -1)
loss_func = nn.CrossEntropyLoss()
writer = SummaryWriter(comment="ResNet")

for epoch in range(epochs): # 遍历每个 epcoch
    net.train() # 网络训练模式
    iteration = 0
    average_loss_epoch = 0 # 记录损失
    train_acc_epoch = 0 # 记录精度

    for batch_images, batch_labels in train_loader: # 遍历每次 batch
        batch_images, batch_labels = batch_images.cuda(), batch_labels.cuda()
        out = net(batch_images)
        loss = loss_func(out, batch_labels)
        average_loss_batch = loss
        prediction = torch.max(out, 1)[1]
        train_correct = (prediction == batch_labels).sum()
        ## 这里得到的train_correct是一个longtensor型,需要转换为float
        train_acc_batch = (train_correct.float()) / batch_size

        optimizer.zero_grad()  # 清空梯度信息,否则在每次进行反向传播时都会累加
        loss.backward()  # loss反向传播
        optimizer.step()  # 梯度更新

        iteration += 1
        # train acc and loss of each iteration
        print("Epoch: %d/%d || iteration: %d || average_loss_batch: %.3f || train_acc_batch: %.5f"
              % (epoch, epochs, iteration, average_loss_batch, train_acc_batch))
        average_loss_epoch += average_loss_batch # sum the batch results
        train_acc_epoch += train_acc_batch # sum the batch results

    lr_scheduler.step()
    average_loss_epoch = average_loss_epoch / iteration # compute the average results
    train_acc_epoch = train_acc_epoch / iteration

    # write to show loss/acc/lr on tensorboard
    writer.add_scalar('Train/Loss',average_loss_epoch,epoch)
    writer.add_scalar('Train/Acc',train_acc_epoch,epoch)
    writer.add_scalar('Train/Learning Rate',optimizer.state_dict()['param_groups'][0]['lr'],epoch)
writer.close()

上述代码用到了 MultiStepLR,每隔设定的 epoch(milestones) loss 下降一个数量级

涉及到 write 部分,就是使用 tensorboard 记录参数变化的部分

训练时,会在目录下生成 runs 文件夹,在终端中启动 tensorboard,目录指向 runs 文件夹下即可

tensorboard --logdir runs

在这里插入图片描述

启动 tensorboard 成功后,在浏览器中输入上面提示的网址 http://localhost:6006 即可查看刚才记录的 loss,acc 和 learning rate
在这里插入图片描述

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值