trick用法及其作用大总结
trick用法及其作用大总结
1. L2正则化
作用:防止过拟合 提高泛化能力
用法:
①首先是定义一个带有L2正则化的 初始化权重weight的函数
# 使用正太分布初始化权重并添加L2正则化,使用w1控制L2损失的大小
def variable_with_weight_loss(shape, stddev, w1):# 从截断的(2个标准差以内)正态分布中输出随机值var = tf.Variable(tf.truncated_normal(shape, stddev=stddev))if w1 is not None:# l2_loss(var)*w1weight_loss = tf.multiply(tf.nn.l2_loss(var), w1, name='weight_loss')# 使用默认图tf.add_to_collection('losses', weight_loss)return var
把var返回给weight
我的理解w1就相当于无恩达课程里面的 入
②在给weight确定具体形式时候规定 w1 等等 w1=0.004等等
weight1 = variable_with_weight_loss(shape=[5, 5, 3, 64], stddev=5e-2, w1=0.0)
再如
weight3 = variable_with_weight_loss(shape=[dim, 384], stddev=0.04, w1=0.004)
即可完成L2正则化
③要将tf.add_to_collection(‘losses’, weight_loss)决定的losses先与cross_entropy求和,定义最终的loss
def loss(logits, labels):labels = tf.cast(labels, tf.int64)# 计算logits和labels之间的稀疏softmax交叉熵cross_entropy = tf.nn.sparse_softmax_cross_entropy_with_logits(logits=logits, labels=labels, name='cross_entropy_per_example')# 计算cross_entropy均值cross_entropy_mean = tf.reduce_mean(cross_entropy, name='cross_entropy')# 将cross_entropy的loss添加到整体的loss里tf.add_to_collection('losses', cross_entropy_mean)# 将整体losses的collection中的全部loss求和return tf.add_n(tf.get_collection('losses'), name='total_loss')
2.使用LRN对结果进行处理-Local Response Normalization-本地响应标准化
作用:增强大的抑制小的,增强泛化能力,防止过拟合
用法:有时候卷积relu之后 或者是 池化之后 跟一个
pool1 = tf.nn.max_pool(conv1, ksize=[1, 3, 3, 1], strides=[1, 2, 2, 1], padding='SAME')
# 使用LRN对结果进行处理-Local Response Normalization-本地响应标准化
# 增强大的抑制小的,增强泛化能力
norm1 = tf.nn.lrn(pool1, 4, bias=1.0, alpha=0.001/9.0, beta=0.75)
再如
conv2 = tf.nn.relu(tf.nn.bias_add(kernel2, bias2))
# LRN-本地响应标准化
norm2 = tf.nn.lrn(conv2, 4, bias=1.0, alpha=0.001/0.9, beta=0.75)
3.启动图片数据增强的线程队列
作用:在图像的深度学习中,为了丰富图像训练集,更好的提取图像特征,泛化模型(防止模型过拟合),一般都会对数据图像进行数据增强,数据增强,常用的方式,就是旋转图像,剪切图像,改变图像色差,扭曲图像特征,改变图像尺寸大小,增强图像噪音(一般使用高斯噪音,盐椒噪音)等
用法:以cifar数据集为例:
①在构造数据的时候用distorted
images_train, labels_train = cifar10_input.distorted_inputs(data_dir=data_dir,
batch_size=batch_size)
②
在sess之后写上
# 启动图片数据增强的线程队列
tf.train.start_queue_runners()
4.滑动平均操作
作用:防止过拟合
用法:
①先在程序开头规定一个滑动平均衰减率
MOVING_AVERAGE_DECAY=0.99
②为了更好说明 复制粘贴最佳样例程序的一段
因为这里涉及到变量更新的问题
global_step=tf.Variable(0,trainable=False)#初始化钟表0,使其为不可被训练更新#定义损失函数 学习率 滑动平均操作和训练过程variable_averages=tf.train.ExponentialMovingAverage(MOVING_AVERAGE_DECAY,global_step)variable_averages_op=variable_averages.apply(tf.trainable_variables())#可更新的变量全部更新cross_entropy=tf.nn.sparse_softmax_cross_entropy_with_logits(logits=y,labels=tf.argmax(y_,1))cross_entropy_mean=tf.reduce_mean(cross_entropy)loss=cross_entropy_mean+tf.add_n(tf.get_collection('losses'))learning_rate=tf.train.exponential_decay(LEARNING_RATE_BASE,global_step,mnist.train.num_examples / BATCH_SIZE,#存疑这个是怎么来的LEARNING_RATE_DECAY)train_step=tf.train.GradientDescentOptimizer(learning_rate).minimize(loss,global_step=global_step)with tf.control_dependencies([train_step,variable_averages_op]):train_op=tf.no_op(name='train')#保证train之前参数被刷新
5.学习率指数衰减
作用:同时保证优化速度和收敛性
用法:
①先规定基础学习率和学习率衰减指数
LEARNING_RATE_BASE=0.01
LEARNING_RATE_DECAY=0.99
②
在loss后面单独规定学习率
注意这之前也要规定global_step
learning_rate=tf.train.exponential_decay(LEARNING_RATE_BASE,global_step,mnist.train.num_examples / BATCH_SIZE,#更新次数LEARNING_RATE_DECAY)train_step=tf.train.GradientDescentOptimizer(learning_rate).minimize(loss,global_step=global_step)with tf.control_dependencies([train_step,variable_averages_op]):train_op=tf.no_op(name='train')#保证train之前参数被刷新
trick用法及其作用大总结相关推荐
- inline内联的用法与作用
inline内联的用法与作用 内联函数是一种编译机制,优点从代码上是看不出来的,但是程序的执行效率上有差别,通常,编译器对函数调用的处理是一种类似中断的方式,即当执行到函数调用语句时,程序把 ...
- php中问号作用,你肯定不懂(问号和“?”作用大不同)
原标题:你肯定不懂(问号和"?"作用大不同) 在做主旨.意图题的过程中,问号的作用十分重要,但是其用法却是截然不同的.因为问号"?"分为反问和疑问,在文中出现了 ...
- 计算机软件系统 七年级,系统软件作用大七年级信息技术教案(5页)-原创力文档...
七年级信息化教案 教学题目 第一单元 走进计算机世界 第二节 遍览软件春秋 第一课时 系统软件作用大 所属学科 信息技术 学时安排 1 课时 年级 七年级 所选教材 信息技术(天津市教育教学研究室 编 ...
- html标签验证的作用,HTML元素blockquote标签的用法及作用
html元素 标签主要用于引用长文本,有关该标签的用法及作用详解如下: 标签的定义 标签是引用一段长文本内容: 标签是一个块元素,引用的文本内容会形成一个独立的引用块: 标签引用的文本内容会在左右两端 ...
- memset()函数用法及其作用
memset()函数原型是: extern void *memset(void *buffer, int c, int count) //buffer:为指针或是数组, //c:是赋给buffer的值 ...
- Promise的基本用法以及作用
目录 1- 初识Promise 2- 回调地狱的引发 3- Promise (承诺)的用法 4- async 异步 5- await 6- 使用 async 解决回调地狱问题 1- 初识Promise ...
- static关键字的用法与作用
在java的关键字中,static和final是两个我们必须掌握的关键字.不同于其他关键字,他们都有多种用法,而且在一定环境下使用,可以提高程序的运行性能,优化程序的结构.下面我们先来了解一下stat ...
- java foreach用法_Java十大简单性能优化
以下是Java中最容易进行的10个性能优化: 1.使用StringBuilder 这几乎是所有Java代码中的默认设置.尽量避免+操作员.当然,您可能会争辩说它StringBuilder无论如何都是语 ...
- python timeit用法_十大Python开发技巧
Python开发指南, 超级实用足以让您震撼 > Photo by Christina Morillo from StockSnap 时不时地,当我了解Python的新功能时,或者我发现其他一些 ...
最新文章
- Visual C# .NET 2003 语言的改变
- 《科学》封面特别报道:人类登月50年
- python爬取图片简记
- 音视频技术开发周刊 | 201
- mysql在linux下显示花_在Linux 中搭建 Mysql
- vue --- 从模块从父元素获取数据
- 致盲目标检测算法,阿里清华发起 “对抗攻击” 挑战赛!
- [译]A Simple CSS Animation Tutorial
- C++中string::find()函数和string::npos函数的使用
- add script param in pycharm
- 基于图像处理技术的柑橘病害自动检测与分类
- GDAL虚拟文件简介
- [转载] Java中方法不可以有默认参数
- oracle授权v$lock,Oracle八大性能视图之v$lock
- JDBC 学习笔记(一)—— 基础知识 + 分页技术
- jQuery的对象访问函数(get,index,size,each)
- R语言meta包的预后meta分析复现
- 任务管理器不显示磁盘
- 一文搞定细菌基因组De Novo测序分析
- 浅谈Camera subsytem