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

你可能感兴趣的文章
OLAP、OLTP的介绍和比较
查看>>
OLAP在大数据时代的挑战
查看>>
Vue.js 学习总结(12)—— 微前端实践思考与总结
查看>>
oldboy.16课
查看>>
OLEDB IMEX行数限制的问题
查看>>
ollama 如何删除本地模型文件?
查看>>
ollama-python-Python快速部署Llama 3等大型语言模型最简单方法
查看>>
Ollama怎么启动.gguf 大模型
查看>>
ollama本地部署DeepSeek(Window图文说明)
查看>>
ollama运行多模态模型如何进行api测试?
查看>>
OMG,此神器可一次定一周的外卖
查看>>
Omi 多端开发之 - omip 适配 h5 原理揭秘
查看>>
On Error GOTO的好处
查看>>
onclick事件的基本操作
查看>>
oncopy和onpaste
查看>>
onCreate中的savedInstanceState作用
查看>>
onCreate()方法中的参数Bundle savedInstanceState 的意义用法
查看>>
One good websit for c#
查看>>
One-Shot学习/一次学习(One-shot learning)
查看>>
OneASP 安全公开课,深圳站, Come Here, Feel Safe!
查看>>