博客
关于我
tensorflow神经网络优化方法笔记
阅读量:601 次
发布时间:2019-03-11

本文共 1858 字,大约阅读时间需要 6 分钟。

神经网络优化总结

梯度下降

梯度下降算法不一定达到全局最优,且计算成本较高,因为它在所有数据上计算损失函数。通常采用随机梯度下降算法,该算法每次仅优化某一条训练数据的损失函数。然而,仅优化一条数据点的损失函数可能无法反映整体损失函数的最优解。为此,结合批量处理(Batch)算法,每次计算一小批训练数据(Batch)的损失函数,这种折衒可以显著减少迭代次数,同时使结果更接近梯度下降的效果。

学习率指数衰减

学习率的大小直接影响算法的收敛速度与稳定性。TensorFlow中使用指数衰减法管理学习率。这种方法通过初始设置较大的学习率,使模型快速收敛,在此过程中逐步减小学习率,保证训练后期的稳定性。tf.train.exponential_decay实现这一功能,其公式为:[ \text{decayed_learning_rate} = \text{learning_rate} \times \text{decay_rate}^{(\text{global_step} / \text{decay_steps})} ]参数说明:

  • learning_rate: 初始学习率
  • decay_rate: 衰减系数,通常在0-1之间
  • staircase: 是否为阶梯式衰减,默认值为False

正则化

正则化(L1和L2)通过限制权重大小,防止模型过于依赖训练数据中的噪声。L1正则化使参数更稀疏(许多权重为零),而L2正则化则不会强制权重为零。L1正则化不可导,L2可导。在TensorFlow中,可以通过tf.contrib.layers.l2ertino Regularizer添加L2正则化项。以下代码示例实现简单卷积神经网络并添加L2正则化:

import tensorflow as tffrom tensorflow.contrib.layers import l2_regularizerdef get_weight(shape, lambda1):    var = tf.Variable(tf.random_normal(shape), dtype=tf.float32)    tf.add_to_collection('losses', tf.contrib.layers.l2_regularizer(lambda1)(var))    return varx = tf.placeholder(tf.float32, (None, 2))y = tf.placeholder(tf.float32, (None, 1))batch_size = 8layer_dimensions = [2, 10, 10, 10, 1]for i in range(1, len(layer_dimensions)):    out_dimension = layer_dimensions[i]    weight = get_weight([layer_dimensions[i-1], out_dimension], 0.001)    bias = tf.Variable(tf.constant(0.1, shape=[out_dimension]))    cur_layer = tf.nn.relu(tf.matmul(cur_layer, weight) + bias)    layer_dimensions[i] = out_dimensionmse_loss = tf.reduce_mean(tf.square(y - cur_layer))tf.add_to_collection('losses', mse_loss)loss = tf.add_n(tf.get_collection('losses'))

动量(Momentum)

动量优化器通过保持一定的“动量”,加速训练过程中的权重更新。动量的公式为:[ v = \mu v - \text{learning_rate} \times dw ][ w = w + v ]其中,v初始化为0,μ通常设定为0.9。动量的引入可以加速收敛,避免因权重更新方向不一致而迟缓。

滑动平均优化器

平滑率(Exponential Moving Average,EMA)的衰减率可以设置接近1,使模型训练更稳健。tf.train.ExponentialMovingAverage实现这一功能,常用参数为num_step,确定衰减步骤数。

转载地址:http://mkivz.baihongyu.com/

你可能感兴趣的文章
Python 从数据库中存储和检索密码的最安全方法
查看>>
Python语言及其应用 - 知识点遍历
查看>>
Python 优化提速的 8 个小技巧
查看>>
Python 余弦相似度与皮尔逊相关系数 计算
查看>>
python 使用execjs 报编码错误解决办法,UnicodeDecodeError: ‘gbk‘ codec can‘t decode byte 0xac in position 145: il
查看>>
python 使用filetype校验文件
查看>>
Python 使用flush函数将缓冲区数据立即写磁盘
查看>>
python 使用in判断不准确,in不好使
查看>>
Python 使用pandas 进行查询和统计详解
查看>>
Redis 配置文件redis.conf详细解释
查看>>
python网络爬虫(2)——scrapy框架的基础使用
查看>>
python网络爬虫实例教程试读_Python网络爬虫实战教程(全套完整版) - 学途无忧网 - 做技术的王者 - Powered By EduSoho...
查看>>
Python 使用哈希函数用于加密
查看>>
Python 依赖管理的革新——Poetry 深度解析
查看>>
python 保留精度及增加去除数字的千位分隔符(金额化数字)
查看>>
python 倒计时 9,8,7,。。。。。。0
查看>>
Python 入门开发学习笔记之数据的增删改查
查看>>
Python 入门教程(2)搭建环境 2.4、VSCode配置Node.js运行环境
查看>>
Python 八大排序算法合集
查看>>
python 关于epoll的学习
查看>>