深度学习--损失函数


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

均方差

E = 1 / 2 ∑ k ( y k − t k ) 2 E = 1/2\sum_{k}(y_k - t_k)^2 E=1/2k(yktk)2
yk表示神经网络的输出,tk表示监督数据,k表示数据的维度

y = [0.1,0.05,0.6,0.0,0.05,0.1,0.0,0.1,0.0,0.0]#softmax函数的输出值
t = [0,0,1,0,0,0,0,0,0,0,0]#正确的解是1,其他为0

数组元的索引从第一个开始依次对应的数字“0”,“1”,“2”,…。这里的y是神经网络的输出ysoftmax函数的输出。上述的列子可以表达“0”的概率是0.1,“1”的概率是0.05,“2”的概率是0.6。t是监督数据,将正确解的标签是1,其他的均为0
代码实现:

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

交叉熵误差

E = − ∑ k ( t k l o g y k ) E = -\sum_{k}(t_k logy_k) E=k(tklogyk)
这里的log表示以e为底的自然对数(loge)
代码实现:

def cross_entropy_error(y,t):
	dalta = le-7#表示10的-7次方
	return -np.sum(t * np.log(y+delta))

这里加上一个微小值delta,是因为np.log(0)时,会出现np.log(0)为负无穷大-inf,导致后面的结果无法运行

mini-batch

神经网络的学习是通过从训练集中选出一批数据(称为mini-batch,小批量),然后在对每一个mini-batch进行学习。比如,从60000个训练数据中随机选择100笔,在对100笔数据进行学习。

mini-batch版交叉熵误差

改良一下之前实现对应单数据的交叉熵误差。

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 + le-7)) / batch_size

此外当监督数据是标签形式(非one-hot表示,而是像“2”,“7”这样的标签时),使用下面代码实现

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(np.log(y[np.arange(batch_size),t]+le-7) / batch_size
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值