Нормализация пакетной нормализации на intel MKL не удалась - PullRequest
0 голосов
/ 27 марта 2019

Я пытаюсь реализовать простой вызов нормализации партии с помощью Intel MKL, я не смог найти пример в сети, поэтому я попытался следовать логической структуре кода Intel MKL, однако я получил эту ошибку

makefile:151: recipe for target '_results/bn_layer_generator_mkl.res' failed
make[1]: *** [_results/bn_layer_generator_mkl.res] Error 255
make[1]: Leaving directory '/home/tiramisu/benchmarks/DNN/layers/bn/cpu'
makefile:82: recipe for target 'libintel64' failed
make: *** [libintel64] Error 2
[bn_layer_generator_mkl.c:84] err (-1)
FAILED

Ранее я реализовал другие функции Intel MKL (свёртка, ReLu) и мог правильно их запускать. Кто-нибудь знает, что я делаю неправильно с нормализацией партии? Вот мой код

dnnError_t err;

size_t outputSize[dimension] = {N, N, FIn, BATCH_SIZE};
size_t outputStrides[dimension] = {1, N, N * N, N * N * FIn};

size_t inputSize[dimension] = {N, N, FIn, BATCH_SIZE};
size_t inputStrides[dimension] = {1, N, N * N, N * N * FIn};

dnnLayout_t lt_user_input = NULL,
            lt_user_output = NULL;
dnnLayout_t lt_bn_input = NULL,
            lt_bn_output = NULL;
dnnPrimitive_t cv_user_to_bn_input = NULL,
               cv_bn_to_user_output = NULL;
dnnPrimitive_t bn = NULL;
double *resBn1[dnnResourceNumber] = {0};
dnnPrimitiveAttributes_t attributes = NULL;

double *user_i = NULL,
       *user_o = NULL;

/*** data allocation ***/
user_i = (double *)malloc(sizeof(double) * (N * N * FIn * BATCH_SIZE));
if (user_i == NULL)
{
    err = E_MEMORY_ERROR;
    goto bail_out;
}

/*** User's data description ***/
CHECK_ERR(dnnLayoutCreate_F64(&lt_user_input, dimension, inputSize, inputStrides), err);
CHECK_ERR(dnnLayoutCreate_F64(&lt_user_output, dimension, outputSize, outputStrides), err);

/* Initialize attributes */
CHECK_ERR(dnnPrimitiveAttributesCreate_F64(&attributes), err);

/*** Bn section ***/
CHECK_ERR(dnnBatchNormalizationCreateBackwardData_F64(&bn, attributes, lt_user_input, -0.01), err);

CHECK_ERR(dnnLayoutCreateFromPrimitive_F64(&lt_bn_input, bn, dnnResourceSrc), err);
CHECK_ERR(dnnLayoutCreateFromPrimitive_F64(&lt_bn_output, bn, dnnResourceDst), err);
CHECK_ERR(init_conversion(&cv_user_to_bn_input, &resBn1[dnnResourceSrc], lt_bn_input, lt_user_input, user_i), err);
CHECK_ERR(dnnAllocateBuffer_F64((void **)&resBn1[dnnResourceDst], lt_bn_output), err);
CHECK_ERR(init_conversion(&cv_bn_to_user_output, &user_o, lt_user_output, lt_bn_output, resBn1[dnnResourceDst]), err);

srand(1);

for (int i = 0; i < inputSize[0] * inputSize[1] * inputSize[2] * inputSize[3]; i++)
    user_i[i] = rand() % 10 - 5;

/*** Execution ***/
if (cv_user_to_bn_input)
    CHECK_ERR(dnnConversionExecute_F64(cv_user_to_bn_input, user_i, resBn1[dnnResourceSrc]), err);

CHECK_ERR(dnnExecute_F64(bn, (void *)resBn1), err);

1 Ответ

0 голосов
/ 26 июня 2019

Компонент Deep Neural Network (DNN) устарел и будет удален в следующем выпуске Intel MKL.Мы продолжим поддерживать предоставление оптимизированных функций для глубоких нейронных сетей в Intel Math Kernel Library для глубоких нейронных сетей (Intel MKL-DNN).Это реализация с открытым исходным кодом, доступная на hithub - https://github.com/intel/mkl-dnn. Пожалуйста, проверьте, как работает пакетный режим с этой библиотекой.

...