Я рассматриваю реализацию метода настройки гиперпараметров для нейронной сети с прямой связью (FNN), реализованной с использованием PyTorch
. Моя оригинальная FNN, модель с именем net
, была реализована с использованием подхода мини-пакетного обучения с эпохами:
#Parameters
batch_size = 50 #larger batch size leads to over fitting
num_epochs = 1000
learning_rate = 0.01 #was .01-AKA step size - The amount that the weights are updated during training
batch_no = len(x_train) // batch_size
criterion = nn.CrossEntropyLoss() #performance of a classification model whose output is a probability value between 0 and 1
optimizer = torch.optim.Adam(net.parameters(), lr=learning_rate)
for epoch in range(num_epochs):
if epoch % 20 == 0:
print('Epoch {}'.format(epoch+1))
x_train, y_train = shuffle(x_train, y_train)
# Mini batch learning - mini batch since batch size < n(batch gradient descent), but > 1 (stochastic gradient descent)
for i in range(batch_no):
start = i * batch_size
end = start + batch_size
x_var = Variable(torch.FloatTensor(x_train[start:end]))
y_var = Variable(torch.LongTensor(y_train[start:end]))
# Forward + Backward + Optimize
optimizer.zero_grad()
ypred_var = net(x_var)
loss =criterion(ypred_var, y_var)
loss.backward()
optimizer.step()
Наконец, я тестирую свою модель на отдельном наборе тестов.
Я столкнулся с подходом, использующим рандомизированный поиск для настройки гиперпараметров, а также реализацию перекрестной проверки в K-кратном порядке (RandomizedSearchCV
).
Мой вопрос двоякий (не каламбур!) И, во-первых, теоретический: необходима ли k-кратная проверка или может ли быть какая-либо польза для мини-пакетной нейронной сети с прямой связью? Из того, что я вижу, мини-пакетный подход должен выполнять примерно ту же работу, останавливая переоснащение.
Я также нашел хороший ответ здесь , но я не уверен, что это адреса в частности, мини-пакетный подход.
Во-вторых, если k-сгиб не нужен, есть ли другая функция настройки гиперпараметров для PyTorch
, чтобы избежать ее создания вручную?