上周在实验室开荒某个代码,看到中间这么一段,对Tensorflow中的stop_gradient()还不熟悉,特此周末进行重新并总结。y=xx+K.stop_gradient(rounded-xx)这代码最终调用位置在tensoflow.python.ops.gen_array_ops.stop_gradient(input,name=None),关于这段代码为什么这样写的意义在文末给出。【stop_gradient()意义】用stop_gradient生成损失函数w.r.t.的梯度。【tf.gradients()理解】tf中我们只需要设计我们自己的函数,tf...
继续阅读 >
分类:tensorflow
batch很好理解,就是batchsize。注意在一个epoch中最后一个batch大小可能小于等于batchsizedataset.repeat就是俗称epoch,但在tf中与dataset.shuffle的使用顺序可能会导致个epoch的混合dataset.shuffle就是说维持一个buffersize大小的shufflebuffer,图中所需的每个样本从shufflebuffer中获取,取得一个样本后,就从源数据集中加入一个样本到shufflebuffer中。importosos.environ['CUDA_VISIBLE_DEVICES']=""importnum...
继续阅读 >
1.作用dataset.shuffle作用是将数据进行打乱操作,传入参数为buffer_size,改参数为设置“打乱缓存区大小”,也就是说程序会维持一个buffer_size大小的缓存,每次都会随机在这个缓存区抽取一定数量的数据dataset.batch作用是将数据打包成batch_sizedataset.repeat作用就是将数据重复使用多少epoch2.各种不同顺序的区别示例代码(以下面代码作为说明):#-*-coding:utf-8-*-importtensorflowastfimportnumpyasnp...
继续阅读 >
2020
09-29
09-29
tensorflow实现残差网络方式(mnist数据集)
介绍残差网络是何凯明大神的神作,效果非常好,深度可以达到1000层。但是,其实现起来并没有那末难,在这里以tensorflow作为框架,实现基于mnist数据集上的残差网络,当然只是比较浅层的。如下图所示:实线的Connection部分,表示通道相同,如上图的第一个粉色矩形和第三个粉色矩形,都是3x3x64的特征图,由于通道相同,所以采用计算方式为H(x)=F(x)+x虚线的的Connection部分,表示通道不同,如上图的第一个绿色矩形和第三个绿色矩...
继续阅读 >
2020
09-29
09-29
使用tensorflow实现VGG网络,训练mnist数据集方式
VGG作为流行的几个模型之一,训练图形数据效果不错,在mnist数据集是常用的入门集数据,VGG层数非常多,如果严格按照规范来实现,并用来训练mnist数据集,会出现各种问题,如,经过16层卷积后,28*28*1的图片几乎无法进行。先介绍下VGGILSVRC2014的第二名是KarenSimonyan和AndrewZisserman实现的卷积神经网络,现在称其为VGGNet。它主要的贡献是展示出网络的深度是算法优良性能的关键部分。他们最好的网络包含了16个卷积/全连接...
继续阅读 >
2020
09-29
09-29
浅谈Tensorflow加载Vgg预训练模型的几个注意事项
写这个博客的关键Bug:Valuepassedtoparameter'input'hasDataTypeuint8notinlistofallowedvalues:float16,bfloat16,float32,float64。本博客将围绕加载图片和保存图片到本地来详细解释和解决上述的Bug及其引出来的一系列Bug。加载图片首先,造成上述Bug的代码如下所示image_path="data/test.jpg"#本地的测试图片image_raw=tf.gfile.GFile(image_path,'rb').read()#一定要tf.float(),否则会报错imag...
继续阅读 >
2020
09-29
09-29
Tensorflow加载Vgg预训练模型操作
很多深度神经网络模型需要加载预训练过的Vgg参数,比如说:风格迁移、目标检测、图像标注等计算机视觉中常见的任务。那么到底如何加载Vgg模型呢?Vgg文件的参数到底有何意义呢?加载后的模型该如何使用呢?本文将以Vgg19为例子,详细说明Tensorflow如何加载Vgg预训练模型。实验环境GTX1050-ti,cuda9.0Window10,Tensorflow1.12展示Vgg19构造importtensorflowastfimportnumpyasnpimportscipy.iodata_path='model/vgg1...
继续阅读 >
2020
09-29
09-29
TensorFlow实现模型断点训练,checkpoint模型载入方式
深度学习中,模型训练一般都需要很长的时间,由于很多原因,导致模型中断训练,下面介绍继续断点训练的方法。方法一:载入模型时,不必指定迭代次数,一般默认最新#保存模型saver=tf.train.Saver(max_to_keep=1)#最多保留最新的模型#开启会话withtf.Session()assess:#saver.restore(sess,'./log/'+"model_savemodel.cpkt-"+str(20000))sess.run(tf.global_variables_initializer())ckpt=tf.train.get_checkpo...
继续阅读 >
2020
09-29
09-29
TensorFlow固化模型的实现操作
前言TensorFlow目前在移动端是无法training的,只能跑已经训练好的模型,但一般的保存方式只有单一保存参数或者graph的,如何将参数、graph同时保存呢?生成模型主要有两种方法生成模型,一种是通过freeze_graph把tf.train.write_graph()生成的pb文件与tf.train.saver()生成的chkp文件固化之后重新生成一个pb文件,这一种现在不太建议使用。另一种是把变量转成常量之后写入PB文件中。我们简单的介绍下freeze_graph方法。freeze_gra...
继续阅读 >
2020
09-29
09-29
tensorflow 20:搭网络,导出模型,运行模型的实例
概述以前自己都利用别人搭好的工程,修改过来用,很少把模型搭建、导出模型、加载模型运行走一遍,搞了一遍才知道这个事情也不是那么简单的。搭建模型和导出模型参考《TensorFlow固化模型》,导出固化的模型有两种方式.方式1:导出pb图结构和ckpt文件,然后用freeze_graph工具冻结生成一个pb(包含结构和参数)在我的代码里测试了生成pb图结构和ckpt文件,但是没接着往下走,感觉有点麻烦。我用的是第二种方法。注意我这里只在最...
继续阅读 >
2020
09-29
09-29
tensorflow实现从.ckpt文件中读取任意变量
思路有些混乱,希望大家能理解我的意思。看了fasterrcnn的tensorflow代码,关于fix_variables的作用我不是很明白,所以写了以下代码,读取了预训练模型vgg16得fc6和fc7的参数,以及fasterrcnn中heat_to_tail中的fc6和fc7,将它们做了对比,发现结果不一样,说明vgg16的fc6和fc7只是初始化了fasterrcnn中heat_to_tail中的fc6和fc7,之后后者被训练。具体读取任意变量的代码如下:importtensorflowastfimportnumpyasnpfrom...
继续阅读 >
2020
09-29
09-29
打印tensorflow恢复模型中所有变量与操作节点方式
我就废话不多说了,大家还是直接看代码吧!#参数恢复self.sess=tf.Session()saver=tf.train.import_meta_graph(os.path.join(model_fullpath,'model.ckpt-7.meta'))module_file=tf.train.latest_checkpoint(model_fullpath)saver.restore(self.sess,module_file)variable_names=[v.nameforvintf.trainable_variables()]variable_names=[v.nameforvintf.global_variables()]value...
继续阅读 >
创建一个NNimporttensorflowastfimportnumpyasnp#fakedatax=np.linspace(-1,1,100)[:,np.newaxis]#shape(100,1)noise=np.random.normal(0,0.1,size=x.shape)y=np.power(x,2)+noise#shape(100,1)+noisetf_x=tf.placeholder(tf.float32,x.shape)#inputxtf_y=tf.placeholder(tf.float32,y.shape)#outputyl=tf.layers.dense(tf_x,10,tf.nn.relu)#hiddenlayero=tf.layers.dense(l,1)...
继续阅读 >
2020
09-29
09-29
tensorflow从ckpt和从.pb文件读取变量的值方式
最近在学习tensorflow自带的量化工具的相关知识,其中遇到的一个问题是从tensorflow保存好的ckpt文件或者是保存后的.pb文件(这里的pb是把权重和模型保存在一起的pb文件)读取权重,查看量化后的权重是否变成整形。因此将自己解决这个问题记录下来,为了下一次遇到时,可以有所参考,也希望给有需要的同学一个可能的参考。(1)从保存的ckpt读取变量的值(以读取保存的第一个权重为例)fromtensorflow.pythonimportpywrap_tensorflow...
继续阅读 >
2020
09-29
09-29
tensorflow模型转ncnn的操作方式
第一步把tensorflow保存的.ckpt模型转为pb模型,并记下模型的输入输出名字.第二步去ncnn的github上把仓库clone下来,按照上面的要求装好依赖并make.第三步是修改ncnn的CMakeList,具体修改的位置有:ncnn/CMakeList.txt文件,在文件开头处加入add_definitions(-std=c++11),末尾处加上add_subdirectory(examples),如果ncnn没有examples文件夹,就新建一个,并加上CMakeList.txt文件.ncnn/tools/CMakeList.txt文件,加入add_subdir...
继续阅读 >
2020
09-29
09-29
tensorflow pb to tflite 精度下降详解
之前希望在手机端使用深度模型做OCR,于是尝试在手机端部署tensorflow模型,用于图像分类。思路主要是想使用tflite部署到安卓端,但是在使用tflite的时候发现模型的精度大幅度下降,已经不能支持业务需求了,最后就把OCR模型调用写在服务端了,但是精度下降的原因目前也没有找到,现在这里记录一下。工作思路:1.训练图像分类模型;2.模型固化成pb;3.由pb转成tflite文件;但是使用python的tfinterpreter调用tflite文件就已经出...
继续阅读 >