Нужно ли создавать несколько экземпляров нейронной сети в PyTorch для тестирования нескольких функций потери? - PullRequest
0 голосов
/ 26 мая 2018

Я написал нейронную сеть в PyTorch, и я хотел бы сравнить результаты двух разных функций потерь в этой одной сети

Должен ли я создать два разных экземпляра сети и протестировать одну потерюфункция для каждой сети, как это

network_w_loss_1 = ANN().cuda()
network_w_loss_2 = ANN().cuda()

crit_loss_1 = loss_1()
crit_loss_2 = loss_2()

opt_loss_1 = optim.SGD('params')
opt_loss_2 = optim.SGD('params')

for epoch in range(num_epochs):
    for i, dat in enumerate(data_loader):
        #unpack data
        opt_loss_1.zero_grad()
        opt_loss_2.zero_grad()
        output1 = network_w_loss_1('params')
        output2 = network_w_loss_2('params')
        los_1 = crit_loss_1(output1)
        los_2 = crit_loss_2(output2)
        los_1.backward()
        los_2.backward()
        opt_loss_1.step()
        opt_loss_2.step()

или я могу обойтись без этого?

network = ANN().cuda()

crit_loss_1 = loss_1()
crit_loss_2 = loss_2()

opt = optim.SGD('params')

for epoch in range(num_epochs):
    for i, dat in enumerate(data_loader):
        #unpack data
        opt.zero_grad()
        output1 = network('params')
        output2 = network('params')
        los_1 = crit_loss_1(output1)
        los_2 = crit_loss_2(output2)
        los_1.backward()
        los_2.backward()
        opt.step()

Я использую Python 3.6.5 и PyTorch 0.4.0

1 Ответ

0 голосов
/ 27 мая 2018

Вы должны сделать 2 разных экземпляра.В противном случае вы просто обучаете одну сеть, чередуя две потери (обе потери обновят ее параметры).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...