Обычно мы обучаем модель и оцениваем ее в одной и той же процедуре.
...
for epoch_idx range(max_epoch):
net.train()
# do training with batchsize = N
for train_img, label in train_loader:
...
pred = net(train_img)
loss = criterion(pred, label)
optim.zero_grad()
loss.backward()
optim.step()
# eval
if epoch_idx % eval_step == 0:
net.eval()
# do evaluation with batchsize =1
Однако для довольно большого количества задач, которые предпочитают обрезанные изображения с фиксированным размером при выполнении обучения, но когда дело доходит до При оценке каждое изображение различается по размеру, поэтому размер пакета должен быть 1.
В моем случае время оценки примерно в 10 раз больше, чем при обучении, что замедляет всю процедуру. Модель большая, и я не хочу хранить ее для каждой эпохи.
Интересно, возможно ли это: создать новый поток и выполнить оценку, чтобы основной поток продолжал трианирование без приостановки.
Я не знаком с мультиобработкой, поэтому любая помощь будет приветствоваться.