tensflow

tensorflow学习笔记2

2018-11-26  本文已影响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)

上一篇 下一篇

猜你喜欢

热点阅读