TensorFlow
函数介绍及使用
咆哮的阿杰
吾生也有涯,而知也无涯
展开
-
调用object_detection的demo
首先是进行一系列下载和配置。下载是github上tensorflow的models文件夹,全部打包下载下来。解压到哪里都行。接着下载protoc-3.4.2-win32.zip。解压到anaconda/Lib/site-package文件夹下,多出两个文件夹,bin和include。将bin下的protoc.exe文件复制至c:/windows/system32中,或者加入环境变量中。...原创 2018-08-13 19:50:51 · 908 阅读 · 0 评论 -
TensorFlow由ckpt转Pb文件的方法
在有源代码和ckpt的情况下,想进一步获得用于部署到工业的pb文件。先使用placeholder留一个输入接口,然后搭建模型,得到输出接口的node名称。import tensorflow as tffrom tensorflow.python.framework.graph_util import convert_variables_to_constantsfrom t...原创 2019-07-20 20:45:25 · 2271 阅读 · 3 评论 -
TensorFlow的C++之路(4):如何利用预测得到的Tensor
上一节,我讲到了用Session指针的run函数得到网络的输出。形式是vector<Tensor>现在我们看一个示范status = session->Run(inputs, { "post_processing/result" }, {}, &outputs); if (!status.ok()) { cout << status.ToSt...原创 2019-07-14 22:07:44 · 2894 阅读 · 1 评论 -
TensorFlow的C++之路(3):使用一张图像导入模型获得预测结果
前一章我讲到了导入模型,现在自然是该用一张图片去做预测了,自然涉及到导入图像。Tensorflow的C++API有导入图片的函数,不过我这里介绍使用opencv的imread,再把Mat型变量转化为Tensorflow支持的Tensor型变量。Mat转换为TensorTensor t_in(DT_FLOAT, TensorShape({ 1,512,512,3 }));cvmat_to_te...原创 2019-07-13 19:41:21 · 1964 阅读 · 0 评论 -
Inference error with TensorFlow C++ : “Invalid argument: Session was not created with a graph 问题解决方案
如果读取的pb模型给了错误的地址,或者status.ok()失败,则gdef指向的是空的图。之所以sess->Create成功是因为用空图创建了一个session。之后如果使用sess->run就会报这个错误。就拿上段代码来说,readPb是我自己写的函数,用于读取pb文件,如果pb文件读取失败了。gdef代表空图。详情可以看[here](https://stackover...原创 2019-06-28 09:57:19 · 1142 阅读 · 0 评论 -
TensorFlow的C++之路(1):认识Scope
需包含头文件,和两个namespace声明# include "scope.h"using namespace tensorflow;using namespace ops;该类的主要成员(我们当然只关心调用pb文件完成预测的任务,至于读取图的某一个节点,自然是不关心的,至少在C++端不会在意这个,那是用Python该做的事情),我们主要会使用到的成员函数有:Scope::NewRo...原创 2019-06-26 23:40:24 · 1346 阅读 · 0 评论 -
TensorFlow有用的函数介绍
tf.gathergather是很有用的函数,它可以按照指定轴(axis),把tensor的子集提取出来。这在NMS中特别有用。下面我们看一个例子。import tensorflow as tfimport numpy as npaa = np.diag([1,2,3,4])print('aa is ',aa)a = tf.convert_to_tensor(aa)index...原创 2019-07-02 11:21:58 · 895 阅读 · 0 评论 -
TensorFlow的C++之路(2):导入Pb模型
上一篇博客讲到了scope,在TF的C++API中,所有的operation的第一个参数都是scope。其实C++的tf api有很多不一样的特性。我们往后慢慢学习,慢慢总结。OK,这次就写篇实际的,也是这两天很折腾人的环节。我们得到了Pb文件,想在C++端使用,以便后续封装生成dll。那么如何导入Pb模型呢?TF还是很友好的,提供了ReadBinaryProto导入pb模型。这里我写了一...原创 2019-07-02 09:45:54 · 2597 阅读 · 6 评论 -
Pytorch转keras的有效方法,以FlowNet为例
Pytorch凭借动态图机制,获得了广泛的使用,大有超越tensorflow的趋势,不过在工程应用上,TF仍然占据优势。有的时候我们会遇到这种情况,需要把模型应用到工业中,运用到实际项目上,TF支持的PB文件和TF的C++接口就成为了有效的工具。今天就给大家讲解一下Pytorch转成Keras的方法,进而我们也可以获得Pb文件,因为Keras是支持tensorflow的,我将会在下一篇博客讲解获得...原创 2019-06-25 10:15:23 · 8302 阅读 · 9 评论 -
TensorFlow2.0中训练代码的新风格
TF2.0默认为动态图,即eager模式。意味着TF能像Pytorch一样不用在session中才能输出中间参数值了,那么动态图和静态图毕竟是有区别的,tf2.0也会有写法上的变化。不过值得吐槽的是,tf2.0启动速度仍然比Pytorch慢的多。操作被记录在磁带中(tape)这是一个关键的变化。在TF0.x到TF1.X时代,操作(operation)被加入到Graph中。但现在,操作会被梯度带...原创 2019-04-02 18:23:58 · 6045 阅读 · 3 评论 -
tf.nn.l2_normalize
在inside-outside-net中,使用了将不同尺度特征concat的方法,来达到更好效果。在concat之前,使用了在通道维度上norm的办法,这个操作在TensorFlow中使用tf.nn.l2_normalize函数。先看看函数声明def l2_normalize(x, axis=None, epsilon=1e-12, name=None, dim=None):重要的参...原创 2019-02-08 23:59:37 · 6284 阅读 · 0 评论 -
TensorFlow中出现 CUDA_ERROR_OUT_OF_MEMORY 的错误解决方案
我是在用谷歌开源的facenet工程,使用自带的MTCNN用来align人脸数据集时遇到这个问题的。这个问题出现的原因在于TF想获得全部的GPU资源,设总资源为M,现在只能为TF分配N,N<M,然后TF就不干了。对于facenet这个工程来说,只需把arg中的可选参数 gpu-memory-fraction 设为0.7,反正必须小于1,是能N/M的百分比。 也可以这么做...转载 2019-01-23 10:03:54 · 5043 阅读 · 1 评论 -
tf.get_variable_scope() 常用用法
我们知道tensorflow一旦构建了图,就不能在训练的时候改变了。而且输入一旦加入到图中,那么数据就会在一系列的参数流动,并且这一系列参数只能作用于从这个输入接口送进来的数据。如果此时我们又得到了一组数据,或者是一条队列,我们想让这条队列的数据走过和上一条输入队列一样的路线,换言之我们想实现这样的操作:input_1 = tf.placeholder(...)out_1 = model(...原创 2019-01-16 23:39:17 · 8892 阅读 · 7 评论 -
tf.train.piecewise_constant() 用法介绍
我们看一些论文中,常常能看到论文的的训练策略可能提到学习率是随着迭代次数变化的。在tensorflow中,在训练过程中更改学习率主要有两种方式,第一个是学习率指数衰减,第二个就是迭代次数在某一范围指定一个学习率。tf.train.piecewise_constant()就是为第二种学习率变化方式而设计的。先看下函数定义def piecewise_constant(x, boundarie...原创 2019-01-15 23:59:47 · 8019 阅读 · 0 评论 -
TensorFlow-Slim 一些用法笔记
Table of Contents一 slim.separable_conv2d二 slim.arg_scope三 slim中的图像预处理文件: preprocessing_factory.py四 slim.assign_from_checkpoint_fn五 slim.batch_norm一 slim.separable_conv2d函数原型如下:slim.s...原创 2019-01-08 15:45:13 · 1913 阅读 · 0 评论 -
tf.variable_scope 和 tf.name_scope 的区别
这两个函数不仅名称相近,功能上也差不多,不过name_scope的使用范围更小,一般我们都选择variable_scope,下面说下这两个的区别。我们知道在TensorFlow中每个变量都有自己的作用域,我们常常用作用域+变量名来作为这个变量独一无二的名称。那么,这两个函数就是为了实现这样的功能的。请看下面代码:import tensorflow as tfwith tf.varia...原创 2019-01-17 23:54:35 · 159 阅读 · 0 评论 -
TensorFlow中读取图像数据的三种方式
Update on 2019.06.18从tesorflow1.11之后,(大概是这个版本号),谷歌推出了tf.data模块来读取数据,甚至在tensorflow2.0中,取消了数据队列管道,所以我建议大家学习tf.data模块。未来我也会做详细的tf.data模块使用说明。Upata on 2019.7.22我已经更新了tf.data的使用方法。建议精读,一定能掌握tf.da...原创 2019-01-11 11:33:19 · 11888 阅读 · 12 评论 -
电子科技大学第一届大象分形比赛个人总结
赛题是基于小数据集的图像分类。数据集还加入了高斯噪声。我采用了去燥加分类两个过程来解决这个问题,所以模型不是end to end的。去燥模型采用dncnn网络,论文地址如下:Beyond a Gaussian Denoiser: Residual Learning of Deep CNN for Image Denoisinghttp://cn.arxiv.org/pdf/1608...原创 2018-10-27 12:20:35 · 702 阅读 · 2 评论 -
tf.data学习指南(超实用、超详细)
tf.data是一个极其好用的数据读取管道搭建的API,甚至在tensorflow2.0中完全代替了诸如队列等其他方法。使用该API构建数据管道,主要依靠两个API:tf.data.Datasettf.data.Iteratortf.data.Dataset用于读入数据,做预处理,调整batch和epoch等常规操作,而读取数据则依赖于Iterator接口。这二者的关系和Pytorch...原创 2019-07-22 15:30:42 · 12678 阅读 · 13 评论