需包含头文件,和两个namespace声明
# include "scope.h"
using namespace tensorflow;
using namespace ops;
该类的主要成员(我们当然只关心调用pb文件完成预测的任务,至于读取图的某一个节点,自然是不关心的,至少在C++端不会在意这个,那是用Python该做的事情),我们主要会使用到的成员函数有:
Scope::NewRootScope(); 创建一个根空间,意味着所有的张量的名字都有一个前缀,根空间的前缀是空的;
Scope::NewSubScope(const &string);
下面看两个例子:
头文件我设置为:
#pragma once
#define COMPILER_MSVC
#define NOMINMAX
#include "scope.h"
#include <iostream>
#include "tensorflow/cc/client/client_session.h"
#include "tensorflow/cc/ops/standard_ops.h"
#include "tensorflow/core/framework/tensor.h"
using namespace tensorflow;
using namespace ops;
void testScope();
void testScopeDemo();
源文件如下
#include "scope.h"
void testScope()
{
Scope root = Scope::NewRootScope();
auto c1 = Const(root, { { 1,1 } });
auto m = MatMul(root, c1, { { 41 },{ 1 } });
GraphDef gdef;
Status s = root.ToGraphDef(&gdef);
if (!s.ok()) {
std::cout << "error" << std::endl;
}
else {
std::cout << "successfully generate graph!" << std::endl;
}
}
void testScopeDemo()
{
Scope root = Scope::NewRootScope();
Scope linear = root.NewSubScope("linear");
// W will be named "linear/W"
auto W = Variable(linear.WithOpName("W"), { 2,2 },DT_FLOAT);
// b will be named "linear/b"
auto b = Variable(linear.WithOpName("b"), { 2,2 }, DT_FLOAT);
auto x = Const(linear, { 1 });
auto m = MatMul(linear, x, W);
auto r = BiasAdd(linear,m, b);
}
在第一个函数testScope中,先创建一个root空间。之后所有的operation,第一个参数都是这个root变量。
在第二个函数testScopeDemo中,先创建一个root空间,在创建一个子空间,叫做‘linear’。在linear之下创建的所有张量,其名称的前缀都是“linear/”。包括Variable和Const生成的张量,以及operation操作输出的张量。