【问题标题】:nn.Linear(feature_size, 1)*n vs nn.Linear(feature_size, n) in PyTorchPyTorch 中的 nn.Linear(feature_size, 1)*n 与 nn.Linear(feature_size, n)
【发布时间】:2018-09-13 09:39:16
【问题描述】:

我在 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)

并且在a中使用这两种类型的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()

对此有什么想法吗?

【问题讨论】:

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


    【解决方案1】:

    如果将这两种类型初始化为完全相同相同的值会怎样?他们还学习不同的分类吗?
    您在这些分类器之上使用什么损失函数?是一样的损失函数吗?

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

    【讨论】:

    • 我不能在这里写代码,请移到我上面的答案。谢谢你。
    • 你的对象是否继承自nn.Module
    猜你喜欢
    • 2019-04-27
    • 2019-07-21
    • 2023-03-25
    • 2019-12-22
    • 2018-11-01
    • 2019-06-23
    • 2021-09-09
    • 2022-01-24
    • 2020-11-09
    相关资源
    最近更新 更多