У меня есть этот код для инициализации 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);
}
Код: Выделить всё
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);

Код: Выделить всё
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);
}
Код: Выделить всё
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]