Pytorch возобновляет тренировки после каждой тренировки - PullRequest
0 голосов
/ 21 февраля 2019

У меня есть набор данных, который разделен на меньшие наборы данных.

Я хочу обучить 3 модели для каждого раздела набора данных, но мне нужно, чтобы все учебные занятия начинались с одинаковых инициализированных сетевых параметров.

так это выглядит так:

modelList = []
thisCNN = NNet()

for x in range(3):
    train = torch.utils.data.DataLoader(Subset(train_set, indexes[x]), batch_size=32)
    bb = trainMyNet(thisCNN, train, test)
    modelList.append(list(bb.parameters()))

print modelList[0][1]
print modelList[1][1]
print modelList[2][1]

При печати я получаю одинаковые точные параметры для каждой сохраненной модели, что странно, а также я заметил, что после каждой итерации модельфактически возобновляет обучение с предыдущей итерации, поскольку это приводит к меньшим потерям на итерацию.

То, чего я пытаюсь достичь, - это на итерации получить новую модель для текущего подмножества x, но обучение должно начинаться с тех же начальных thisCNN = NNet() весов.

Ответы [ 2 ]

0 голосов
/ 21 февраля 2019

Когда вы звоните bb = trainMyNet(thisCNN, train, test), вы не берете копию thisCNN, но это та же модель, которую вы обновляете на каждой итерации.Чтобы ваш код работал, вам, вероятно, следует передать копию этой модели:

from copy import deepcopy    
modelList = []
thisCNN = NNet()

for x in range(3):
    train = torch.utils.data.DataLoader(Subset(train_set, indexes[x]), batch_size=32)
    bb = trainMyNet(deepcopy(thisCNN), train, test)
    modelList.append(list(bb.parameters()))

print modelList[0][1]
print modelList[1][1]
print modelList[2][1]

. Это должно инициализировать все модели как thisCNN и убедиться, что они отличаются после обучения.

0 голосов
/ 21 февраля 2019

Каждый раз, когда вы передаете thisCNN на trainMyNet, вы передаете одну и ту же сеть.Итак, веса будут обновляться в том же месте.Вы должны объявить thisCNN внутри цикла for:

for x in range(3):
    thisCNN = NNet()
    train = torch.utils.data.DataLoader(Subset(train_set, indexes[x]), batch_size=32)
    bb = trainMyNet(thisCNN, train, test)
    modelList.append(list(bb.parameters()))
...