使用Tensorboard多超参数随机搜索训练

这篇具有很好参考价值的文章主要介绍了使用Tensorboard多超参数随机搜索训练。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

完整代码位置https://gitee.com/chuge325/base_machinelearning.git
这里还参考了tensorflow的官方文档

但是由于是pytorch训练的差别还是比较大的,经过多次尝试完成了训练
硬件是两张v100

1超参数训练代码

这个代码可以查看每次训练的loss曲线和超参数的对比信息
使用Tensorboard多超参数随机搜索训练
使用Tensorboard多超参数随机搜索训练

import pandas as pd
import torch
from utils.DataLoader import MNIST_data
from torchvision import transforms
from utils.DataLoader import RandomRotation,RandomShift
from model.AlexNet import Net
# from model.Net import Net
import torch.nn as nn
import torch.nn.functional as F
import torch.optim as optim
from torch.optim import lr_scheduler
from torch.autograd import Variable
from torch.utils.tensorboard import SummaryWriter
from tensorboard.plugins.hparams import api as hp

from sklearn.model_selection import ParameterSampler
train_df = pd.read_csv('../datasets/digit-recognizer/train.csv')
n_train = len(train_df)
n_pixels = len(train_df.columns) - 1
n_class = len(set(train_df['label']))

# 定义超参数搜索空间
HP_LEARNING_RATE = hp.HParam('learning_rate', hp.RealInterval(1e-4, 1e-2))
HP_BATCH_SIZE = hp.HParam('batch_size', hp.Discrete([64, 128]))
HP_EPOCH = hp.HParam('epoch', hp.Discrete([50,100]))
METRIC_ACCURACY = hp.Metric('accuracy')
# 定义超参数搜索空间
param_dist = {
    'lr': [0.001, 0.003,0.01 ,0.1],
    'batch_size': [64,128],
    'num_epochs': [50,100]
}


def train(epoch):
    model.train()
    

    for batch_idx, (data, target) in enumerate(train_loader):
        data, target = Variable(data), Variable(target)
        
        if torch.cuda.is_available():
            data = data.cuda()
            target = target.cuda()
        
        optimizer.zero_grad()
        output = model(data)
        loss = criterion(output, target)
        
        loss.backward()
        optimizer.step()
        
        if (batch_idx + 1)% 100 == 0:
            print('Train Epoch: {} [{}/{} ({:.0f}%)]\tLoss: {:.6f}'.format(
                epoch, (batch_idx + 1) * len(data), len(train_loader.dataset),
                100. * (batch_idx + 1) / len(train_loader), 
                loss.item()))
    exp_lr_scheduler.step()
    writer.add_scalar('Loss/train', loss/len(train_loader), epoch)
    writer.flush()
def evaluate(data_loader):
    model.eval()
    loss = 0
    correct = 0
    
    for data, target in data_loader:
        data, target = Variable(data, volatile=True), Variable(target)
        if torch.cuda.is_available():
            data = data.cuda()
            target = target.cuda()
        
        output = model(data)
        
        loss += F.cross_entropy(output, target, size_average=False).item()

        pred = output.data.max(1, keepdim=True)[1]
        correct += pred.eq(target.data.view_as(pred)).cpu().sum()
        
    loss /= len(data_loader.dataset)
    writer.add_scalar('accuracy/train', correct / len(data_loader.dataset), epoch)
    writer.flush()    
    print('\nAverage loss: {:.4f}, Accuracy: {}/{} ({:.3f}%)\n'.format(
        loss, correct, len(data_loader.dataset),
        100. * correct / len(data_loader.dataset)))
    return correct / len(data_loader.dataset)

hparams_dir='logs/hparam_tuning'
hparams_writer = SummaryWriter(hparams_dir)
# 进行随机超参数搜索
param_list = list(ParameterSampler(param_dist, n_iter=20))
model = Net()
criterion = nn.CrossEntropyLoss()

for params in param_list:
    hparams_dict ={
        HP_LEARNING_RATE.name :params["lr"],
        HP_BATCH_SIZE.name :params['batch_size'],
        HP_EPOCH.name :params['num_epochs']

    }
    
    batch_size = params['batch_size']
    train_dataset = MNIST_data('../datasets/digit-recognizer/train.csv', n_pixels =n_pixels,transform= transforms.Compose(
                                [transforms.ToPILImage(), RandomRotation(degrees=20), RandomShift(3),
                                transforms.ToTensor(), transforms.Normalize(mean=(0.5,), std=(0.5,))]))
    train_loader = torch.utils.data.DataLoader(dataset=train_dataset,
                                            batch_size=batch_size, shuffle=True)

    logdir = "logs/" + 'epoch{0}_lr{1}_batch_size{2}.pth'.format(params['lr'],params['num_epochs'],params['batch_size'])
    writer = SummaryWriter(logdir)
    optimizer = optim.Adam(model.parameters(), lr=params['lr'])
    exp_lr_scheduler = lr_scheduler.StepLR(optimizer, step_size=5, gamma=0.5)

    if torch.cuda.is_available():
        model = model.cuda()
        criterion = criterion.cuda()

    n_epochs = params['num_epochs']

    for epoch in range(n_epochs):
        train(epoch)
        accuracy=evaluate(train_loader)
        if epoch==n_epochs-1:
            hparams_writer.add_hparams(hparams_dict,{'Accuracy':accuracy})
    torch.save(model.state_dict(), 'epoch{0}_lr{1}_batch_size{2}.pth'.format(params['num_epochs'],params['lr'],params['batch_size']))
    writer.close()
hparams_writer.close()

2远端电脑启动tensorboard

tensorboard --logdir logs

