神经网络的学习(训练):损失函数(均方误差、交叉熵误差)

1 神经网络学习(训练)步骤

    初始化权值和偏置参数——1 从总训练集抽取一批数据——2 前向传播计算损失、反向传播由损失计算各参数的梯度——3 利用梯度更新参数——4 重复1、2、3

2 神经网络:端对端的机器学习(从输入到输出);所有问题都可用统一的流程完成
3 损失函数:神经网络学习参数时的指标,使得损失函数最小的参数即为最优参数;损失函数一般用均方误差和交叉熵误差
4 均方误差(mean square error):E=1/2Σ(yk-tk)²;python实现:1/2*np.sum((yk-tk)**2);k为维数,
t为监督数据(训练数据),y为输出值;one-hot表示的话,正确解的标签为1
5 交叉熵误差(cross entropy error):E=-Σtk*log yk;log以e为底,y,t同上,t为one-hot标签形式时,正确解的标签为1
6 梯度:简单来说就是各个变量的偏导数组成的向量,梯度表示各点处函数值减小最多的方向,寻找最小值的梯度法为梯度下降法
表示为:x=x-η*grad;η为学习率,grad为梯度

 均方误差(mean square error)

#均方误差损失
def mean_square_error(y,t):
    return 1/2*np.sum((y-t)**2)

交叉熵误差(cross entropy error)

#交叉熵误差损失
def cross_entropy_error(y,t):
    delta=1e-7 #微小值,防止出现log(0)无穷小
    return -np.sum(t*np.log(y+delta))
#mini_bach版交叉熵,可用于one-hot或者非one-hot标签形式
def mini_bach_cross_entropy_error(y,t):
    #输入单个数据
    if y.ndim==1:
        t=t.reshape(1,t.size)
        y=y.reshape(1,y.size)
        
    #标签为one-hot时正确解标签为1,忽略为0的值,返回最大值标签的索引,one-hot时y.size=t.size=batch_size*class_num;class_num为分类的数目
    if y.size==t.size:
        t=t.argmax(t,axis=1) #返回第1轴(行)方向最大值的索引组成的一维数组
    batch_size=y.shape[0]
    
    return -np.sum(np.log(y[np.arange(batch_size),t]+1e-7))/batch_size #y[np.arange(batch_size),t]为索引访问y[a,b]位置的y的值

你可能感兴趣的:(笔记,神经网络,学习,机器学习)