TensorFlow学习笔记------深层神经网络知识点

深层神经网络:

1、深层神经网络:一个多层、非线性预测模型。
    线性模型具有局限性,假设一个三层的神经网络,每层之间都是线性的,那么有
    output = input * W1 * W2
    W1,W2分别为输入层到唯一的隐藏层,隐藏层到输出层的矩阵
    那么W1*W2是一个定值。所以,如果是线性模型,那么无论有多少层,都可以等效成一个矩阵,和一层是一样的。
    
    但大多数实际问题,都无法直接用线性模型划分。

2、用激活函数去线性化
    非线性激活函数:tf.nn.relu、tf.sigmoid、tf.tanh等
    如下代码实现了去线性化:
    a = tf.nn.relu(tf.matmul(x,w1) + biases1)
    y = tf.nn.relu(tf.matmul(a,w2) + biases2)
    
3、多层神经网络中隐藏层能够提取更高维度的特征信息,所以更容易解决复杂问题

对于分类问题::

4、交叉熵:
    H(p,q) = -Σp(x)log(q(x))
    用于描述概率分布p和q之间的距离。
    H(p,q)≠H(q,p)
    即交叉熵描述的是用概率分布q表达概率分布p的可信程度。交叉熵越小,越可信。
    实现代码为:
    cross_entropy = -tf.reduce_mean( y * tf.log(tf.clip_by_value(y,1e-10,10)))
    

5、神经网络的输出不一定是概率分布,可以用softmax回归转为概率分布
    假设一个n分类问题的输出层为n个节点,那么
        softmax(y) = (e^y)/(Σe^y(i))
    TF中去掉了softmax的单独实现,自己需要实现,可以按照如上公式在神经网络中加入一个softmax层
    
    TF提供了softmax回归和交叉熵一起使用的函数
    cross_entropy = tf.nn.softmax_cross_entropy_with_logits(lables=y_,logits=y)
    
    如果分类问题只有一个正确答案,可以用tf.nn.sparse_softmax_cross_entropy_with_logits(lables=y_,logits=y)加速
    

对于回归问题(预测某一个数值)::
    
6、常见的损失函数是均方误差,也叫均方差
    MSE(y,y')=(Σ(y-y')^2)/n    
    描述了一个batch中,各个预测结果y'和真实结果y之间的误差,数值越大,误差越大。代码为:
    mse = tf.reduce_mean(tf.square(y-y'))

7、针对某些问题的自定义损失函数:比如预测销量对收入的影响,多生产一个,损失生产成本10元,少生产一个,损失利润1元,所以,多和少的loss是不同的。而MSE对预测多和预测少的损失的估计是一样的,因此有时候需要自己定义loss函数。如:
    loss = tf.reduce_sum(tf.where(tf.greater(x,x0),5*(x-x0),1*(x0-x)))
    

8、梯度下降算法:沿着使loss变小的梯度方向,调整参数值。
   学习率:每次调整参数的幅度。


9、神经网络训练的一般过程:
    batch_size = n
    x = tf.placeholder(tf.float32,shape=(batch_size,2),name="x-input")
    y = tf.placeholder(tf.float32,shape=(batch_size,1),name="y-input")
    
    loss = ...
    train_step = tf.train.AdamOptimizer(0.001).minimize(loss)

    with tf.Session() as sess:
        ...
        STEPS = ...
        for i in range(STEPS):
        CURRENT_X = ...
        CURRENT_Y = ...
        sess.run(train_step,feed_dict={x:CURRENT_X,Y:CURRENT_Y})

10、学习率设置:指数衰减法。即训练前期学习率较高,保证迅速接近最优解;训练后期学习率较低,保证训练结果较为稳定。可以使用函数:
    tf.train.exponential_decay()实现指数衰减的学习率,该代码实现了如下功能:
    decayed_learning_rate = learning_rate * decay_rate ^ (global_step/decay_steps)
    其中:learning_rate为初始学习率,decay_rate为衰减系数,global_step正在进行第几轮训练(使用第几个batch),decay_steps为衰减速度。
    
    通过设置该函数的staircase值来确定学习率是连续变化的还是阶梯式变化的。False->连续变化;True->(global_step/decay_steps)这个算式被转化成整数,呈阶梯式变化。
    
    在staircase = True的情况下,decay_steps一般设置为完整训练完一遍数据所需要的轮数。此时,每训练一遍数据就改变一次学习率,使得训练得到的模型适合所有的数据。
    
    演示代码:
    global_steps = tf.Variable(0)
    
    learning_rate = tf.train.exponential_decay(0.1,global_step,100,0.96,staircase=True)
    其中初始学习率为0.1,每训练100轮之后,学习率乘0.96,阶梯化为真。这都TM是通过经验设定的...
    
    learning_step = tf.train.GradientDescentOptimizer(learning_rate).minimize(...my loss...,global_step=global_step)
    传入global_step会使得它得到自动更新。
    
    

 

 

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值