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
  • 相关阅读:
    让我偷偷的告诉你:运维加薪的杀手锏是啥?
    网站页面优化必然趋势—WebP 图片!
    如何监控 Tomcat?Zabbix 与 Cloud Insight 对比
    网页增重不可控?试试 OneAPM Cloud Test
    提高 ASP.NET Web 应用性能的 24 种方法和技巧
    OneAlert 入门(三)——事件分析
    Cloud Insight 客户案例-晨芯时代科技有限公司
    Java开发快速上手
    微信小程序快速开发上手
    微信小程序快速开发上手
  • 原文地址:https://www.cnblogs.com/J14nWe1/p/14558012.html
Copyright © 2011-2022 走看看