nn.Linear(feature_size,1)* n与PyTorch中的nn.Linear(feature_size,n)

时间:2018-09-13 09:39:17

标签: python machine-learning neural-network deep-learning pytorch

我在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在 多标签分类模型。

实际上,那些fc的初始化方式不同,导致不同的结果。哪一种是正确的,如果我想使用两种类型的fc获得相似的结果,该怎么办。


其他信息:

我找出导致不良结果的原因:
第一类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 :(得分:0)

如果将两种类型初始化为 exact 相同的值会发生什么?他们仍然学习不同的分类吗?
您在这些分类器之上使用了什么损失函数?是否具有相同的损失函数?

在计算方面,两种类型的执行方式相同:它们将输入特征向量与n权重向量相乘。因此,如果权重向量具有相同的值,则两种类型都应输出相同的分类。
我认为就运行时和效率而言,最好使用一个n维分类器,而不是n一维分类器:我相信这样可以提供更多的硬件加速选项。