WuEnda Lesson3
Week 2 Homework Numpy and Logistic Regression
Softmax函数
softmax函数是一个对多个类进行分类时使用的标准化函数。
\[\text{for } x \in \mathbb{R}^{1\times n} \text{, } softmax(x) = softmax(\begin{bmatrix}
x_1 &&
x_2 &&
... &&
x_n
\end{bmatrix}) = \begin{bmatrix}
\frac{e^{x_1}}{\sum_{j}e^{x_j}} &&
\frac{e^{x_2}}{\sum_{j}e^{x_j}} &&
... &&
\frac{e^{x_n}}{\sum_{j}e^{x_j}}
\end{bmatrix}
\]
\[softmax(x) = softmax\begin{bmatrix}
x_{11} & x_{12} & x_{13} & \dots & x_{1n} \\
x_{21} & x_{22} & x_{23} & \dots & x_{2n} \\
\vdots & \vdots & \vdots & \ddots & \vdots \\
x_{m1} & x_{m2} & x_{m3} & \dots & x_{mn}
\end{bmatrix} = \begin{bmatrix}
\frac{e^{x_{11}}}{\sum_{j}e^{x_{1j}}} & \frac{e^{x_{12}}}{\sum_{j}e^{x_{1j}}} & \frac{e^{x_{13}}}{\sum_{j}e^{x_{1j}}} & \dots & \frac{e^{x_{1n}}}{\sum_{j}e^{x_{1j}}} \\
\frac{e^{x_{21}}}{\sum_{j}e^{x_{2j}}} & \frac{e^{x_{22}}}{\sum_{j}e^{x_{2j}}} & \frac{e^{x_{23}}}{\sum_{j}e^{x_{2j}}} & \dots & \frac{e^{x_{2n}}}{\sum_{j}e^{x_{2j}}} \\
\vdots & \vdots & \vdots & \ddots & \vdots \\
\frac{e^{x_{m1}}}{\sum_{j}e^{x_{mj}}} & \frac{e^{x_{m2}}}{\sum_{j}e^{x_{mj}}} & \frac{e^{x_{m3}}}{\sum_{j}e^{x_{mj}}} & \dots & \frac{e^{x_{mn}}}{\sum_{j}e^{x_{mj}}}
\end{bmatrix} = \begin{pmatrix}
softmax\text{(first row of x)} \\
softmax\text{(second row of x)} \\
... \\
softmax\text{(last row of x)} \\
\end{pmatrix}
\]
二维矩阵的softmax是逐行分类。
np.dot()
- 如果a,b是两个实数,就是普通相乘。
- 如果a,b两个都是一维数组,结果就是向量的内积。
- 如果a,b都是二维数组,就变成矩阵相乘运算,推荐使用
matmul和@代替。
np中的*运算
- 在numpy.array数组类型中(不能为list),是数量积(点乘)。
- 在numpy.mat矩阵类型中,是叉乘,即矩阵相乘。
a = np.array([[3, 3, 3],[4, 4, 4]])
b = np.array([[5],[5]])
c = np.array([[5,5]])
d = np.mat([[3, 3, 3],[4, 4, 4]])
print(a*b)
print(c*d)
结果:
[[15 15 15]
[20 20 20]]
和
[[35 35 35]]
np.multiply()
无论传入的参数类型是数组、矩阵、list,结果都为它们的数量积,点乘(即矩阵对应元素相乘)。
注意:当维数不同时,具有有广播现象。
np.matmul()
返回两个矩阵的矩阵乘积。
Logistic Regression 用于分类cat/non-cat图片
Jupyter Notebook 中不要编写自操作代码, 防止重复运行导致数据错误!!!
- 导入包numpy,h5py,matplotlib,scipy,加载数据集。
- 数据集预处理:对图像的[m, width, height, 3]三维矩阵做vertorization得到[width*height*3, m],每列代表一张图片数据。对图片的RGB值(0~255)做标准化:\(train\_set\_x = train\_set\_x\_flatten/255\)
- 构建算法的模型,编写参数初始化initialize函数
- 编写前向传播、后向传播propagation函数,编写优化optimize函数
- 编写预测predict函数
- 整合以上内容到一个model()中
通过分析随着梯度下降的迭代次数,成本的下降情况,以及模型对训练集和测试集的预测准确率来判断模型的拟合程度。
学习率的选择
太大会导致cost波动,甚至发散。
太小会导致迭代的效率降低,尤其是遇到驻点的情况。
Week 3 Neural Network
Neural Network Overview

Logistic Regression可以看作是一个一层的神经网络,而如上图的一个两层的神经网络可以表示如下:
graph LR
A["z[1] = W[1]x + b[1]"] --> B["a[1] = sigmoid(z[1])"]
B --> C["z[2] = W[2]a[1] + b[2]"]
C --> D["a[2] = sigmoid(z[2])"]
D --> E["L(a[2], y)"]
计算神经网络的层数的时候,不把input layer计算在内。
Neural Network Representation
- Input layer
- Hidden layer
- Output layer
\(a^{[0]} = X\) ,\(a^{[i]}\)(activation) 表示不同层传递给下一层的input。
Computing a Neural Network's Output (single example)
神经网络图中的一个Node代表了两个步骤:
- 带w和b的线性函数
- 激活函数
对一个Node的计算:
\[z^{[l]}_i = {w^{[l]}_i}^Tx + b^{[l]}_i
\]
\[a^{[l]}_i = \sigma(z^{[l]}_i)
\]
\(l\) 表示Node所在的layer层数,\(i\) 表示Node是所在层的第几个节点。
将第1层的所有\(w^{[1]}_i\)和\(b^{[1]}_i\)纵向叠在一起,得到 \(W^{[1]}(4\times3)\) 和 \(b^{[1]}(4\times1)\)。
如果将第1层的步骤1结果也叠起来得到\(z^{[1]}\), 有:
\[W^{[1]}x + b^{[1]} =
\begin{bmatrix}
--w^{[1]}_1-- \\
--w^{[1]}_2-- \\
--w^{[1]}_3-- \\
--w^{[1]}_4-- \\
\end{bmatrix}
\begin{bmatrix}
x_1 \\
x_2 \\
x_3 \\
\end{bmatrix}
+
\begin{bmatrix}
b^{[1]}_1 \\
b^{[1]}_2 \\
b^{[1]}_3 \\
b^{[1]}_4 \\
\end{bmatrix}
=
\begin{bmatrix}
{w^{[1]}_1}^Tx + b^{[1]}_1 \\
{w^{[1]}_2}^Tx + b^{[1]}_2\\
{w^{[1]}_3}^Tx + b^{[1]}_3\\
{w^{[1]}_4}^Tx + b^{[1]}_4\\
\end{bmatrix}
= z^{[1]}
\]
同理得到\(a^{[1]}\):
\[a^{[1]} =
\begin{bmatrix}
{a^{[1]}_1}\\
{a^{[1]}_2}\\
{a^{[1]}_3}\\
{a^{[1]}_4}\\
\end{bmatrix}
=
\sigma(
\begin{bmatrix}
{z^{[1]}_1}\\
{z^{[1]}_2}\\
{z^{[1]}_3}\\
{z^{[1]}_4}\\
\end{bmatrix})
=
\sigma(z^{[1]})
\]

浙公网安备 33010602011771号