问题描述
使用超图卷积时报错
源程序如下所示:
class HyperConv(nn.Module):
def __init__(self, layers, emb_dim):
super(HyperConv, self).__init__()
self.layers = layers
self.emb_dim = emb_dim
self.hypergraph_conv = nn.ModuleList([])
for i in range(self.layers):
self.hypergraph_conv.append(HGNN_conv(self.emb_dim, False))
def forward(self, adjacency, embedding):
item_embeddings = embedding
item_embedding_layer0 = item_embeddings
final = [item_embedding_layer0]
for i in range(self.layers):
item_embeddings = self.hypergraph_conv[i](item_embeddings, adjacency)
final.append(item_embeddings)
item_embeddings = np.sum(final, 0) / (self.layers+1)
return item_embeddings
解决方案:
final为包含多个tensor的多维list,先将其转化为torch.Tensor类型,再用torch.sum()进行求和,即可解决问题。修改代码如下所示:
item_embeddings = torch.sum(torch.stack(final), 0)
item_embeddings = item_embeddings / (self.layers+1)