Я искал способ получить тензор весов / параметров и смещений для каждого уровня сети, используя 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;
}