• 建立一个学习算法的基本结构，它包括：
• 初始化参数
• 计算成本函数（cost function）以及它的梯度
• 将上面提到的三个函数放入我们的主函数 model 中

### 1、需要用到的包

• Python 3.7
• h5py 2.9
• numpy 1.17
• matplotlib 3.1

### 2、问题描述以及数据处理

• 训练集$（m_{train}）$图片已经做好了标记，0 代表图片不是猫，1 代表图片是猫
• 测试集$（m_{test}）$图片同样做了标记
• 每张图片的大小是 $(num_{px}, num_{px}, 3)$，3 代表的是 RGB 颜色通道。因此每张图片是一个 $num_{px} * num_{px}$ 大小的矩形

train_set_xtest_set_x 用数组储存了图片，具体可以通过下面例子展示: • $m_{train}$（训练集的数量）
• $m_{test}$（测试集的数量）
• $num_{px}$（图片的宽高）

### 3、学习算法的一般结构 $$z^{(i)} = w^Tx^{(i)}+b\ \hat{y}^{(i)} = a^{(i)} = sigmoid(z^{(i)})\ \mathcal{L(a^{(i)}, y^{(i)})} = -y^{(i)}log(a^{(i)})-(1-y^{(i)})log(1-a^{(i)})$$

$$J = \frac{1}{m}\sum_{i=1}^{m}\mathcal{L(a^{(i)}, y^{(i)})}$$

• 初始化模型参数
• 通过最小化成本函数去学习模型参数
• 使用学习到的参数去做预测
• 分析以及总结

### 4、实现算法的每一部分

• 定义模型的结构

• 初始化模型参数

• 循环:

• 计算当前成本函数（前向传播）
• 计算当前梯度（反向传播）
• 更新参数（梯度下降）

sigmoid 函数

#### 4.3 前向传播和反向传播

$$\frac{\partial{J}}{\partial{w}} = \frac{1}{m}X(A-Y)^T\ \frac{\partial{J}}{\partial{b}} = \frac{1}{m}\sum_{i=1}^m(a^{(i)}-y^{(i)})$$

#### 4.4 优化

• 计算$\hat{y}=A=\sigma{(w^TX+b)}$
• 将激活函数计算的值转换为 0（ <= 0.5）或 1（ > 0.5），并储存在 Y_prediction

### 5、将上面的函数放入 model 中 ### 6、进一步分析 • 选择更好地降低成本函数的学习率。
• 如果您的模型发生过拟合，请使用其他技术来减少过拟合。

### 7、使用自己的图片测试  