一, 交叉熵函数
交叉熵是一个信息论中的概念,但在此我们不深究它的本身意义,我们要知道,交叉熵刻画了两个概率分布之间的距离,在深度神经网络的构建中,我们知道真实值和预测值之间会存在一个差值,这也就是为什么使用交叉熵函数的原因.
给定两个概率分布p,q, 通过q来表示p的交叉熵为
在这里我们要知道交叉熵函数刻画的是两个概率分布之间的距离,但神经网络的输出不一定是一个概率分布,所以,我们将会采用softmax回归函数,softmax回归本身可以作为一个学习算法来优化分类结果,在TensorFlow中,softmax只是一层额外的处理层,它被加在原始输出层和最终输出层中间,目的就是输出一个概率分布.
通过TensorFlow实现交叉熵函数
y_代表正确结果,y代表预测结果,在这里一定要知道H(p,q)和H(q,p)是不一样的,当交叉熵作为神经网络的损失函数时,前一个代表正确答案,后一个代表预测答案,这一行代码包含了4个不同的TensorFlow运算
tf.clip_by_value()函数可以将一个张量中的数值限制在一个范围内在这个里面就是将y限制在[1e-10, 1.0]这个区间内
tf.log()函数完成了对张量中所有元素依次求对数的功能
"*"和矩阵乘法是不一样的,因为在在TensorFlow中矩阵乘法需要使用matmul()函数进行相乘,在这里的相乘是元素的相乘
两者的区别
通过上面的三步计算,我们会得到一个n×m的矩阵,这里的n代表的是一个batch(批处理)中的所有样例的数量,m为分类的数量,然后我们要把每行中的m个结果相加得到总的交叉熵,然后在对n行取平均得到一个batch的平均交叉熵,因为交叉熵一般会和softmax一起使用,所以TensorFlow将这两个封装在了一起
其中y代表原始神经网络输出结果,y_则是标准答案,