Добавление дополнительных данных в стандартную нейронную сеть свертки в pytorch - PullRequest
1 голос
/ 14 января 2020

Я пытаюсь получить дополнительные данные во время обучения Resnet18. В моем случае это гендерная информация, выраженная как gender=Tensor([g]), where g =[-1|0|1] for [female|unknown|male], и некоторый дескриптор формы, полученный на предыдущих шагах, который имеет форму desc=Tensor([...]), desc.shape = ([64,]). Я следовал подсказкам, обнаруженным в этом потоке переполнения стека , и успешно добавил информацию о поле, однако после добавления тензора des c потеря становится равной NaN. Я попытался нормализовать полученный слой, но безрезультатно. Вот модифицированная функция переадресации Resnet18, которую я использую:

def forward(self, xy):
    x = xy[0] #torch.Size([4, 3, 224, 224])
    desc = xy[1] #torch.Size([4, 64])
    genders = xy[2] #torch.Size([1, 4])

    x = self.conv1(x) #torch.Size([4, 64, 112, 112])
    x = self.bn1(x) #torch.Size([4, 64, 112, 112])
    x = self.relu(x) # torch.Size([4, 64, 112, 112])
    x = self.maxpool(x) #torch.Size([4, 64, 56, 56])

    x = self.layer1(x) #torch.Size([4, 64, 56, 56])
    x = self.layer2(x) #torch.Size([4, 128, 28, 28])
    x = self.layer3(x) #torch.Size([4, 256, 14, 14])
    x = self.layer4(x) #torch.Size([4, 512, 7, 7])

    x = self.avgpool(x) #torch.Size([4, 512, 1, 1])
    x = torch.flatten(x, 1) #torch.Size([4, 512])
    x = self.fc(x) #torch.Size([4, 35]); torch.norm(x,dim=1) == tensor([4.4604, 1.9574, 2.0123, 1.9583])


    y = genders.transpose(1,0) #torch.Size([4, 1]);  torch.norm(y,dim=1) == tensor([1., 1., 1., 1.])
    desc = desc.type(torch.float32) #torch.Size([4, 64]); torch.norm(desc,dim=1) == tensor([1., 1., 1., 1.]

    z1 = torch.cat([x,y,desc],dim=1) #torch.Size([4, 100]); torch.norm(z1,dim=1) == tensor([3.6243, 2.5945, 3.1520, 3.0312])
    #z2 = self.bn2(z1)
    z1 = self.fc2(z1) #torch.Size([4, 35]); torch.norm(z1,dim=1) == tensor([1.2954, 0.9399, 1.0137, 1.1230]
    return z1

Не могли бы вы знать, как правильно добавить дополнительные данные в слой?

Лучший

Крис

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