如果您的 TensorBoard 日志存储在远程服务器上,但您无法通过本地计算机上的浏览器访问它,可能是由于防火墙或网络设置的限制导致的。以下是一些可能的解决方案:

使用 SSH 隧道:如果您无法直接访问远程服务器上的 TensorBoard 日志,请考虑使用 SSH 隧道来建立本地和远程服务器之间的安全连接。在终端中使用以下命令建立 SSH 隧道:

   ssh -L 6006:localhost:6006 username@remote_server_ip

其中 username 是您在远程服务器上的用户名,remote_server_ip 是远程服务器的 IP 地址。然后,在本地计算机上打开浏览器并访问 http://localhost:6006 即可访问 TensorBoard 日志。

如果您使用的是 Windows 操作系统,可以使用 PuTTY 或其他 SSH 客户端来建立 SSH 隧道。
实例文章来源地址https://www.toymoban.com/news/detail-417995.html

到了这里,关于使用Tensorboard多超参数随机搜索训练的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • TensorBoard快速入门(Pytorch使用TensorBoard)

    TensorBoard 是Google开发的一个机器学习可视化工具。其主要用于记录机器学习过程,例如: 记录 损失变化、准确率变化 等 记录 图片变化、语音变化、文本变化等 ,例如在做GAN时,可以过一段时间记录一张生成的图片 绘制模型 具体支持的内容可以参考官方文档 直接使用pip安

    2024年01月20日
    浏览(24)
  • 【NLP,Huggingface,Colab】使用 Trainer 训练模型,并保存模型参数

    Colab 的使用 Huggingface 官网和一些基础API 首先,建议 保存代码到 VSCode ,这样双击关键类, F12 可以进入查看具体接口参数及其含义。 然后,建议 代码在 Colab 运行 ,第一个是有默认 GPU 资源,第二个是否则会产生各种 ConnectionError, OSError 等错误… 重点可以看注释。自行摸索了

    2024年02月13日
    浏览(28)
  • Kaggle上使用Tensorboard

    想在Kaggle上使用Tensorboard,找了一圈。 参考了Kaggle上的一个Code:Tensorboard on Kaggle 但发现有些变化,Code中用到的内网穿透工具Ngrok需要加一个Token,所以需要注册一个 Ngrok 账号,免费获取一个通道的Token。 其实直接把在Kaggle上跑出来的Tensorboard日志文件下载到本地,在本地启动

    2023年04月21日
    浏览(16)
  • TensorBoard的使用

    TensorBoard是一个可视化工具,可以查看每个阶段的输出结果。 工作流程:1.将代码运行过程中关心的数据保存在一个文件夹中(writer完成)2.读取这个文件夹中的数据,用浏览器显示出来(命令行运行tensorboard完成) SummaryWriter类的使用 help:将数据以特定的格式存储到事件文件

    2024年02月13日
    浏览(24)
  • 探索人工智能 | 模型训练 使用算法和数据对机器学习模型进行参数调整和优化

    模型训练是指 使用算法和数据对机器学习模型进行参数调整和优化 的过程。模型训练一般包含以下步骤:数据收集、数据预处理、模型选择、模型训练、模型评估、超参数调优、模型部署、持续优化。 数据收集是指为机器学习或数据分析任务收集和获取用于训练或分析的数

    2024年02月12日
    浏览(45)
  • 在 Pytorch 中使用 TensorBoard

    机器学习的训练过程中会产生各类数据,包括 “标量scalar”、“图像image”、“统计图diagram”、“视频video”、“音频audio”、“文本text”、“嵌入Embedding” 等等。为了更好地追踪和分析这些数据,许多可视化工具应运而生,比如之前介绍的 wandb 本文介绍另一种更加常用的

    2024年02月11日
    浏览(25)
  • 【pytorch】tensorboard + transforms的使用

    一、tensorboard的使用 1. 加载一张图片转化为tensor类型,并通过tenboard可视化  二、transforms的常用函数 细心的小伙伴已发现了,上面已经使用了transforms了,我们在添加图片时,用到了ToTensor()这个函数。 ToTensor()函数: 将一个PIL类型转换成tensor类型; Normalize() 函数: 用于归一

    2024年02月10日
    浏览(23)
  • TensorBoard——Pytorch版使用(附带案例演示)

    TensorBoard是一个用于可视化机器学习实验结果的工具,可以帮助我们更好地理解和调试训练过程中的模型。 在PyTorch中,我们可以使用TensorBoardX库来与TensorBoard进行交互。TensorBoardX是一个PyTorch的扩展,它允许我们将PyTorch的训练中的关键指标和摘要写入TensorBoard的事件文件中。

    2024年03月11日
    浏览(32)
  • TensorBoard最全使用教程:看这篇就够了

    机器学习通常涉及在训练期间可视化和度量模型的性能。 有许多工具可用于此任务。 在本文中,我们将重点介绍 TensorFlow 的开源工具套件,称为 TensorBoard,虽然他是TensorFlow 的一部分,但是可以独立安装,并且服务于Pytorch等其他的框架。 TensorBoard 是一组用于数据可视化的工

    2024年01月17日
    浏览(36)
  • Pytorch使用TensorBoard(使用AutoDL快速入门)(mac系统)

    AutoDL配有miniconda,提供 tensorboard 监控 没有账号的可以注册体验,新用户注册有十元免费代金券 https://www.autodl.com/register?code=c7d8238d-2b58-4765-a38a-1b9c3f39926e 终端进入项目环境,输入命令安装 终端输入: 正常输出则安装成功 导入包 创建一个SummaryWriter对象:用于创建一个log文件

    2024年02月06日
    浏览(205)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包