关于kaggle如何用tensorboard监视训练过程

前言

主要为了解决在kaggle上打开event文件,但是网页无法连接的问题。(当然只要是网站不给访问的这里都能解决,往下看吧):)

一.生成event

如果运行的时候程序提示no module xxx,直接!pip install xxx先装库
下面的代码通过jupyter直接运行,可以生成一个event文件,这个需要下载下来后续使用。

注:这段代码不记得是从哪找的了,有人找到了可以踹我

    import torchvision
    import torch.utils.data as Data
     # 准备训练用的MNIST数据集
    train_data = torchvision.datasets.MNIST(
         root = "./data/MNIST",  # 提取数据的路径
         train=True, # 使用MNIST内的训练数据
         transform=torchvision.transforms.ToTensor(),    # 转换成torch.tensor
         download=True   # 如果是第一次运行的话,置为True,表示下载数据集到root目录
     )

     # 定义loader
    train_loader = Data.DataLoader(
         dataset=train_data,
         batch_size=128,
         shuffle=True,
         num_workers=0
     )

    test_data = torchvision.datasets.MNIST(
         root="./data/MNIST",
         train=False,    # 使用测试数据
         download=False
     )

     # 将测试数据压缩到0-1
    test_data_x = test_data.data.type(torch.FloatTensor) / 255.0
    test_data_x = torch.unsqueeze(test_data_x, dim=1)
    test_data_y = test_data.targets

     # 打印一下测试数据和训练数据的shape
    print("test_data_x.shape:", test_data_x.shape)
    print("test_data_y.shape:", test_data_y.shape)

    for x, y in train_loader:
        print(x.shape)
        print(y.shape)
        break



    import torch
    import torch.nn as nn

    class ConvNet(nn.Module):
        def __init__(self):
            super(ConvNet, self).__init__()

            self.conv1 = nn.Sequential(
                 nn.Conv2d(1, 16, 3, 1, 1),
                 nn.ReLU(),
                 nn.AvgPool2d(2, 2)
             )

            self.conv2 = nn.Sequential(
                 nn.Conv2d(16, 32, 3, 1, 1),
                 nn.ReLU(),
                 nn.MaxPool2d(2, 2)
             )

            self.fc = nn.Sequential(
                 nn.Linear(32 * 7 * 7, 128),
                 nn.ReLU(),
                 nn.Linear(128, 64),
                 nn.ReLU()
             )

            self.out = nn.Linear(64, 10)

        def forward(self, x):
            x = self.conv1(x)
            x = self.conv2(x)
            x = x.view(x.size(0), -1)
            x = self.fc(x)
            output = self.out(x)
            return output

from tensorboardX import SummaryWriter
from sklearn.metrics import accuracy_score
MyConvNet = ConvNet()
logger = SummaryWriter(log_dir="data/log")
 
# 获取优化器和损失函数
optimizer = torch.optim.Adam(MyConvNet.parameters(), lr=3e-4)
loss_func = nn.CrossEntropyLoss()
log_step_interval = 100      # 记录的步数间隔
 
for epoch in range(2):
    print("epoch:", epoch)
    # 每一轮都遍历一遍数据加载器
    for step, (x, y) in enumerate(train_loader):
        # 前向计算->计算损失函数->(从损失函数)反向传播->更新网络
        predict = MyConvNet(x)
        loss = loss_func(predict, y)
        optimizer.zero_grad()   # 清空梯度(可以不写)
        loss.backward()     # 反向传播计算梯度
        optimizer.step()    # 更新网络
        global_iter_num = epoch * len(train_loader) + step + 1  # 计算当前是从训练开始时的第几步(全局迭代次数)
        if global_iter_num % log_step_interval == 0:
            # 控制台输出一下
            print("global_step:{}, loss:{:.2}".format(global_iter_num, loss.item()))
            # 添加的第一条日志:损失函数-全局迭代次数
            logger.add_scalar("train loss", loss.item() ,global_step=global_iter_num)
            # 在测试集上预测并计算正确率
            test_predict = MyConvNet(test_data_x)
            _, predict_idx = torch.max(test_predict, 1)     # 计算softmax后的最大值的索引,即预测结果
            acc = accuracy_score(test_data_y, predict_idx)
             # 添加第二条日志:正确率-全局迭代次数
            logger.add_scalar("test accuary", acc.item(), global_step=global_iter_num)
             # 添加第三条日志:这个batch下的128张图像
            img = torchvision.utils.make_grid(x, nrow=12)
            logger.add_image("train image sample", img, global_step=global_iter_num)
             # 添加第三条日志:网络中的参数分布直方图
            for name, param in MyConvNet.named_parameters():
                logger.add_histogram(name, param.data.numpy(), global_step=global_iter_num)

