概述
一, 交叉熵函数
交叉熵是一个信息论中的概念,但在此我们不深究它的本身意义,我们要知道,交叉熵刻画了两个概率分布之间的距离,在深度神经网络的构建中,我们知道真实值和预测值之间会存在一个差值,这也就是为什么使用交叉熵函数的原因.
给定两个概率分布p,q, 通过q来表示p的交叉熵为
H(p,q) = -∑ p(x) log q(x)
在这里我们要知道交叉熵函数刻画的是两个概率分布之间的距离,但神经网络的输出不一定是一个概率分布,所以,我们将会采用softmax回归函数,softmax回归本身可以作为一个学习算法来优化分类结果,在TensorFlow中,softmax只是一层额外的处理层,它被加在原始输出层和最终输出层中间,目的就是输出一个概率分布.
通过TensorFlow实现交叉熵函数
cross_entropy = -tf.reduce_mean(y_ * tf.log(tf.clip_by_value(y, 1e-10,1.0)))
y_代表正确结果,y代表预测结果,在这里一定要知道H(p,q)和H(q,p)是不一样的,当交叉熵作为神经网络的损失函数时,前一个代表正确答案,后一个代表预测答案,这一行代码包含了4个不同的TensorFlow运算
tf.clip_by_value()函数可以将一个张量中的数值限制在一个范围内在这个里面就是将y限制在[1e-10, 1.0]这个区间内
tf.log()函数完成了对张量中所有元素依次求对数的功能
"*"和矩阵乘法是不一样的,因为在在TensorFlow中矩阵乘法需要使用matmul()函数进行相乘,在这里的相乘是元素的相乘
两者的区别
v1 = tf.constant([1,2], [3,4]) v2 = tf.constant([5,6], [7,8])
print(v1 * v2).eval() #输出[[5, 12], [21, 32]]
print(tf.matmul(v1, v2).eval())#输出[[19, 22] [43, 50]]
通过上面的三步计算,我们会得到一个n×m的矩阵,这里的n代表的是一个batch(批处理)中的所有样例的数量,m为分类的数量,然后我们要把每行中的m个结果相加得到总的交叉熵,然后在对n行取平均得到一个batch的平均交叉熵,因为交叉熵一般会和softmax一起使用,所以TensorFlow将这两个封装在了一起
cross_entropy = tf.nn.softmax_cross_entropy_with_logits(labels=y_, logits=y)
其中y代表原始神经网络输出结果,y_则是标准答案,
最后
以上就是烂漫猫咪为你收集整理的深层神经网络之经典损失函数的全部内容,希望文章能够帮你解决深层神经网络之经典损失函数所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复