我在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()
对此有任何想法吗?
答案 0 :(得分:0)
如果将两种类型初始化为 exact 相同的值会发生什么?他们仍然学习不同的分类吗?
您在这些分类器之上使用了什么损失函数?是否具有相同的损失函数?
在计算方面,两种类型的执行方式相同:它们将输入特征向量与n
权重向量相乘。因此,如果权重向量具有相同的值,则两种类型都应输出相同的分类。
我认为就运行时和效率而言,最好使用一个n
维分类器,而不是n
一维分类器:我相信这样可以提供更多的硬件加速选项。