深层神经网络
激活函数 - 非线性 ReLU,sigmoid, tanh.....
损失函数
分类问题- 交叉熵损失 :H(p,q) 通过概率分布q来表达概率分布p的困难程度
刻画两个概率分布的距离(正比)
code:cross_entropy = -tf.reduce_mean( y_*tf.log(tf.clip_by_value(y,1e - 10, 1.0)))
y_是正确结果,y是预测结果 tf.clip_by_value,将函数数值限定在某一范围 tf.log : 对张量里所有元素依次取对数
* : 矩阵元素间直接相乘,不是矩阵乘法
tf.reduce_mean:对整个矩阵做平均
-softmax回归处理:将网络输出变成概率分布
-交叉熵一般会与softmax一起使用
cross_entropy = tf.nn.softmax_cross_entropy_with_logits(y, y_)
如果只有一个正确结果:
cross_entropy = tf.nn.sparse_softmax_cross_entropy_with_logits(y, y_) 加速计算过程
回归问题(具体数值预测)- 均方误差(MSE)(也可用于分类问题)
code: mse = tf.reduce_mean(tf.square(y_-y))
自定义损失函数
loss = tf.reduce_sum(tf.select(tf.greater(v1, v2), a*(v1-v2), b*(v2-v1))
神经网络优化算法 -梯度下降算法(主要单个参数,可能得到局部最优解)
随机梯度下降法
折中:每次计算一个batch
-反向传播算法(所有参数下使用梯度下降)
-学习率设置-指数衰减法
tf.train.exponential_decay
实现了
decayed_learning_rate = \ learning_rate*decay_rate ^ (global_step / decay_steps)
decayed_learning_rate:每一轮优化的学习率
learning_rate:初始学习率
decay_rate:衰减系数
decay_steps:衰减速度
过拟合 - 正则化
在损失函数中加入刻画模型复杂程度的指标
L1正则化 tf.contrib.layers.11_regularizer(lambda)(w)
L2正则化 tf.contrib.layers.12_regularizer(lambda)(w) L2损失值要除以2,使得求导的
结果更加简洁
网络结构复杂后:用集合(collection)在graph中保存一组实体
滑动平均模型 -
tf.train.ExponentialMovingAverage(decay, num_updates)
decay: 衰减率,一般接近1
num_updates: 动态设置decay decay = min(decay, (1+num_updates)/(10+num_updates))
shadow_variable = decay * shadow_variable + (1-decay) * variable