TF版网络模型搭建常用代码备忘
本文主要介绍如何搭建一个网络并训练
最近,我在写代码时经常碰到这样的情况,明明记得代码应该怎么写,在写出来的代码调试时,总是有些小错误。原因不是接口参数个数不对,就是位置不对。为了节约上网查找时间,现记录下常用操作,以备需要时快速查看。
根据网络结构不同功能,主要分这几大块:网络基本结构元组件,网络常用结构,Tensorboard调试接口,数据预处理常用操作,后处理常用操作。
1、搭建一个基础网络所需的元组件:
import tensorflow as tf
import glog as log class basenet(object):
'''
base model for other specific cnn
'''
def __init__(self):
pass def weight_variable(self,shape,sdtdev=0.1,name):
initial=tf.truncated_normal(shape=shape,mean=0.0,stddev=sdtdev)
if name is None:
return tf.Variable(initial)
else:
return tf.get_variable(name=name,initial=initialdef bias_variable(self,shape,name): initial=tf.constant(.01,shape=shape)
if name is None:
return tf.Variable(initial,name=name)
else:
return tf.get_variable(name=name,initial=initial)
@staticmethod
def conv2d(self,x,w,s=1,name=None,padding='SAME'):
#with tf.variable_scope(name):
if s == 1:
x = tf.nn.conv2d(x,w,strides=[1,s,s,1],padding=padding)
else:
x = tf.nn.conv2d(x,w,strides=[1,s,s,1],padding=padding)
#log.info('basenet conv2d x:{:}'.format(x.get_shape().as_list()))
return x def conv2d_transpose(x,w,b,output_shape,stride=2):
if output_shape is None:
output_shape =x.get_shape().as_list()
output_shape[1]*=2
output_shape[2]*=2
output_shape[3]=w.get_shape().as_list()[2]
conv = tf.nn.conv2d_transpose(x,w,output_shape,strides=[1,stride,stride,1],padding='SAME')
return tf.nn.bias_add(conv,b)
def maxpool(self,x,k=2,s=2,padding='SAME'):
x= tf.nn.max_pool(x,ksize=[1,k,k,1],strides=[1,s,s,1],padding=padding)
return x def avgpool(self,x,k,s,padding='SAME'):
x= tf.nn.avg_pool(x,ksize=[1,k,k,1],strides=[1,s,s,1],padding=padding)
def local_response_norm(x):
return tf.nn.lrn(x,depth_radius=5,bias=2,alpha=1e-4,beta=0.75)
def relu(self,x,name):
x = tf.nn.relu(x)
return x def leaky_relu(x,alpha=0.0,name=""):
return tf.maximum(alpha*x,x,name) def relu6(self,x):
x= min(max(0,x), 6)
x = tf.nn.relu(x)
return x
def batch_norm(x,output,phrase,scope='bn',decay=0.9,eps=1e-5):
with tf.variable_scope(scope):
beta=tf.get_variable(name='beta',shape=[output],initializer=tf.constant_initializer(0.05))
gamma=tf.get_variable(name='gamma',shape=[output],initialzer=tf.random_normal_initializer(1.0,0.02)
batch_mean,batch_var=tf.nn.moment(x,[0,1,2],name='moment') def mean_var_2_update():
ema_apply_op = ema.apply([batch_mean,batch_var])
with tf.control_dependencies([ema_apply_op]):
return tf.identity(batch_mean),tf.identity(batch_var)
mean,var = tf.cond(phrase,mean_var_2_update,lambda:(ema.average(batch_mean),ema.average(batch_var))
normed = tf.nn.batch_normalization(x,mean,var,beta,gamma,eps)
return normed
def wx_b(self,x,w,b):
x = tf.matmul(x,w)+b
log.info('basenet wx_b x:{:}'.format(x.get_shape().as_list()))
return x def fc(self,x,w,b):
x = tf.add(tf.matmul(x,w),b)
return x
2、常用网络结构
网络结构1: def bottleneck_unit(x,out_chan1,out_chan2,down_stride=False,up_stride=False,name=None):
3、数据预处理常用操作
def save_img(image,save_dir,name,mean=None):
if mean:
image=unprocess_image(image,mean)
misc.imsave(os.path.join(save_dir,name+'.png'),image) def process_image(image,mean_pixel):
return image-mean_pixel
4、Tensorboard常用接口
def add_regular_to_summary(var):
if var is not None:
tf.summary.histogram(var.op.name,var)
tf.add_to_collection('reg_loss',tf.nn.l2_loss(var)) def add_activation_to_summary(var):
if var is not None:
tf.summary.histogram(var.op.name+'/activation',var)
tf.summary.scalar(var.op.name+'/sparsity',tf.nn.zero_fraction(var)) def add_gradient_to_summary(grad,var):
if grad is not None:
tf.summary.histogram(var.op.name+'/gradient',grad)
TF版网络模型搭建常用代码备忘的更多相关文章
- metasploit 常用命令备忘
metasploit 常用命令备忘 MSFconsole Commands-------------------------------------24show exploits 查看所有exp ...
- 代码备忘, TODO宏实现
代码备忘, TODO宏实现 我们平时在开发过程中, 往往并非憋足气一股脑敲完所有代码.每一个模块, 每一个函数的实现总有个先后顺序. 又或者哪个部分须要做调整, 改动- 所以, 我们须要有一个东西, ...
- Linux基础之常用基本命令备忘
Linux基础之常用基本命令备忘 PWD 查询当前所在Linux上的位置 / 根目录 CD(change directory)切换目录 语法 CD /(注意添加空格) LS ...
- Webstorm常用快捷键备忘(Webstorm入门指南)
WebStorm 是jetbrains公司旗下一款JavaScript 开发工具.被广大中国JS开发者誉为“Web前端开发神器”.“最强大的HTML5编辑器”.“最智能的JavaSscript IDE ...
- sublime 常用快捷键备忘
转一篇sublime常用的快捷键备忘 sublime常用快捷键 选择类Ctrl+D 选中光标所占的文本,继续操作则会选中下一个相同的文本.Alt+F3 选中文本按下快捷键,即可一次性选择全部的相同文本 ...
- Webstorm常用快捷键备忘
WebStorm 是jetbrains公司旗下一款JavaScript 开发工具.被广大中国JS开发者誉为“Web前端开发神器”.“最强大的HTML5编辑器”.“最智能的JavaSscript IDE ...
- Axure常用操作备忘
目录 前言 技巧 边框重合 复制对象文本居中 复制粘贴样式 文本自适应 给图形添加连接点 导出图片无空白 前言 下面列出Axure画图过程中曾经遇到过的问题,备忘一下,避免别人也走弯路,法布施一下~ ...
- CentOS常用命令备忘
1. 查看进程 ps -a 杀掉进程 kill PID 2. 添加计划任务crontab -e 例如:30 21 * * * service httpd restart 每天21:30重启apache ...
- 【荐1】Total Commander 7.57 个人使用设置 及 常用快捷键 备忘
Total Commander 7.57a 下载地址:http://www.baidu.com/s?wd=total commander 7.57 破解版 软件整体预览图:(注意,下面的版本我用的是 ...
随机推荐
- Re-ranking Person Re-identification with k-reciprocal Encoding
Re-ranking Person Re-identification with k-reciprocal Encoding Abstract In this paper, we propose a ...
- 《精通并发与Netty》学习笔记(11 - 详解NIO (二) 分散/聚集 Scatter/Gather、Selector)
一.分散/聚集 Scatter/Gather scatter/gather指的在多个缓冲区上实现一个简单的I/O操作,比如从通道中读取数据到多个缓冲区,或从多个缓冲区中写入数据到通道:scatter( ...
- 冲刺Noip2017模拟赛4 解题报告——五十岚芒果酱
题1 韬韬抢苹果(apple) [问题描述] 又到了收获的季节,树上结了许多韬韬,错了,是许多苹果,有很多个小韬韬都来摘苹 果.每个韬韬都想要最大的苹果,所以发生了争执,为了解决他们的矛盾,出题人定了 ...
- 冲刺Noip2017模拟赛2 解题报告——五十岚芒果酱
题1 牛跑步(running) [题目描述] 新牛到部队,CG 要求它们每天早上搞晨跑,从 A 农场跑到 B 农场.从 A 农场到 B 农场中有 n- 个路口,分别标上号,A 农场为 号,B 农场为 ...
- nginx处理请求的11个阶段
Nginx 处理请求的过程一共划分为 11 个阶段,按照执行顺序依次是 post-read.server-rewrite.find-config.rewrite.post-rewrite.preacc ...
- Object类入门这一篇就够了!
第三阶段 JAVA常见对象的学习 第一章 常见对象--Object类 引言: 在讲解Object类之前,我们不得不简单的提一下什么是API,先贴一组百度百科的解释: API(Application P ...
- 小米Python后端面试题
电话面 时长:30m 说一下对浏览器缓存的理解: 说一下MySQL优化: 说一下redis: 说一下从输入url到返回都发生了什么: 域名怎么解析的: 一面 1h 编程实现翻转单链表: MySQL中v ...
- J.U.C之AQS介绍
从JDK1.5开始,引入了并发包java.util.concurrent(J.U.C),并发容器里的同步容器AQS(AbstractQueuedSynchronizer)是J.U.C的核心,AQS底层 ...
- 洛谷P2178 [NOI2015]品酒大会 后缀数组+单调栈
P2178 [NOI2015]品酒大会 题目链接 https://www.luogu.org/problemnew/show/P2178 题目描述 一年一度的"幻影阁夏日品酒大会" ...
- idea 如何加入插件SonarLint
idea 如何加入插件SonarLint IDEA的插件安装有两种方法:一是在线安装:二是离线安装,即将插件的安装包下载以后从本地安装. 一.在线安装的过程: 1.打开IDEA ...