cross entropy
来源:互联网 发布:雾炮机 知乎 编辑:程序博客网 时间:2024/05/17 23:02
出处:https://liusida.github.io/2016/11/25/cross-entropy/
Cross Entropy 的通俗意义
25 Nov 2016cross_entropy 公式如下:
它描述的是可能性 S 到 L 的距离,也可以说是描述用 S 来描述 L 还需要多少信息(如果是以2为底的log,则代表还需要多少bit的信息;如果是以10为底的log,则代表还需要多少位十进制数的信息)。
当年 香农 Shannon 创立信息论的时候,考虑的是每一次都是扔硬币,结果只有2个可能,所以用的是以2为底,发明了bit计量单位。
而软件实现,例如 Tensorflow 里的实现,则是使用以 e 为底的log。
Tensorflow 中有个经常用到的函数叫 tf.nn.softmax_cross_entropy_with_logits
。这个函数的实现并不在 Python 中,所以我用 Numpy 实现一个同样功能的函数进行比对,确认它使用的是以 e 为底的log。理由很简单,因为 Softmax 函数里使用了 e 的指数,所以当 Cross Entropy 也使用以 e 的log,然后这两个函数放到一起实现,可以进行很好的性能优化。
其中对于 logits 这个称呼,我仍然没有明白是为什么。
import tensorflow as tfimport numpy as np# Make up some testing data, need to be rank 2x = np.array([[0.,2.,1.],[0.,0.,2.]])label = np.array([[0.,0.,1.],[0.,0.,1.]])# Numpy part #def softmax(logits): sf = np.exp(logits) sf = sf/np.sum(sf, axis=1).reshape(-1,1) return sfdef cross_entropy(softmax, labels):return -np.sum( labels * np.log(softmax), axis=1 )def loss(cross_entropy):return np.mean( cross_entropy )numpy_result = loss(cross_entropy( softmax(x), label ))print(numpy_result)# Tensorflow part #g = tf.Graph()with g.as_default():tf_x = tf.constant(x)tf_label = tf.constant(label)tf_ret = tf.reduce_mean( tf.nn.softmax_cross_entropy_with_logits(tf_x,tf_label) )with tf.Session(graph=g) as ss:tensorflow_result = ss.run([tf_ret])print(tensorflow_result)
附各公式
### 1. Softmax
这里的 X 就是 logits,S 表示一次判断,Si 表示一次判断中的第i个选项。
### 2. Cross Entropy
这里 D 表示一次判断,Li 是一次判断中一个 label 的第 i 个选项。log 是以 e 为底。
### 3. loss
这里的 Dk 表示第 k 次判断,N 表示总次数,也就是取平均值。
- Cross entropy
- cross-entropy
- cross entropy
- Cross Entropy Error Function
- Cross-Entropy 交叉熵
- Cross-entropy cost
- 分类loss cross-entropy
- cross-entropy函数
- cross entropy的梯度
- Difference between Cross Entropy and Joint Entropy
- mutual information vs cross-entropy
- 交叉熵(Cross-Entropy)
- softmax与cross-entropy loss
- softmax与cross-entropy loss
- 交叉熵(Cross-Entropy)
- Tensorflow四种Cross Entropy
- 交叉熵(Cross Entropy)
- 交叉熵(Cross-Entropy)
- SpringAOP动态拦截方法并重写
- Kotlin系统入门与进阶(一)
- Java中使用TCP协议的简单连接
- 利用ES6中的模板字符串轻松实现多行和字符串值的插入
- maven exclude 排除文件夹
- cross entropy
- intell IDEA 代码自动提示功能没有LE ---File >Power Save Mode 被勾选了 去掉勾选就可以了
- 简单排序——选择排序
- equals与"==" 同时判断时前后位置不同的后果
- git log统计每个作者的代码量
- UVa
- Android Fragment 真正的完全解析(上)
- 使用dex2jar和luyten查看apk中的class代码
- 设置开发板的IP