博客
关于我
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/

你可能感兴趣的文章
oracle快速创建可用用户
查看>>
oracle技能综述,ORACLE要点综述(之一:基本SELECT语句)-数据库专栏,ORACLE
查看>>
Oracle收购DataScience.com扩展云平台分析能力
查看>>
Oracle教程之管理索引(七)--Oracle显示索引信息
查看>>
oracle数据库 添加定时器
查看>>
Oracle数据库DBA日常Sql列表
查看>>
Oracle数据库ORA-01555解决含clob和blob字段表报错快照过旧问题
查看>>
ubuntu24 finalshell 无法连接ubuntu服务器, 客户端无法连接ubuntu, 无法远程连接ubuntu。
查看>>
Oracle数据库入门——初级系列教程
查看>>
oracle数据库包package小例子
查看>>
UBUNTU 添加删除用户
查看>>
Oracle数据库备份与还原
查看>>
Ubuntu Seata开机自启动服务
查看>>
uart 驱动架构
查看>>
Oracle数据库学习(三)
查看>>
Oracle数据库安装成功后,忘记解锁账户和设置密码
查看>>
TypeError: create_purple() 接受 0 个位置参数,但给出了 2 个
查看>>
Oracle数据库异常--- oracle_10g_登录em后,提示java.lang.Exception_Exception_in_sending_Request__null或Connection
查看>>
Oracle数据库异常---OracleDBConsoleorcl无法启动
查看>>
oracle数据库异常---SP2-1503: 无法初始化 Oracle 调用界面 SP2-1503: 无法初始化 Oracle 问题的解决办法
查看>>