Неинициализированные вложенные указатели после их инициализации (не детерминированный) [C++]C++

Программы на C++. Форум разработчиков
Ответить Пред. темаСлед. тема
Anonymous
 Неинициализированные вложенные указатели после их инициализации (не детерминированный) [C++]

Сообщение Anonymous »

Я разрабатываю нейронную сеть на C++
У меня есть этот код для инициализации 4D-массива, размеры которого:
Каждое важное значение, рассчитанное нейроном, например Линейная функция и функция активации
внутри массива, представляющего каждый нейрон внутри слоя
внутри массива, представляющего слои
внутри массива, представляющего временные шаги
Код, который инициализирует его:

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

double**** execution_results = new double*** [real_t_count];

for (size_t t = 0; t < real_t_count; t++)
{
std::tuple inference_execution_results = ExecuteStore(X[t]);
execution_results[t] = std::get(inference_execution_results);
}
Внутри NN->ExecuteStore(double*):

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

double*** execution_results = new double** [shape_length];

// Not instantiated due to input layer not being instantiated
execution_results[0] = NULL;
for (size_t i = 1; i < shape_length; i++)
{
size_t layer_length = shape[i];
ILayer* current_layer = layers[i - 1];
current_layer_execution_results = execution_results[i] = new double* [layer_length];
for (size_t j = 0; j < layer_length; j++)
{
INeuron* current_neuron = current_layer->neurons[j];
current_layer_execution_results[j] = current_neuron->ExecuteStore(network_activations);

}

}
return std::tuple(execution_results, network_activations);
INeuron*->ExecuteStore(double**) возвращает массив элементов, упомянутых выше, и с этим нет проблем (по крайней мере, на данный момент я не знаю, чего ожидать :( | Я думал, это детерминизм).

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

for (int layer_i = shape_length - 1; layer_i >= 1; layer_i--)
{
// current layer having not allocated neurons when layer_i == 2 - layers[1] == NULL
// execution_results[0][2][0] not having stored data
//          [t][l][n]
size_t layer_length = shape[layer_i];
ILayer* current_layer = layers[layer_i - 1];
if (layer_i == 2) neurons[i]; GetGradients(execution_results, real_t_count, gradients, network_costs, network_activations);
}
INeuron->GetGradients(double Execution_results, double Neuron_cost):

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

double linear_function_gradient = neuron_cost * Derivatives::DerivativeOf(execution_results[0], this->activation_function); 

Подробнее здесь: [url]https://stackoverflow.com/questions/76807636/uninitialized-nested-pointers-after-initializing-them-not-deterministic-c[/url]
Реклама
Ответить Пред. темаСлед. тема

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

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

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

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

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Указатели на символы и указатели на целые числа (++)
    Anonymous » » в форуме C++
    0 Ответы
    85 Просмотры
    Последнее сообщение Anonymous
  • Объявите неинициализированные автоматические переменные с типом возвращающей функции
    Гость » » в форуме C++
    0 Ответы
    38 Просмотры
    Последнее сообщение Гость
  • Компиляция std::regex с помощью libasan выдает «неинициализированные» предупреждения
    Anonymous » » в форуме C++
    0 Ответы
    12 Просмотры
    Последнее сообщение Anonymous
  • Детерминированный конечный автомат на сборке x86 (GCC)
    Anonymous » » в форуме Linux
    0 Ответы
    59 Просмотры
    Последнее сообщение Anonymous
  • SensorEventListener onSensorChanged() больше не вызывает детерминированный уровень API 33/34
    Anonymous » » в форуме Android
    0 Ответы
    11 Просмотры
    Последнее сообщение Anonymous

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