深层神经网络之经典损失函数

本文介绍了交叉熵在深度学习中的作用,它用于衡量概率分布之间的距离。在TensorFlow中,通过`tf.nn.softmax_cross_entropy_with_logits`计算交叉熵,结合softmax层确保输出为概率分布。同时,文章探讨了矩阵乘法与元素乘法的区别,并展示了如何避免log数值问题。

一, 交叉熵函数

交叉熵是一个信息论中的概念,但在此我们不深究它的本身意义,我们要知道,交叉熵刻画了两个概率分布之间的距离,在深度神经网络的构建中,我们知道真实值和预测值之间会存在一个差值,这也就是为什么使用交叉熵函数的原因.

给定两个概率分布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, 5

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值