所有神经网络在训练过程中都需要选择超参数,而这些超参数对收敛速度和最终性能有着非常显著的影响。

这些超参数需要特别调整,以充分发挥模型的潜力。超参数调优过程是神经网络训练中不可或缺的一部分,某种程度上,它是一个主要基于梯度优化问题中的“无梯度”部分。

在这篇文章中,我们将探讨超参数优化的领先库之一——Optuna,它使这一过程变得非常简单且高效。我们将把这个过程分为5个简单的步骤。

第一步:定义模型

首先,我们将导入相关的包,并使用PyTorch创建一个简单的全连接神经网络。该全连接神经网络包含一个隐藏层。

为了保证可复现性,我们还设置了一个手动随机种子

import torch
import torch.nn as nn
import torch.optim as optim
from torchvision import datasets, transforms
from torch.utils.data import DataLoader
from torch.utils.data import random_split
import optuna


SEED = 42
torch.manual_seed(SEED)
random.seed(SEED)


# Define a simple neural network
class SimpleNN(nn.Module):
    def __init__(self, input_size, hidden_size, output_size):
        super(SimpleNN, self).__init__()
        self.fc1 = nn.Linear(input_size, hidden_size)
        self.fc2 = nn.Linear(hidden_size, output_size)


    def forward(self, x):
        x = torch.flatten(x, 1)
        x = torch.relu(self.fc1(x))
        x = self.fc2(x)
        return x

第二步:定义搜索空间和目标函数

接下来,我们将设置超参数优化所需的标准组件。我们将执行以下步骤:

1.下载FashionMNIST数据集

2.定义超参数搜索空间:

我们定义(a)想要优化的超参数,以及(b)允许这些超参数取值的范围。在我们的例子中,我们将选择以下超参数:

  • 神经网络隐藏层大小——整数值。

  • 学习率——对数分布的浮点值。

  • 优化器选择:分类选择(无顺序),在以下选项中选择:[“Adam”, “SGD”]。

3.定义目标函数:

# Split data into train and validation sets
transfor
10-02 02:52