【发布时间】:2020-03-25 18:12:38
【问题描述】:
我正在考虑为使用 PyTorch 实现的前馈神经网络 (FNN) 实施超参数调整方法。我最初的 FNN 模型名为 net,已使用带有 epochs 的小批量学习方法实现:
#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-fold 验证是必要的还是可以为小批量前馈神经网络增加任何好处?据我所见,小批量方法应该做大致相同的工作,停止过度拟合。
我还找到了一个很好的答案 here,但我不确定这是否专门针对小批量方法。
其次,如果k-fold不是必须的,有没有针对PyTorch的另一种超参数调优功能来避免手动创建?
【问题讨论】:
标签: python machine-learning neural-network pytorch