class SGNN(nn.Module): # nn.Module을 상속받음으로써 PyTorch의 신경망 구조로 동작
def __init__(self, in_feats, hidden_feats, out_feats):
super(SGNN, self).__init__() # nn.Module의 생성자를 호출하여 초기화
self.layer1 = SGNNLayer(in_feats, hidden_feats) # 첫 번째 레이어
self.layer2 = SGNNLayer(hidden_feats, out_feats) # 두 번째 레이어
def forward(self, graph): # forward 메서드는 순전파 로직을 정의
h = graph.ndata['feat'] # 그래프의 노드 피처를 입력으로 사용
print(f"입력 피처 차원: {h.shape}")
h = self.layer1(graph, h) # 첫 번째 레이어 통과
print(f"첫 번째 레이어 출력 차원: {h.shape}")
h = self.layer2(graph, h) # 두 번째 레이어 통과
return h # 최종 출력
nn.Model 클래스를 상속받아 새로운 신경망 레이어나 모델을 정의할 수 있다.
PyTorch에서 모든 신경망은 nn.Moule을 기반으로 구현되며, 이를 통해 레이어를 생성하고, 학습 가능한 파라미터(가중치)를 자동으로 추적할 수 있다.
nn.Module의 역할
- 신경망의 레이어 또는 모델을 정의하는 데 사용된다.
- 파라미터 관리
: nn.Module을 상속받은 클래스 내부에서 선언된 파라미터(nn.Linear와 같은 레이어의 가중치)는 자동으로 추적된다. - 재귀적으로 모율 구성
: nn.Module을 상속받은 클래스 내에서 또 다른 nn.Module(레이어나 서브모듈)을 선언하면, 이를 재귀적으로 관리하고 모듈 간에 데이터 전파를 쉽게 할 수 있다. - forward 메서드 제공
: nn.Module 클래스는 forward() 메서드를 정의하도록 요구한다. 이 메서드는 입력 데이터를 ㄹ받아서 레이어에 통과시켜, 신경망의 순전파(forward propagation)을 정의한다. - 파라미터 초기화 및 저장/로드
: nn.Module은 신경망의 파라미터 초기화, 저장, 로드 기능도 제공한다.