纯C++的tensorflow trainer

今天写了一个纯C++的tensorflow trainer。大体来讲,main函数里要干这么几件事情:

  1. 创建grpc server
  2. load MetaGraph
  3. 创建session,执行init OP
  4. 从meta graph得到queue def,创建并运行queue
  5. 执行training loop
  6. save model
这里的meta graph是用python生成的。主要是因为C++的API还没有把auto gradient做完善。不仅如此,目前用C++构造graph的代码远远比python复杂,没有任何优势。

training loop的跳出方式有两种。
一种是等待抛出out of range错误。这个在C++中可以通过检查run方法的返回值,在python中可以catch异常。
另一种是显式的设置step个数。这种一般需要预先知道有多少training samples。sample_count * iteration_count/mini_batch_size就可以得到max step。这种通常用于需要按iteration调节learning rate的场景。

唔,折腾一半天有啥实际好处呢?我拿alexnet在没有GPU的机器上试了下,performance并没有什么差别。主要是因为对于这样的复杂的网络结构,python层所占的cost很小。我准备明天再在有GPU的机器上试一试看。

此博客中的热门博文

少写代码,多读别人写的代码

在windows下使用llvm+clang

tensorflow distributed runtime初窥