转载于人工智能实践:Tensorflow笔记
- 神经元模型:用数学公式表示为:?(∑????? + ?),f 为激活函数。神经网络是以神经元为基本单元构成的。
- 激活函数:引入非线性激活因素,提高模型的表达力。
常用的激活函数有 relu、sigmoid、tanh 等。
- ① 激活函数 relu: 在 Tensorflow 中,用 tf.nn.relu()表示
文章图片
- ② 激活函数 sigmoid:在 Tensorflow 中,用 tf.nn.sigmoid()表示
文章图片
- ③ 激活函数 tanh:在 Tensorflow 中,用 tf.nn.tanh()表示
文章图片
- 神经网络的复杂度:可用神经网络的层数和神经网络中待优化参数个数表示
- 神经网路的层数:一般不计入输入层,层数 = n 个隐藏层 + 1 个输出层
- 神经网路待优化的参数:神经网络中所有参数 w 的个数 + 所有参数 b 的个数
文章图片
- 在该神经网络中,包含 1 个输入层、1 个隐藏层和 1 个输出层,该神经网络的层数为 2 层。
- 【#|Tensorflow 笔记(神经网络优化(1))】在该神经网络中,参数的个数是所有参数 w 的个数加上所有参数 b 的总数,第一层参数用三行四列的二阶张量表示(即 12 个线上的权重 w)再加上 4 个偏置 b;第二层参数是四行两列的二阶张量()即 8 个线上的权重 w)再加上 2 个偏置 b。总参数 = 34+4 + 42+2 = 26。
- 损失函数(loss):用来表示预测值(y)与已知答案(y_)的差距。在训练神经网络时,通过不断改变神经网络中所有参数,使损失函数不断减小,从而训练出更高准确率的神经网络模型。
- 常用的损失函数有均方误差、自定义和交叉熵等。
均方误差 mse:n 个样本的预测值 y 与已知答案 y_之差的平方和,再求平均值。
文章图片
在 Tensorflow 中用loss_mse = tf.reduce_mean(tf.square(y_ - y))
自定义损失函数:根据问题的实际情况,定制合理的损失函数。
自定义损失函数为:loss = ∑??(y_, y)
其中,损失定义成分段函数:
文章图片
用 Tensorflow 函数表示为:
loss = tf.reduce_sum(tf.where(tf.greater(y,y_),COST(y-y_),PROFIT(y_-y)))
交叉熵(Cross Entropy):表示两个概率分布之间的距离。交叉熵越大,两个概率分布距离越远,两个概率分布越相异;交叉熵越小,两个概率分布距离越近,两个概率分布越相似。
交叉熵计算公式:?(?_ , ?) = ?∑?_ ? ??? ?
用 Tensorflow 函数表示为ce= -tf.reduce_mean(y_* tf.log(tf.clip_by_value(y, 1e-12, 1.0)))
- softmax 函数:将 n 分类的 n 个输出(y1,y2…yn)变为满足以下概率分布要求的函数。
文章图片
- softmax 函数应用:在 n 分类中,模型会有 n 个输出,即 y1,y2…yn,其中 yi 表示第 i 种情况出现的可能性大小。将 n 个输出经过 softmax
函数,可得到符合概率分布的分类结果。
- 在 Tensorflow 中,一般让模型的输出经过 sofemax 函数,以获得输出分类的概率分布,再与标准
答案对比,求出交叉熵,得到损失函数,用如下函数实现:
ce = tf.nn.sparse_softmax_cross_entropy_with_logits(logits=y, labels=tf.argmax(y_, 1)) cem =
tf.reduce_mean(ce)
- 学习率
学习率 learning_rate:表示了每次参数更新的幅度大小。学习率过大,会导致待优化的参数在最小值附近波动,不收敛;学习率过小,会导致待优化的参数收敛缓慢。
在训练过程中,参数的更新向着损失函数梯度下降的方向。参数的更新公式为:W?+? = W? ? ????????_?????
学习率过大,会导致待优化的参数在最小值附近波动,不收敛;学习率过小,会导致待优化的参数收敛缓慢。
学习率计算公式如下:
文章图片
用 Tensorflow的函数表示 函数表示 为:
global_step = tf.Variable(0, trainable=False)
learning_rate = tf.train.exponential_decay( LEARNING_RATE_BASE,
global_step,
LEARNING_RATE_STEP, LEARNING_RATE_DECAY,
staircase=True/False)
- 其中,LEARNING_RATE_BASE 为学习率初始值,LEARNING_RATE_DECAY 为学习率衰减率,global_step 记录了当前训练轮数,为不可训练型参数。学习率 learning_rate 更新频率为输入数据集总样本数除以每次喂入样本数。若 staircase 设置为 True 时,表示 global_step/learning rate step 取整数,学习率阶梯型衰减;若 staircase 设置为 false 时,学习率会是一条平滑下降的曲线。
- 滑动平均:记录了一段时间内模型中所有参数 w 和 b 各自的平均值。利用滑动平均值可以增强模
型的泛化能力。
- 滑动平均值(影子)计算公式:
影子 = 衰减率 * 影子 +(1 - 衰减率)* 参数
文章图片
用 Tesnsorflow 函数表示为:
ema = tf.train.ExponentialMovingAverage(MOVING_AVERAGE_DECAY,global_step)
其中,MOVING_AVERAGE_DECAY 表示滑动平均衰减率,一般会赋接近 1 的值,global_step 表示当前训练了多少轮。
ema_op = ema.apply(tf.trainable_variables())
其中,**ema.apply()函数实现对括号内参数求滑动平均,tf.trainable_variables()**函数实现把所有待训练参数汇总为列表。
with tf.control_dependencies([train_step, ema_op]):
train_op = tf.no_op(name='train')
? 其中,该函数实现将滑动平均和训练过程同步运行。 查看模型中参数的平均值,可以用 **ema.average()**函数。
推荐阅读
- #|PyTorch的十个优化器(SGD,ASGD,Rprop,Adagrad,Adadelta,RMSprop,Adam(AMSGrad),Adamax,SparseAdam,LBFGS)
- #|Java基础 --- 内部类 Inner Class
- #|Oracle数据库操作
- #|【Docker】<云原生>Linux安装Docker(无错完整)
- 运维|Docker基础01--入门总结--(狂神说docker学习笔记)
- #|LeetCode 209. 长度最小的子数组(中等、数组)day23
- #|基于节点导纳矩阵的三相配电系统建模(Matlab实现)
- #|送给她超浪漫的表白信——她感动哭了(.html)
- #|超级炫酷的3D旋转美女图——Python实现