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的值