Получить параметры / веса для каждого слоя модели, используя API c ++ на OpenVINO - PullRequest
1 голос
/ 27 января 2020

Я искал способ получить тензор весов / параметров и смещений для каждого уровня сети, используя C ++ API на платформе OpenVINO. Я не могу найти ничего ни в документации, ни в примерах. Как я могу извлечь эти тензоры?

Спасибо, Цезарь.

РЕДАКТИРОВАТЬ: Код для получения весов и уклонов отдельно:

for (auto&& layer : this->pImplementation->network) {
        weightsbuf << "Layer name: " << layer->name << std::endl;
        weightsbuf << "Parameters:" << std::endl;

        for (auto&& param : layer->params) {

            weightsbuf << '\t' << param.first << ": " << param.second << std::endl;
        }

        std::vector<int> kernelvect;
        auto kernelsize = layer->params.at("kernel");

        std::stringstream ss(kernelsize);

        // split by comma kernel size
        for (int i; ss >> i;) {
            kernelvect.push_back(i);
            if (ss.peek() == ',')
                ss.ignore();
        }
        int noutputs = std::stoi(layer->params.at("output"));
        int nweights = kernelvect[0] * kernelvect[1] * noutputs;
        int nbias = noutputs;

        for (auto&& blob : layer->blobs) {
            weightsbuf << '\t' << blob.first << ": ";
            for (size_t w = 0; w < nweights; ++w) {
                weightsbuf << blob.second->buffer().as<float*>()[w] << " ";
            }
            weightsbuf << std::endl;
            weightsbuf << '\t' << "biases:";
            for (size_t b = 0; b < nbias; ++b) {
                weightsbuf << blob.second->buffer().as<float*>()[nweights + b] << " ";
            }
        }
        weightsbuf << std::endl;
    }

1 Ответ

1 голос
/ 29 января 2020

Похоже, нет официального примера, чтобы показать эту функциональность. Я также не нашел ничего подобного.

Я реализовал базовый c образец, который печатает информацию о каждом слое сети. Пожалуйста, посмотрите: https://github.com/ArtemSkrebkov/dldt/blob/askrebko/iterate-through-network/inference-engine/samples/cnn_network_parser/main.cpp

Я считаю, что идея использования API ясна.

Пример основан на текущем состоянии репозитория dldt ( ветвь '2019', соответствует выпуску 2019 R3.1)

Другая полезная ссылка - документация по классу CNNLayer: https://docs.openvinotoolkit.org/latest/classInferenceEngine_1_1CNNLayer.html

...