Объединение нейронных сетей Pytorch - PullRequest
0 голосов
/ 03 октября 2018

У меня 2 изображения в качестве входных данных, x1 и x2 , и я пытаюсь использовать свертку как меру подобия .Идея состоит в том, что изученные веса заменяют более традиционную меру сходства (взаимная корреляция, NN, ...).Определяя мою прямую функцию следующим образом:

def forward(self,x1,x2):
    out_conv1a = self.conv1(x1)
    out_conv2a = self.conv2(out_conv1a)
    out_conv3a = self.conv3(out_conv2a)

    out_conv1b = self.conv1(x2)
    out_conv2b = self.conv2(out_conv1b)
    out_conv3b = self.conv3(out_conv2b)

Теперь для меры подобия:

out_cat = torch.cat([out_conv3a, out_conv3b],dim=1)
futher_conv = nn.Conv2d(out_cat)

Мой вопрос выглядит следующим образом:

1) Свернутые в глубину / разделимые свертки, как в google paper , дадут какое-либо преимущество перед 2d сверткой составного ввода.В этом отношении свертка может быть мерой сходства, взаимная корреляция и свертка очень похожи.

2) Насколько я понимаю, опция groups = 2 в conv2d предоставит 2 отдельных входа для обучения весов, в этомслучай каждой из предыдущих сетей весов.Как они впоследствии объединяются?

Базовую концепцию см. здесь .

1 Ответ

0 голосов
/ 03 октября 2018

Используя слой nn.Conv2d, вы предполагаете, что веса являются обучаемыми параметрами.Однако, если вы хотите отфильтровать одну карту объектов с другой, вы можете погрузиться глубже и использовать torch.nn.functional.conv2d для явного определения как ввода, так и фильтрации сами:

out = torch.nn.functional.conv2d(out_conv3a, out_conv3b)  
...