Pytorch — реализация идентичного обучения с использованием пакетов или без него.Python

Программы на Python
Anonymous
Pytorch — реализация идентичного обучения с использованием пакетов или без него.

Сообщение Anonymous »

У меня есть модель в PyTorch, которая очень хорошо сходится с эталонным примером при использовании стандартного процесса обучения, в котором оптимизатор обучается на всех образцах одновременно:

Код: Выделить всё

loss = loss_fnc(samples)

model.optim.zero_grad()
loss.backward()
model.optim.step()
Теперь модель должна обучаться на более ресурсоемких задачах (больше выборок, больший размер входных данных), поэтому я подумал, что это поможет обучать в пакетном режиме. Для этого я использую довольно стандартный метод с циклом for:

Код: Выделить всё

loss_sum = 0

for k_batch in range(0, len(samples), batch_size):

samples_batch = samples[k_batch:k_batch + batch_size]

loss = loss_fnc(samples_batch)
loss_sum += loss*len(samples_batch)

model.optim.zero_grad()
loss.backward()

model.optim.step()

loss_comp = loss_sum/len(samples)
Теперь, когда я пропускаю часть обучения в этом методе и вычисляю только потери, результирующий loss_comp идентичен тому, который вычисляется для всех выборок одновременно (например, в методе выше). Естественно, при пакетном обучении loss_comp отличается, поскольку модель меняется в ходе пакетного обучения.
Теперь я сталкиваюсь с проблемой, заключающейся в том, что модель больше не сходится в моем эталонном примере. при использовании пакетного обучения. В обоих случаях выборки уже упорядочиваются случайным образом перед обучением.
Поскольку меня интересует только уменьшение необходимого объема памяти для вычислений, и прежде чем я попробую что-нибудь еще, есть ли способ действительно провести идентичное обучение при использовании пакетов вместо «всего сразу»? Я попытался изменить функцию так, чтобы пакетно вычислялись только потери, а этап оптимизации выполнялся в конце, но, похоже, у меня это не сработало.
Как я поймите, использование DataLoader ничего не изменит в этом поведении.

Подробнее здесь: https://stackoverflow.com/questions/790 ... ng-batches

Вернуться в «Python»