Tensorflow损失函数简例(源码)

#coding=utf-8
import tensorflow as tf


#通过TensorFlow实现交叉熵
#cross_entropy = -tf.reduce_mean(
#    y_ * tf.log(tf.clip_by_value(y, 1e-10, 1.0)))
'''
y_ 代表正确结果
y 代表预测结果


tf.clip_by_value 函数,可以将一个张量中的数值限制在一个范围内(避免出现如log0是无效的)


tf.log 函数,对张量中所有元素依次求对数


* 操作,元素间直接相乘。(区别于tf.matmul函数,矩阵相乘)


这三步完成了对每一个对应位置的元素即每一个样例中的每一个类别交叉熵p(x)logq(x)的计算。得到一个n*m(一个batch中样例的数量×分类的类别数量)的二维矩阵。行数*列数。
'''
with tf.Session() as sess:
    v = tf.constant([[1.0, 2.0, 3.0],[4.0, 5.0, 6.0]])
    print tf.clip_by_value(v, 2.5, 4.5).eval()
#输出[[2.5 2.5 3.],[4. 4.5 4.5]]


    print tf.log(v).eval()
#输出[0. 0.69314718 1.09861231] ...此处省略一行数据


    v1 = tf.constant([[1.0, 2.0], [3.0, 4.0]])
    v2 = tf.constant([[5.0, 6.0], [7.0, 8.0]])
    print (v1 * v2).eval()
#输出[[ 5. 12.] [ 21. 32.]],为每个位置上对应元素的乘积
    print tf.matmul(v1 , v2).eval()
#输出[[ 19. 22.]] [ 43. 50.]],进行矩阵乘法运算


    print tf.reduce_mean(v).eval() #输出3.5
'''
tf.reduce_mean 函数,把每行的m个结果相加得到所有样例的交叉熵,然后再对这n行取平均值得到一个batch的平均交叉熵。


'''
   




'''
交叉熵与Softmax回归一起使用的函数
cross_entropy = tf.nn.softmax_cross_entropy_with_logits(y, y_)
y 代表神经网络输出结果
y_ 代表标准答案
如果只有一个正确答案,可以使用的函数(可以加速计算过程)
tf.nn.sparse_softmax_cross_entropy_with_logits


回归问题常用损失函数是 均方差(MSE, mean squared error),也常被用于分类问题,MSE(y,y')=((y-y')^2)/n ,y和y'下标为i,i为1到n,对n个对应下标i的(y-y')平方后求累和再除于n。
mse = tf.reduce_mean(tf.square(y_ - y))#减法为矩阵中对应元素的减法
'''


'''
自定义损失函数,例:利润最大化,成本为1,利润为10,预测销量y,与真实销量y_构成损失函数
loss = tf.reduce_sum(tf.select(tf.greater(y, y_),
                                          (y - y_) * loss_more,
                                          (y_ - y) * loss_less))
'''


你可能感兴趣的:(Tensorflow,TensorFlow,损失函数,深度学习)