美文网首页
机器学习读书笔记 — 交叉熵

机器学习读书笔记 — 交叉熵

作者: 爱秋刀鱼的猫 | 来源:发表于2018-01-28 20:25 被阅读0次

1. 交叉熵能干什么
在机器学习里面,解决多分类的问题(比如识别手写字符),一般会用one-hot的向量去表示分类的结果。如下图所示,表示 0-9 十个类中一个类的 one-hot 向量。

假设实际图像上是数字 “1”,它的 one-hot 向量是 [0,1,0,0,0,0,0,0,0,0],假设其预测向量 (y) [1.3, 33, 2, 1.2, 3.2, 0.5, 3, 9.2, 1],绘制比较如下:


预测输出和真实的输出

对于网络产生的预测的输出和真实的输出,要计算一个cost,作为评价网络模型好坏的cost。这个时候,就是发挥交叉熵作用的时候了。

2.什么是交叉熵

为了利用交叉熵,我们需要将 预测向量 y= [1.3, 10, 2, 1.2, 3.2, 0.5, 3, 9.2, 1] 转换成概率分布,概率分布需要满足如下条件 :

  • 每个类的概率/分数值在 0-1 之间;
  • 所以类的概率/分数和必须是 1;
这个转换成概率分布的函数就叫softmax

写一段代码,实现一下softmax(注意softmax并不是交叉熵!)。将 预测向量y= [1.3, 10, 2, 1.2, 3.2, 0.5, 3, 9.2, 1] 转换成概率分布。

import math 
import matplotlib.pyplot as plt 

def softmax(y):
    res=[]
    for i in y:
        res.append(math.exp(i))
    res_sum=sum(res)
    softmax_res = [ i/float(res_sum) for i in res]
    return softmax_res

if __name__ =="__main__":
    y = [1.3, 10, 2, 1.2, 3.2, 0.5, 3, 9.2, 1]
    res=softmax(y)
    plt.plot(res)
    plt.show()
image.png

概括一下,什么是softmax?
softmax是一个针对多类分类,输出的是每一个分类的概率。

重点来了,到了交叉熵的部分啦

最后一步,就求解交叉熵:


写一个代码,实现计算一下交叉熵。
计算一下 y_true = [0,1,0,0,0,0,0,0,0] , y = [1.3, 10, 2, 1.2, 3.2, 0.5, 3, 9.2, 1]的交叉熵。

import math 
import matplotlib.pyplot as plt 

def softmax(y):
    res=[]
    for i in y:
        res.append(math.exp(i))
    res_sum=sum(res)
    softmax_res = [ i/float(res_sum) for i in res]
    return softmax_res

#tf里面有这个函数,可以很方便的计算交叉熵 tf.nn.softmax_cross_entropy_with_logits(labels=y_true, logits=y)
def cross_entroy(y_true,y):
    softmax_res = softmax(y)
    log_res = list(map(math.log,softmax_res))
    cross_entroy =0.0 
    for i,j in zip(y_true,log_res):
        cross_entroy=cross_entroy + i * j
    return -cross_entroy 

if __name__ =="__main__":
    y_true = [0,1,0,0,0,0,0,0,0]
    y = [1.3, 10, 2, 1.2, 3.2, 0.5, 3, 9.2, 1]
    print (cross_entroy(y_true,y))  # 0.3730835485063131

tensorflow里面也有计算交叉熵的

import tensorflow as tf

y_true = [0,1,0,0,0,0,0,0,0]
y = [1.3, 10, 2, 1.2, 3.2, 0.5, 3, 9.2, 1]

sess = tf.Session()
print (sess.run(tf.nn.softmax_cross_entropy_with_logits(labels=y_true, logits=y)))
# 0.373083

so , 小结一下

  • 交叉熵在机器学习里面是用来计算多分类问题的cost
  • softmax是计算交叉熵的一个步骤,和交叉熵是区别的
  • softmax是将一个向量转换成它的概率分布

相关文章

  • 信息熵,条件熵,相对熵,交叉熵

    转自详解机器学习中的熵、条件熵、相对熵和交叉熵[https://www.cnblogs.com/kyrieng/p...

  • 交叉熵

    一文搞懂交叉熵在机器学习中的使用,透彻理解交叉熵背后的直觉KL(kullback-Leibler-devergen...

  • 机器学习中的熵、条件熵、相对熵(KL散度)和交叉熵

    GitHub简书CSDN 该文章转载自详解机器学习中的熵、条件熵、相对熵和交叉熵 1、信息熵 (informati...

  • 机器学习读书笔记 — 交叉熵

    1. 交叉熵能干什么在机器学习里面,解决多分类的问题(比如识别手写字符),一般会用one-hot的向量去表示分类的...

  • 机器学习基础之交叉熵与均方误差

    机器学习基础之交叉熵与均方误差 我们都知道,对于分类任务,可以选用交叉熵做为模型的损失函数;对于回归任务,可以选用...

  • [机器学习]“交叉熵”函数

    交叉熵产生于信息论里面的信息压缩编码技术,但是它后来演变成为从博弈论到机器学习等其他领域里的重要技术手段。 1.什...

  • 损失函数

    聊聊机器学习中的损失函数 机器学习中的损失函数 平方损失(线性回归) 对数损失(交叉熵损失 softmax, lo...

  • KL散度其实就是相对熵

    一直以为KL散度是什么新奇玩意,但是其实还是旧瓶装新酒 机器学习中的熵、条件熵、相对熵(KL散度)和交叉熵_冉茂松...

  • 机器学习中的交叉熵

    p和q是两个概率分布。其中xi是取值的可能,在机器学习中,xi为样本的某一个类别的可能,n为类标的数量。p(xi)...

  • 交叉熵和logloss等价的推导

    机器学习中的基本问题——log损失与交叉熵的等价性https://blog.csdn.net/google1989...

网友评论

      本文标题:机器学习读书笔记 — 交叉熵

      本文链接:https://www.haomeiwen.com/subject/cxdoaxtx.html