二.利用xshell查看

1.首先是下载xshell,百度即可(后续放链接)
2.下载好后双击打开,创建服务器以及配置端口,配置界面为:
会话管理器-新建会话(右键)-属性-隧道-添加
配置参数如下:
在这里插入图片描述
3. 找到装载了event文件的路径:
我的是:
在这里插入图片描述
4. 在xshell上的命令行利用cd进入到log文件的上一级:
在这里插入图片描述
5. 然后输入:tensorboard --logdir=log
在这里插入图片描述
6. 然后复制网址在浏览器粘贴就打开查看了
在这里插入图片描述
图中会出现一浅一深的线,其中浅的线代表真实数据,深线是代表smooth后的数据,在左侧把smoothing拖到0,就能消除深线。

注意:
① xshell需要保持运行状态,不然网页还是打不开
② 命令都是在xshell中输入,不要弄错了
③注意xshell中,是没有ctrl+c和v的快捷键的,不要手快用ctrl+c复制了,在xshell中这个是断开连接的意思,用鼠标右键复制粘贴即可

结语

本文仅关注如何得到打开的结果,中间出现的提示我也不太清楚(但是好用就完事),后续会继续更新打开的原理,大家感兴趣的可以点点关注插个眼。

2023/9/19进一步更新

补充

一. 如何利用SummaryWriter对训练过程进行监视

主要有四个步骤,为了突出主要的监视流程,所以用…省略了网络搭建以及部分输入参数(具体可配合上文的例子食用)

#步骤1:从pytorch中导入对应的包
from torch.utils.tensorboard import SummaryWriter

#步骤2:实例化SummaryWriter
writer = SummaryWriter("名字")
...
#步骤3:添加检测的scaler(标量)
def train(..., tf_writer):
	...
	tf_writer.add_scalar('名字', 纵坐标, 横坐标)
...

#步骤4:关闭writer 
writer.close()

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
Kaggle 平台上使用 TensorBoard 可以帮助您可视化和分析训练过程中的指标、损失函数值以及模型的结构等。Kaggle 提供了一种简单的方法来在 Kaggle Notebooks 中使用 TensorBoard。 下面是一个在 Kaggle Notebooks 中使用 TensorBoard 的示例代码: ```python from torch.utils.tensorboard import SummaryWriter # 创建 SummaryWriter 对象,将 TensorBoard 日志文件保存在默认路径 writer = SummaryWriter() # 记录训练过程中的指标 for epoch in range(num_epochs): # 计算指标 train_loss = ... train_accuracy = ... # 将指标写入 SummaryWriter writer.add_scalar('Train/Loss', train_loss, epoch) writer.add_scalar('Train/Accuracy', train_accuracy, epoch) # 关闭 SummaryWriter writer.close() ``` 运行以上代码后,会在当前目录下生成一个名为 `runs` 的文件夹,其中包含了 TensorBoard 日志文件。您可以在 Kaggle Notebooks 中使用以下代码来启动 TensorBoard: ```python %load_ext tensorboard %tensorboard --logdir runs ``` 然后,您可以在 Kaggle Notebooks 的输出窗口中看到一个链接,点击该链接即可打开 TensorBoard 界面。在 TensorBoard 中,您可以查看训练曲线、损失函数值、模型图表等,并进行比较和分析。 请注意,在 Kaggle 平台上使用 TensorBoard 需要确保您的环境支持 TensorBoard,并且已经安装了相关的库。您可以在 Kaggle Notebooks 中使用 `!pip install` 命令来安装所需的库。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值