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用法及其作用大总结相关推荐

  1. inline内联的用法与作用

    inline内联的用法与作用      内联函数是一种编译机制,优点从代码上是看不出来的,但是程序的执行效率上有差别,通常,编译器对函数调用的处理是一种类似中断的方式,即当执行到函数调用语句时,程序把 ...

  2. php中问号作用,你肯定不懂(问号和“?”作用大不同)

    原标题:你肯定不懂(问号和"?"作用大不同) 在做主旨.意图题的过程中,问号的作用十分重要,但是其用法却是截然不同的.因为问号"?"分为反问和疑问,在文中出现了 ...

  3. 计算机软件系统 七年级,系统软件作用大七年级信息技术教案(5页)-原创力文档...

    七年级信息化教案 教学题目 第一单元 走进计算机世界 第二节 遍览软件春秋 第一课时 系统软件作用大 所属学科 信息技术 学时安排 1 课时 年级 七年级 所选教材 信息技术(天津市教育教学研究室 编 ...

  4. html标签验证的作用,HTML元素blockquote标签的用法及作用

    html元素 标签主要用于引用长文本,有关该标签的用法及作用详解如下: 标签的定义 标签是引用一段长文本内容: 标签是一个块元素,引用的文本内容会形成一个独立的引用块: 标签引用的文本内容会在左右两端 ...

  5. memset()函数用法及其作用

    memset()函数原型是: extern void *memset(void *buffer, int c, int count) //buffer:为指针或是数组, //c:是赋给buffer的值 ...

  6. Promise的基本用法以及作用

    目录 1- 初识Promise 2- 回调地狱的引发 3- Promise (承诺)的用法 4- async 异步 5- await 6- 使用 async 解决回调地狱问题 1- 初识Promise ...

  7. static关键字的用法与作用

    在java的关键字中,static和final是两个我们必须掌握的关键字.不同于其他关键字,他们都有多种用法,而且在一定环境下使用,可以提高程序的运行性能,优化程序的结构.下面我们先来了解一下stat ...

  8. java foreach用法_Java十大简单性能优化

    以下是Java中最容易进行的10个性能优化: 1.使用StringBuilder 这几乎是所有Java代码中的默认设置.尽量避免+操作员.当然,您可能会争辩说它StringBuilder无论如何都是语 ...

  9. python timeit用法_十大Python开发技巧

    Python开发指南, 超级实用足以让您震撼 > Photo by Christina Morillo from StockSnap 时不时地,当我了解Python的新功能时,或者我发现其他一些 ...

最新文章

  1. Visual C# .NET 2003 语言的改变
  2. 《科学》封面特别报道:人类登月50年
  3. python爬取图片简记
  4. 音视频技术开发周刊 | 201
  5. mysql在linux下显示花_在Linux 中搭建 Mysql
  6. vue --- 从模块从父元素获取数据
  7. 致盲目标检测算法,阿里清华发起 “对抗攻击” 挑战赛!
  8. [译]A Simple CSS Animation Tutorial
  9. C++中string::find()函数和string::npos函数的使用
  10. add script param in pycharm
  11. 基于图像处理技术的柑橘病害自动检测与分类
  12. GDAL虚拟文件简介
  13. [转载] Java中方法不可以有默认参数
  14. oracle授权v$lock,Oracle八大性能视图之v$lock
  15. JDBC 学习笔记(一)—— 基础知识 + 分页技术
  16. jQuery的对象访问函数(get,index,size,each)
  17. R语言meta包的预后meta分析复现
  18. 任务管理器不显示磁盘
  19. 一文搞定细菌基因组De Novo测序分析
  20. 浅谈Camera subsytem

热门文章

  1. 2D横版跳跃游戏第三节
  2. C语言入门与进阶——typedef与#define
  3. 编写计算机取余程序_计算机软件amp;硬件
  4. python学习 番外篇之模块
  5. 东方木教你如何用WINDOWS自带的压缩功能去压缩软件
  6. 【计算机网络】常用软件架构C/S和B/S
  7. 500 Internal Server Error 原因及解决方案
  8. python assert使用
  9. ISIS的邻居建立详解
  10. 5G NR标准 第5章 NR概览