nn.Linear (feature_size, 1) * n против nn.Linear (feature_size, n) в PyTorch - PullRequest
0 голосов
/ 13 сентября 2018

Я пишу два типа линейного классификатора в PyTorch:

torch.manual_seed(0)
fc = []  
for i in range(n):  
  fc.append(nn.Linear(feature_size, 1)) 

Другой:

torch.manual_seed(0)
fc = nn.Linear(feature_size, n)

И разные результаты были получены с использованием этих двух типов фк в мультиМодель классификации меток.

На самом деле, эти fc инициализируются по-разному и приводят к разным результатам.Какой из них правильный и что мне делать, если я хочу получить аналогичные результаты, используя два типа фк.


Дополнительная информация:

Я выясняю причину, приводящую к плохому результату:1014 * Первый тип FC не обновляется в процессе обучения!
Но я не знаю, почему не происходит обновление, мой код выглядит следующим образом:

x = self.features(input)
res = []
for i in range(self.num_classes):
    res.append(self.fc[i](x.cpu()))
res = torch.cat(res, 1)
return res.cuda()

Есть идеи по этому поводу?

1 Ответ

0 голосов
/ 13 сентября 2018

Что произойдет, если вы инициализируете два типа одинаковыми точными значениями? они все еще изучают различные классификации?
Какую функцию потерь вы используете поверх этих классификаторов? Это та же функция потерь?

С точки зрения вычислений оба типа выполняют одно и то же: они умножают вектор входных объектов на n весовых векторов. Таким образом, если векторы весов имеют одинаковые значения, оба типа должны выводить одинаковые классификации.
Я полагаю, что с точки зрения времени выполнения и эффективности лучше использовать один n классификатор измерений, а не n 1D: таким образом, я полагаю, допускается больше вариантов аппаратного ускорения.

...