Как сделать реализацию нейронной сети в C ++ эффективной? - PullRequest
1 голос
/ 13 февраля 2020

У меня есть код C ++, который я периодически оцениваю для различных входных данных, свойства сети читаются из другого файла. Стоимость оценки высока b c повторного объявления и удаления переменных (мое предположение), любая идея о том, как ее уменьшить:

void NN_eval(Network *net, double rsq, double &Z)
{
    double r;
    int layer;
    r = sqrt(rsq);
    double *L_k, *L_kp;
    L_k = new double [1];
    L_kp = new double [net->archtwobody[1]];
    for (int i = 0 ; i < net->archtwobody[1]; i++)
        L_kp[i] = 0.0;
    L_k[0] = -(r-cutmax)/cutmax;
    int *A_size = new int [2];
    for (layer = 0 ; layer < net->num_layertwobody+1; layer ++ ){
        A_size[0] = net->archtwobody[layer]; A_size[1] = net->archtwobody[layer+1];

        net->multiply(net->Wtwobody[layer], A_size, L_k, L_kp);
        net->add_bias(net->btwobody[layer], A_size[1], L_kp);
        net->apply_nonlinearity(net->functwobody[layer], L_kp, A_size[1]);

        delete [] L_k;
        L_k = new double [net->archtwobody[layer+1]];
        for (int i = 0; i <net->archtwobody[layer+1]; i++) {
            L_k[i] = L_kp[i];
        }
        delete [] L_kp;

        if (layer != net->num_layertwobody){
            L_kp = new double [net->archtwobody[layer+2]];
            for (int i = 0 ; i < net->archtwobody[layer+2]; i++)
                L_kp[i] = 0.0;
        } else{
          L_kp = new double [net->archtwobody[layer+1]];
          for (int i = 0 ; i < net->archtwobody[layer+1]; i++)
              L_kp[i] = 0.0;
        }
    }
    Z = L_k[0]*net->fmax2;
    delete [] L_k;
    delete [] L_kp;
    delete [] A_size;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...