![```python
import torch
import torch.nn as nn
import torch.nn.functional as F
class LightGCNBase(nn.Module):
"""単一のグラフ上での伝播を担当し、すべてのノードの埋め込みを出力する内部LightGCNモデル。"""
def __init__(self, num_nodes: int, embedding_dim: int = 64, n_layers: int = 3):
super().__init__()
self.num_nodes = num_nodes
self.embedding_dim = embedding_dim
self.n_layers = n_layers
self.embedding = nn.Embedding(num_nodes, embedding_dim)
nn.init.normal_(self.embedding.weight, std=0.1)
def propagate(self, graph: torch.Tensor) -> torch.Tensor:
"""与えられたグラフ上でK層のLightGCN伝播を実行し、すべてのノードの最終的な埋め込みを返します。"""
all_emb = self.embedding.weight # [N, d]
embs = [all_emb]
for _ in range(self.n_layers):
all_emb = torch.sparse.mm(graph, all_emb) # [N, d]
embs.append(all_emb)
embs_stack = torch.stack(embs, dim=0) # [K+1, N, d]
out = torch.mean(embs_stack, dim=0) # [N, d]
return out
class MultiGraphLightGCN(nn.Module):
```](/_next/image?url=https%3A%2F%2Fpub-8c0ddfa5c0454d40822bc9944fe6f303.r2.dev%2Fai-drawings%2FKBimdOJW5qMAfEg0lBE9pzFIVeNktoy7%2F9984c727-08a9-4276-9a16-4f3639b94e55%2Ff9426d87-f474-4d36-8cdf-66efb9dfe471.png&w=3840&q=75)
```python import torch import torch.nn as nn import torch.nn.functional as F class LightGCNBase(nn.Module): """単一のグラフ上での伝播を担当し、すべてのノードの埋め込みを出力する内部LightGCNモデル。""" def __init__(self, num_nodes: int, embedding_dim: int = 64, n_layers: int = 3): super().__init__() self.num_nodes = num_nodes self.embedding_dim = embedding_dim self.n_layers = n_layers self.embedding = nn.Embedding(num_nodes, embedding_dim) nn.init.normal_(self.embedding.weight, std=0.1) def propagate(self, graph: torch.Tensor) -> torch.Tensor: """与えられたグラフ上でK層のLightGCN伝播を実行し、すべてのノードの最終的な埋め込みを返します。""" all_emb = self.embedding.weight # [N, d] embs = [all_emb] for _ in range(self.n_layers): all_emb = torch.sparse.mm(graph, all_emb) # [N, d] embs.append(all_emb) embs_stack = torch.stack(embs, dim=0) # [K+1, N, d] out = torch.mean(embs_stack, dim=0) # [N, d] return out class MultiGraphLightGCN(nn.Module): ```

変分オートエンコーダ (VAE) の、クリーンでプロフェッショナルな深層学習アーキテクチャ図を示す。左側には、畳み込み層...