Case 1:
class _ResGraphConv(nn.Module):
def __init__(self, adj, input_dim, output_dim, hid_dim, p_dropout):
super(_ResGraphConv, self).__init__()
self.gconv1 = _GraphConv(adj, input_dim, output_dim, p_dropout)
self.gconv2 = _GraphConv(adj, input_dim, output_dim, p_dropout)
def forward(self, x):
residual = x
out = self.gconv1(x)
out = self.gconv2(out)
return residual + out
class MyGCNConv(nn.Module):
def __init__(self, adj, input_dim, output_dim, hid_dim, p_dropout):
super(MyGCNConv, self).__init__()
layers = []
for i in range(2):
layers.append(_ResGraphConv(adj, input_dim, hid_dim, output_dim, p_dropout=p_dropout))
self.myLayers = nn.Sequential(*layers)
def forward(self, x):
out = self.myLayers(x)
return out
Case 2:
class _ResGraphConv(nn.Module):
def __init__(self, adj, input_dim, output_dim, hid_dim, p_dropout):
super(_ResGraphConv, self).__init__()
self.gconv1 = _GraphConv(adj, input_dim, output_dim, p_dropout)
self.gconv2 = _GraphConv(adj, input_dim, output_dim, p_dropout)
self.gconv3 = _GraphConv(adj, input_dim, output_dim, p_dropout)
self.gconv4 = _GraphConv(adj, input_dim, output_dim, p_dropout)
def forward(self, x):
residual = x
out = self.gconv1(x)
out = self.gconv2(out)
out = residual + out
y = out
residual = out
out = self.gconv3(y)
out = self.gconv4(out)
return residual + out
class MyGCNConv(nn.Module):
def __init__(self, adj, input_dim, output_dim, hid_dim, p_dropout):
super(MyGCNConv, self).__init__()
self.myLayers = _ResGraphConv(adj, input_dim, hid_dim, output_dim,p_dropout=p_dropout)
def forward(self, x):
out = self.myLayers(x)
return out
Is there any difference between these two and Is there any disadvantage of using case 2?
I want to create 2 residual block in the same class.