Я пытаюсь написать программу на C ++, которая использует тензорный фреймворк. Теперь я пытаюсь получить вес и записать его в файл. Я могу получить доступ к именам узлов с помощью приведенного ниже кода,
int node_count = graph_def.node_size();
for (int i = 0; i < node_count; i++)
{
auto n = graph_def.node(i);
cout<<"Names : "<< n.name() <<endl;
}
Я не могу получить доступ к весам, которые будут сохранены в tenor_content, как показано ниже,
node {
name: "Weight"op: "Const"attr {
key: "dtype"value {
type: DT_FLOAT
}
}
attr {
key: "value"value {
tensor {
dtype: DT_FLOAT
tensor_shape {
dim {
size: 8
}
dim {
size: 2
}
}
tensor_content: "\000\000\300\377\000\000\300\377\000\000\300\377\000\000\300\377\000\000\300\377\000\000\300\377\000\000\300\377\000\000\300\377\000\000\300\377\000\000\300\377\000\000\300\377\000\000\300\377\000\000\300\377\000\000\300\377\000\000\300\377\000\000\300\377"}
}
}
}
Заранее спасибо.
В приведенном ниже коде переменная массива будет содержать tenor_content. Вы можете получить к ним доступ, указав их индекс.
std::vector<Tensor> output;
std::vector<string> vNames;
for (int i = 0; i < node_count; i++)
{
auto n = graph_def.node(i);
if ((has_suffix(n.name(), "/read")) || (has_suffix(n.name(), "_w")) || (has_suffix(n.name(), "_b")))
{
vNames.push_back(n.name());
}
}
Status run_status = session->Run({}, vNames, {}, &output);
auto array = output[i].tensor<float, 4 >();
Других решений пока нет …