| 411 | |
| 412 | class GraphConvolution(nn.Module): |
| 413 | def __init__(self, input_dim, output_dim, dropout=0., is_sparse_inputs=False, bias=False, activation = F.relu,featureless=False): |
| 414 | super(GraphConvolution, self).__init__() |
| 415 | self.dropout = dropout |
| 416 | self.bias = bias |
| 417 | self.activation = activation |
| 418 | self.is_sparse_inputs = is_sparse_inputs |
| 419 | self.featureless = featureless |
| 420 | # self.num_features_nonzero = num_features_nonzero |
| 421 | # self.user_weight = nn.Parameter(torch.randn(input_dim, output_dim)) |
| 422 | # self.item_weight = nn.Parameter(torch.randn(input_dim, output_dim)) |
| 423 | self.user_weight = nn.Parameter(torch.empty(input_dim, output_dim)) |
| 424 | self.item_weight = nn.Parameter(torch.empty(input_dim, output_dim)) |
| 425 | nn.init.xavier_uniform_(self.user_weight) |
| 426 | nn.init.xavier_uniform_(self.item_weight) |
| 427 | self.bias = None |
| 428 | if bias: |
| 429 | self.bias = nn.Parameter(torch.zeros(output_dim)) |
| 430 | |
| 431 | |
| 432 | def forward(self, user_x, item_x, ui_graph, iu_graph): |