【问题标题】:ray tune batch_size should be a positive integer value, but got batch_size=<ray.tune.search.sample.Categorical objectray tune batch_size 应该是一个正整数值,但是得到了 batch_size=<ray.tune.search.sample.Categorical 对象
【发布时间】:2023-02-09 02:18:36
【问题描述】:

我正在尝试使用 ray 调整神经网络。我按照标准流程让它在 MNIST 数据上运行。数据加载

  trainset = torchvision.datasets.MNIST(
        root='../data', train=True, download=True, transform=transforms.Compose([
                         transforms.ToTensor(),
                         transforms.Normalize((0.1307,), (0.3081,))
                     ]))

  testset = torchvision.datasets.MNIST(
        root='../data', train=False, download=True, transform=transforms.Compose([
                         transforms.ToTensor(),
                         transforms.Normalize((0.1307,), (0.3081,))
                     ]))

  train_loader = torch.utils.data.DataLoader(
      trainset,
      batch_size=config_set["batch_size"], shuffle=True)
  
  test_loader = torch.utils.data.DataLoader(
      testset,
      batch_size=1000, shuffle=True)

当我们使用可配置的超参数运行调谐时,它会抛出错误

 config_set = {
    "lr": tune.loguniform(1e-4, 1e-1),
    "batch_size": tune.choice([16, 32, 64,128])
}

result = tune.run(
    train_model, fail_fast="raise", config=config_set)

*** ValueError: batch_size 应该是一个正整数值,但是在 *** 得到了 batch_size=<ray.tune.search.sample.Categorical 对象

【问题讨论】:

    标签: deep-learning pytorch hyperparameters ray ray-tune


    【解决方案1】:

    对于自定义训练代码,Tune 允许您将其包装在 Function Trainable 中,该函数被传递到 Tune 并为您提供已解决的配置字典。目前,您正在传递未解析的搜索空间对象(由 tune.choice 产生的分类对象。

    from ray import air, tune
    from ray.air import session
    
    # Wrap it in a function
    def trainable(config: dict):
        # Your training code...
        trainset = torchvision.datasets.MNIST(
            root='../data', train=True, download=True, transform=transforms.Compose([
                             transforms.ToTensor(),
                             transforms.Normalize((0.1307,), (0.3081,))
                         ]))
        testset = torchvision.datasets.MNIST(
            root='../data', train=False, download=True, transform=transforms.Compose([
                             transforms.ToTensor(),
                             transforms.Normalize((0.1307,), (0.3081,))
                         ]))
    
        train_loader = torch.utils.data.DataLoader(
          trainset,
          batch_size=config["batch_size"], shuffle=True)
    
        train_model(...)
    
    config_set = {
        "lr": tune.loguniform(1e-4, 1e-1),
        "batch_size": tune.choice([16, 32, 64,128])
    }
    
    tuner = tune.Tuner(
        trainable,
        param_space=config_set,
        run_config=air.RunConfig(
            failure_config=air.FailureConfig(fail_fast="raise")
        ),
    )
    results = tuner.fit()
    

    【讨论】:

      猜你喜欢
      • 2022-08-06
      • 2021-05-03
      • 2017-06-26
      • 1970-01-01
      • 2020-04-25
      • 2013-01-25
      • 1970-01-01
      • 2020-08-24
      • 1970-01-01
      相关资源
      最近更新 更多