spectral_norm

问题描述 投票:0回答:2

我想在 GCNConv 层上调用 torch.nn.utils Spectrum_norm 函数

gc1 = GCNConv(18, 16)
spectral_norm(gc1)

但我收到以下错误:

KeyError: 'weight'

意味着 gc1._parameters 没有权重(只有偏差):

gc1._parameters
OrderedDict([('bias', Parameter containing:
              tensor([0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.],
                     requires_grad=True))])

但是,gc1.parameters() 存储了两个对象,其中一个是 16 x 18 矩阵(权重矩阵)。

for p in gc1.parameters():
  print('P: ', p.shape)
P:  torch.Size([16])
P:  torch.Size([16, 18])

如何使 Spectrum_norm 函数在 GCNConv 模块上工作?

deep-learning pytorch pytorch-geometric
2个回答
1
投票

根据源代码,权重参数被包装在 GCNConv 对象中包含的线性模块中,如

lin

我想这应该可行:

gc1 = GCNConv(18, 16)
spectral_norm(gc1.lin)

0
投票

这是因为torch_geometric 2.0.0版本及后续版本将图卷积的权重命名为“lin”,与spectrum_norm函数冲突。您可以使用1.7.2及更早版本的torch_geometric,它将完美解决您的问题。

© www.soinside.com 2019 - 2024. All rights reserved.