Импортируйте Pytorch для создания нейронной сети. Ошибка выполненияC++

Программы на C++. Форум разработчиков
Ответить Пред. темаСлед. тема
Anonymous
 Импортируйте Pytorch для создания нейронной сети. Ошибка выполнения

Сообщение Anonymous »

Я использую C++/Qt для запуска своего приложения Qt.
Разработочная версия:
Python: 3.12
Qt: 6.6.3
C++: std 17
Visual Studio 2022
В своем коде я использую API Python/C для запуска скрипта Python, например:

Код: Выделить всё

   PyObject* pModule = PyImport_ImportModule("DataModule");
if (pModule == nullptr)
{
PyErr_Print();
return QString();
}

PyObject* pFunc = PyObject_GetAttrString(pModule, "RunNeuralNetwork");

PyObject* py_outputDir = QStringToPyObject(outputDir);
PyObject* py_fileName = QStringToPyObject(fileName);

PyObject* pArgs = PyTuple_New(4);
PyTuple_SetItem(pArgs, 0, py_outputDir);
PyTuple_SetItem(pArgs, 1, py_fileName);

PyObject* pReturn = PyObject_CallObject(pFunc, pArgs);

QString qString = PyObjectToQString(pReturn);
В файл «DataModule.py» я импортирую Pytorch и создаю функцию нейронной сети.
код типа:

Код: Выделить всё

import torch
from torch import nn
from torch.func import jacrev
from torch.utils.data import Dataset
from torch.utils.data import DataLoader
from multiprocessing import Pool

...

class NeuralNetwork(nn.Module):

def __init__(self,
dim_x: int,
dim_y: int,
num_hidden_layer: int,
num_node: int,
acti_name: str,
kwarg_acti: dict = None,
use_bn: bool = False,
normal=None) -> None:
super().__init__()
activation_func = getattr(nn, acti_name)
if kwarg_acti is None:
kwarg_acti = dict()

dim_list = [dim_x] + [num_node] * num_hidden_layer
layer_list = []
for i in range(num_hidden_layer):
layer_list.append(nn.Linear(dim_list[i], dim_list[i + 1]))
if use_bn:
layer_list.append(nn.BatchNorm1d(dim_list[i + 1]))
layer_list.append(activation_func(**kwarg_acti))
layer_list.append(nn.Linear(dim_list[i + 1], dim_y))
# layer_list.append(nn.BatchNorm1d(dim_y))
self.layers = nn.Sequential(*layer_list)

if normal is None:
self.loc_x = torch.tensor(0.)
self.loc_y = torch.tensor(0.)
self.sca_x = torch.tensor(1.)
self.sca_y = torch.tensor(1.)
else:
self.loc_x, self.loc_y, self.sca_x, self.sca_y = normal

def forward(self, x):
x = self.layers((x - self.loc_x) / self.sca_x)
return x * self.sca_y + self.loc_y
Когда я запускаю этот код в C++ Python/C API, иногда он работает хорошо, а иногда происходит сбой.
Он не может работать ни в основной поток или дочерний поток.
Информация о сбое в VS:

Код: Выделить всё

0x00007FFE06A5EE30 (python311.dll) Exception in MyApp.exe
0xC0000005: access violation reading 0xFFFFFFFFFFFFFFFF
Я считаю, что это проблема многопоточности, поэтому я использую приведенный ниже код в сценарии «.py».

Код: Выделить всё

torch.set_num_threads(1)
Это все еще не работает.
Пожалуйста, помогите!
использование C++ через API Python/C ' Скрипт .py' импортирует pytorch без ошибок.

Подробнее здесь: https://stackoverflow.com/questions/793 ... ning-error
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «C++»