Я хотел бы добавить слой GCN с заданной матрицей смежности в начале одномерного сверточного автокодировщика. Кажется, что для 1DCNN каждый пакет данных имеет размерность (batch_size, Number_features, Number_nodes (векторное измерение)), тогда как для GCN требуется (batch_size, Number_node, snumber_features). Так нужно ли нам менять местами оси тензоров факелов при их объединении? У меня есть код факела, который работает путем замены осей (см. функцию вперед), но мне это кажется очень странным. Есть ли лучший способ сделать это?
class ConvAutoencoderGCN(nn.Module):
def __init__(self,num_nodes,n_features):
super(ConvAutoencoderGCN, self).__init__()
self.num_nodes = num_nodes
self.n_features = n_features
self.gcn1 = GCNConv(n_features, 1)
self.encoder = nn.Sequential(
nn.Conv1d(1, 16, kernel_size=4, stride=1, padding=2), # [batch, 16, 128, 128]
nn.ReLU(),
nn.MaxPool1d(kernel_size=4, stride=8), # [batch, 16, 64, 64]
nn.Conv1d(16, 32, kernel_size=4, stride=1, padding=0), # [batch, 32, 64, 64]
nn.ReLU(),
nn.MaxPool1d(kernel_size=4, stride=8), # [batch, 32, 32, 32]
nn.Conv1d(32, 1, kernel_size=4, stride=1, padding=2), # [batch, 64, 32, 32]
nn.ReLU(),
nn.MaxPool1d(kernel_size=2, stride=2), # [batch, 64, 16, 16]
)
# Flattening layer
self.flatten = nn.Flatten()
self.unflatten = nn.Unflatten(1, (1, 128))
self.decoder = nn.Sequential(
nn.ConvTranspose1d(1, 32, 3, stride=4, padding=0, output_padding=1), # [batch, 32, 32, 32]
nn.ReLU(),
nn.ConvTranspose1d(32, 32, 3, stride=4, padding=0, output_padding=1), # [batch, 32, 32, 32]
nn.ReLU(),
nn.ConvTranspose1d(32, 16, 3, stride=4, padding=0, output_padding=1), # [batch, 16, 64, 64]
nn.ReLU(),
nn.ConvTranspose1d(16, 1, 3, stride=2, padding=1, output_padding=1), # [batch, 1, 128, 128]
nn.Sigmoid()
)
def forward(self, x):
x = torch.swapaxes(x, 1, 2)
x = self.gcn1(x, this_edge_index, this_edge_weight)
x = torch.swapaxes(x, 1, 2)
x = self.encoder(x)
x = self.flatten(x)
x = self.unflatten(x)
x = self.decoder(x)
return x
Подробнее здесь: https://stackoverflow.com/questions/783 ... in-pytorch