单神经元BP神经网络
前言
学习单神经元BP神经网络的demo,该神经网络只有1层输出层
一、设置参数
- 图片大小 64*64
- 训练集 特征数据X(n,64,64,3)
- X = X.reshape(X, -1).T 转换为标准化参数X X(12288,1)
- 标签数据Y(1,n)
- 测试集 同上
- 权重数组w w(12288,1)
- 置值 b
- 学习率 r
- 样本数 n
二、涉及算法步骤
1.初始化W,b
随机初始化第一层(隐藏层)相关的参数w.
- w = np.zeros((dim,1)) w(12288,1)
- b = 0
1.前向传播
- X = X.reshape(X.shape[0], -1).T
- Z = np.dot(w.T,X) + b (X(12288,n)| w(12288,1))
- A = 1 / (1 + np.exp(-Z)) (A(1,n))
- cost = -np.sum(Y*np.log(A) + (1-Y)*np.log(1-A)) / m
- (Y*np.log(A)是数值相乘(向量对应元素相乘)而不是矩阵相乘)
2.反向数据
- dZ = A - Y dz大小 dz(1,n)
- dw = np.dot(X,dZ.T) / n dw (12288,1)
- db = np.sum(dZ) / n
3.梯度下降
通过多次反复1、2、3步骤,找到cost最小时,并反推出w和b
- w = w - learning_rate * dw w大小 (12288,1)
- b = b - learning_rate * db
4.数据预测
根据推出的w和b,利用算法:
- Z = np.dot(W.T,X) + b
- A = 1 / (1 + np.exp(-Z))
A是激活函数,作用是是值映射在0-1之间,通过比较A的大小来判断预测结果是否正确。
总结
选择一个正确的学习步进/学习率很重要。选错了,那么神经网络可能会永远找不到损失函数的最小值处,神经网络预测得永远不会很准。