美文网首页tensflow
tensorflow学习笔记2

tensorflow学习笔记2

作者: 山横烟聚 | 来源:发表于2018-11-26 08:44 被阅读1次

    第四讲 神经网络优化

    激活函数
    1、relu,即f(x)=max(x,0),对应为tf.nn.relu()
    2、sigmoid,即f(x)=\frac{1}{1+e^{-x}},对应为tf.nn.sigmoid()
    3、tanh,即f(x)=\frac{1-e^{-2x}}{1+e^{-2x}},对应为tf.nn.tanh()

    损失函数
    即预测值(y)与已知答案(y_)的差距。NN优化目标就是使得LOSS最小。
    损失函数也有多种,有均方误差、自定义和交叉熵。
    1、均方误差mse:MSE(y_,y)=\frac{\sum_{i=1}^n(y-y_-)^2}{n}
    对应代码为loss_mse=tf.reduce_mean(tf.square(y_-y))
    下面为该误差函数的应用代码:

    import tensorflow as tf
    import numpy as np
    
    #0.准备
    seed = 12345
    BATCH_SIZE = 8
    
    rdm = np.random.RandomState(seed)
    X = rdm.rand (32,2)
    Y_ = [[x1+x2+(rdm.rand()/10.0-0.05)]for (x1,x2) in X]
    
    #1.前向传播
    x = tf.placeholder(tf.float32, shape=(None,2))
    y_ =tf.placeholder(tf.float32, shape=(None,1))
    w1 = tf.Variable(tf.random_normal([2,1],stddev=1,seed =1))
    y = tf.matmul(x,w1)
    
    #2.后向传播
    loss_mse = tf.reduce_mean(tf.square(y_-y))
    train_step = tf.train.GradientDescentOptimizer(0.001).minimize(loss_mse)
    
    #3.生成会话
    with tf.Session as sess:
        init_op = tf.global_variables_initializer()
        sess.run(init_op)
        STEPS = 20000
        for i in range(STEPS):
                start = (i*BATCH_SIZE) %32
                end = (i*BATCH_SIZE) %32 +BATCH_SIZE
                sess.run(train_step, feed_dict = {x: X[start:end], y_:Y_[start:end]})
                if i % 500 == 0:
                      print ("After %d trainning steps, w1 is:" % (i))
                      print (sess.run(w1),"\n")
        print ("Final w1 is :\n", sess.run(w1))
    

    2、自定义损失函数:
    MSE的意义是,无论预测值大于或小于实际值,只有大小差异,没有正负差异。而在一些实际过程中比如预测商品销量,预测多意味着损失成本,而预测少则意味着损失利润。若利润不等于成本,则正负存在差异。用MSE不能有效描述。
    因此自定义损失函数为loss(y_-,y)=\sum_nf(y_-,y),相应代码为loss=tf.refuce_sum(tf.where(tf.greater(y,y_),COST(y-y_),PROFIT(y_-y)))

    3、交叉上个Cross Entropy
    表征两个概率分布之间的距离。H(y_-,y)=-\sum y_-*logy,代码为ce = -tf.reduce_mean(y_*tf.log(tf.clip_by_value(y,1e-12,1.0)))
    要求n分类的n个输出通过softmax()函数满足概率分布的要求,有softmax(y_i)=\frac{e^{y_i}}{\sum_{j=1}^ne^{y_i}},代码为ce = tf.nn.sparse_softmax_cross_entropy_with_logits(logits=y,labels=tf.argmax(y_,1)) cem = tf.reduce_mean(ce)

    相关文章

      网友评论

        本文标题:tensorflow学习笔记2

        本文链接:https://www.haomeiwen.com/subject/fblmqqtx.html