in source/neuropod/backends/tensorflow/tf_backend.cc [42:86]
void setup_node_mapping_and_init_ops(std::istream & ifs,
std::unordered_map<std::string, std::string> &mapping,
std::vector<std::string> & init_ops)
{
// Parse it
Json::CharReaderBuilder rbuilder;
Json::Value obj;
std::string parse_err;
bool parsingSuccessful = Json::parseFromStream(rbuilder, ifs, &obj, &parse_err);
if (!parsingSuccessful)
{
NEUROPOD_ERROR("Error parsing TF Neuropod Config JSON: {}", parse_err);
}
// Make sure that node_name_mapping exists and is an object
if (!obj["node_name_mapping"].isObject())
{
NEUROPOD_ERROR("'node_name_mapping' must be an object in the tf neuropod config");
}
const auto node_name_mapping = obj["node_name_mapping"];
const auto node_names = node_name_mapping.getMemberNames();
for (const std::string &node_name : node_names)
{
const auto val = node_name_mapping[node_name];
if (!val.isString())
{
NEUROPOD_ERROR("All values in 'node_name_mapping' in the tf neuropod config must be strings");
}
mapping[node_name] = val.asString();
}
// Get the init ops (if any)
if (obj.isMember("init_op_names"))
{
const auto &ops = obj["init_op_names"];
for (Json::Value::ArrayIndex i = 0; i != ops.size(); i++)
{
init_ops.push_back(ops[i].asString());
}
}
}