zoukankan      html  css  js  c++  java
  • 鱼书学习笔记:损失函数

    神经网络的学习中所用的指标称为损失函数(loss function)这个损失函数可以使用任意函数,但一般使用均方误差和交叉熵误差等。

    损失函数是表示神经网络性能的“恶劣程度”的指标,即当前神经网络对监督数据在多大程度上不拟合,在多大程度上不一致。

    均方误差

    公式:E=1/2Σ(yk-tk)2

    这里,yk表示神经网络的输出,tk表示监督数据,k表示数据的维度。

    代码

    def mean_squared_error(y, t):
        return 0.5 * np.sum((y-t)**2)

    交叉熵误差

    公式:E=-Σktklogyk

    这里,log表示以e为底数的自然对数(loge)。yk是神经网络的输出,tk是正确解标签

    代码

    def cross_entropy_error(y, t):
        delta = 1e-7
        return -np.sum(t * np.log(y + delta))

    函数内部在计算np.log时,加上了个微小值delta。这是因为,当出现np.log(0)时,np.log(0)会变为负无限大的-inf,这样一来就会导致后续计算无法进行。作为保护性对策,添加一个微小值可以防止负无限大的发生。

    mini-batch交叉熵误差

    通常情况下,如果以全部数据为对象求损失函数的和,则计算过程需要花费较长的时间。因此,我们选择从全部数据中选出一部分,作为全部数据的“近似”。神经网络的学习也是从训练数据中选出一批数据(称为mini-batch,小批量),然后对每个mini-batch进行学习。这种学习方式称为mini-batch学习

    公式:E=-1/NΣnΣktnklogynk

    这里,假设数据有N个,tnk表示第n个数据的第k个元素的值(ynk是神经网络的输出,tnk是监督数据)。通过除以N,可以求单个数据的“平均损失函数”

    代码

    def cross_entropy_error(y, t):
        if y.ndim == 1:
            t = t.reshape(1, t.size)
            y = y.reshape(1, y.size)
    
        batch_size = y.shape[0]
        return -np.sum(t * np.log(y + 1e-7)) / batch_size

    当监督数据是标签形式(非one-hot表示,而是像“2”“7”这样的标签)时,交叉熵误差可通过如下代码实现:

    def cross_entropy_error:
        if y.ndim == 1:
            t = t.reshape(1, t.size)
            y = y.reshape(1, t.size)
    
        batch_size = y.shape[0]
        return -np.sum(np.log(y[np.arrange(batch_size), t] + 1e-7)) / batch_size
  • 相关阅读:
    iOS开发之友盟分享的使用
    iOS开发之AFNetworking开源库的使用
    iOS开发之网络基础知识
    iOS开发之Block
    iOS开发之数据库FMDB
    iOS开发常用的网站
    iOS开发之下拉刷新和上拉加载更多
    iOS开发之XML解析
    iOS之网络数据下载和JSON解析
    Linux 部署项目经验总结
  • 原文地址:https://www.cnblogs.com/J14nWe1/p/14558012.html
Copyright © 2011-2022 走看看