nn.NLLLoss () проблема с целевым размером - PullRequest
0 голосов
/ 26 мая 2019

У меня есть метка размером [32,2,10], и я хочу разделить эту метку на label1 и label2, с помощью которых мне нужно вычислить потери по входным данным для каждой метки1 и label2.

Модель VGG16 + дополнительный классификатор.

выходные классы = 10

class cust_vgg():
    def forward(self, images,model):
        out = model.features(images)
        out1 = model.avgpool(out)
        out1 = out1.reshape(out1.size(0), -1)
        return model.classifier(out1), model.classifier1(out1)  

out = cust_vgg.forward(images,model)
out_classifier,out_classifier1 = out  
labels1,labels2 = labels[0]
loss_classifier = nn.NLLLoss(out_classifier, labels1)
loss_classifier1 = nn.NLLLoss(out_classifier1,labels2)
loss = loss_classifier + loss_classifier1
loss.backward()
opt.step()

Входной batch_size должен совпадать с целевым batch_size для nn.NLLLoss ()

Ошибка: Ожидаемый ввод batch_size (32) для соответствия целевому batch_size (10).

1 Ответ

0 голосов
/ 26 мая 2019

Я не уверен на 100%, так как я не понимаю, что означают здесь ярлыки.Но я думаю, что вы хотите выбрать две разные метки из второго индекса.Поэтому вы должны изменить:

labels1,labels2 = labels[0]

на

labels1,labels2 = labels[:, 0], labels[:, 1]

Кроме того, NLLLoss принимает индекс класса в качестве ввода, вам не нужно использовать метки с горячим кодированием.Однако эта проблема уже решена здесь

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