【问题标题】:Get parameters/weights for each layer of the model using the c++ API on OpenVINO使用 OpenVINO 上的 c++ API 获取模型每一层的参数/权重
【发布时间】:2020-01-27 12:15:30
【问题描述】:

我一直在寻找一种方法来使用 OpenVINO 框架上的 C++ API 获取网络每一层的权重/参数和偏差的张量。我在文档中找不到任何内容,也找不到示例中的任何示例。我怎样才能提取这些张量?

谢谢, 塞萨尔。

编辑: 分别获取权重和偏差的代码:

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;
    }

【问题讨论】:

    标签: c++ neural-network intel openvino


    【解决方案1】:

    似乎没有官方示例来展示该功能。我也没有找到类似的东西。

    我实现了一个打印网络每一层信息的基本示例。请看:https://github.com/ArtemSkrebkov/dldt/blob/askrebko/iterate-through-network/inference-engine/samples/cnn_network_parser/main.cpp

    我相信如何使用 API 的想法很明确。

    样本基于dldt repo的当前状态(分支'2019',它对应于2019 R3.1版本)

    另一个可能有用的链接是 CNNLayer 类的文档: https://docs.openvinotoolkit.org/latest/classInferenceEngine_1_1CNNLayer.html

    【讨论】:

    • 非常感谢您的帮助!我稍微修改了您的代码以打印权重和偏差,这是否正确(您可以在上面的原始帖子中看到更改)?还是他们将偏见保存在另一个位置? OpenVINO 应该有关于其参数文件 (.bin) 的组织方式的文档...
    • 不客气!请更仔细地看一下我的示例。样本已经打印了权重和偏差。成员“blob”包含“权重”作为第一个元素,“偏差”作为第二个元素。我只打印每个数组的前三个字节,您可以扩展示例以打印整个数组。您的代码的问题是您正在考虑“blob”同时包含权重和偏差。但是权重和偏差是“层->斑点”的独立元素。如果仍有不清楚的地方,请随时询问:)
    • 更多关于 IR 格式的信息你可以在这里找到docs.openvinotoolkit.org/latest/…
    猜你喜欢
    • 2022-07-04
    • 2017-05-21
    • 2020-08-09
    • 1970-01-01
    • 1970-01-01
    • 2019-02-27
    • 2019-03-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多