Почему я получаю ошибку сегментации (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.
Не могли бы вы помочь мне узнать, почему это происходит? Я был бы очень признателен. Спасибо, уважаемое сообщество.