数据预处理:
数据为H5文件,保存训练集有209张64x64的图像,训练集的图像对应的分类值(【0 | 1】,0表示不是猫,1表示是猫)
测试集里面的图像数据(本训练集有50张64x64的图像),测试集的图像对应的分类值(【0 | 1】,0表示不是猫,1表示是猫)
训练集_图片的维数 : (209, 64, 64, 3),每个像素点由(R,G,B)三原色构成的,所以要乘以3
训练集_标签的维数 : (1, 209)
测试集_图片的维数: (50, 64, 64, 3)
测试集_标签的维数: (1, 50)
预处理将训练和测试数据压缩为一个平坦的图像方便处理
训练集降维最后的维度: (12288, 209)
训练集_标签的维数 : (1, 209)
测试集降维之后的维度: (12288, 50)
测试集_标签的维数 : (1, 50)
逻辑回归公式介绍
识别猫项目本质上为逻辑回归,只不过通过神经网络来实现,公式为
python代码激活函数为,此项目中,训练集X维度为(12288, 209)209个样本,w为(12288,1),为(1,12288),b维度为(1, 209),但在python中可以为一个实数,python会自动转换为(1, 209)--python广播。计算完A的维度为(1,209)
A = sigmoid(np.dot(w.T, X) + b)
所有训练样例求和来计算成本,为什么L损失函数是,而不是,因为后面这个函数是非凸函数,可能找不到全局最优值
python代码为:
J = (- 1 / m) * np.sum(Y * np.log(A) + (1 - Y) * (np.log(1 - A)))
逻辑回归的反向传播,关于w和b的偏导数,全局成本函数J是1到m损失函数求和的平均,所以J对w和b的求导也同样是各项损失函数对w和b导数的平均,单个样本dz求导是(a-y),dw求导是x(a-y),db求导是(a-y),所以m个样本的公式为:
python代码为:
dw = (1 / m) * np.dot(X, (A - Y).T)
db = (1 / m) * np.sum(A - Y)
梯度下降
通过最小化成本函数 J来学习 w和b 。对于参数 θ ,更新规则是,其中 α 是学习率
构建网络步骤
建立神经网络的主要步骤是:
1. 定义模型结构(例如输入特征的数量)
2. 初始化模型的参数
3. 循环:
3.1 计算当前损失(正向传播)
3.2 计算当前梯度(反向传播)
3.3 更新参数(梯度下降)