Почему я получаю ошибку сегментации (SIGSEGV) при использовании PyTorch и вызове прямого прохода?

Я получал ошибку нарушения сегментации, также называемую SIGSEGV, при вызове прямого прохода в моей сверточной нейронной сети на бэкэнд-графе PyTorch:

Process finished with exit code 139 (interrupted by signal 11: SIGSEGV)

Я использую torch версии 1.5.0.

Эта ошибка возникает после того, как я создал экземпляр своей сверточной нейронной сети с графом и впервые вызываю на нем метод forward, тем самым передавая данные.

Это часть моего сценария:

# create model
model: LinkPredictHetero = LinkPredictHetero(
    g=graph,
    h_dim=h_dim,
    out_dim=h_out,
    num_hidden_layers=n_hidden_layers,
)
    
# call forward pass
embed = model(graph)

В graphявляется экземпляром dgl.heterograph.

В forward()метод модели связан с прямым методом класса базового уровня, определенным следующим образом:

def forward(self, graph):
    graph = graph.local_var()
    hs = {}
    hs = self.embed_layer(graph)
    for layer in self.layers:
        hs = layer(g, inputs = hs)
    return hs

Относительно этого прямого метода,self.embed_layer это torch.nn.ModuleDict():

self.embed_layer = torch.nn.ModuleDict()
for node_type in self.graph.node_types:
    in_size = list(self.graph.nodes[node_type].data['feature'].size())[1]
    self.embed_layer[node_type] = torch.nn.Linear(in_size, self.embed_size)

а также self.layers это torch.nn.ModuleList() к которому добавляются различные реализации уровня.

Итак, когда в сценарии я вызываю model(deephet.graph), который должен вызывать forward() метода слоя, нарушение сегментации завершает мою программу, а также завершает работу python.

Не могли бы вы помочь мне узнать, почему это происходит? Я был бы очень признателен. Спасибо, уважаемое сообщество.

0 ответов

Другие вопросы по тегам