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

你可能感兴趣的文章
Node入门之创建第一个HelloNode
查看>>
NotImplementedError: Cannot copy out of meta tensor; no data! Please use torch.nn.Module.to_empty()
查看>>
npm run build 失败Compiler server unexpectedly exited with code: null and signal: SIGBUS
查看>>
npm WARN deprecated core-js@2.6.12 core-js@<3.3 is no longer maintained and not recommended for usa
查看>>
npm和yarn的使用对比
查看>>
npm报错unable to access ‘https://github.com/sohee-lee7/Squire.git/‘
查看>>
npm的问题:config global `--global`, `--local` are deprecated. Use `--location=global` instead 的解决办法
查看>>
NR,NF,FNR
查看>>
nrf开发笔记一开发软件
查看>>
NSDateFormatter的替代方法
查看>>
NSOperation基本操作
查看>>
NSSet集合 无序的 不能重复的
查看>>
NT AUTHORITY\NETWORK SERVICE 权限问题
查看>>
ntko文件存取错误_苹果推送 macOS 10.15.4:iCloud 云盘文件夹共享终于来了
查看>>
nullnullHuge Pages
查看>>
NumPy 或 Pandas:将数组类型保持为整数,同时具有 NaN 值
查看>>
numpy 用法
查看>>
Numpy如何使用np.umprod重写range函数中i的python
查看>>
oauth2-shiro 添加 redis 实现版本
查看>>
OAuth2.0_JWT令牌-生成令牌和校验令牌_Spring Security OAuth2.0认证授权---springcloud工作笔记148
查看>>