本周将会学习神经网络编程的基础知识
二分分类
当你要构建一个神经网络,有些技巧是相当重要的。例如,m个样本的训练集,你可能会习惯性的用一个for循环来遍历这m个样本,事实上你要实现神经网络,如果你要遍历整个训练集,并不需要直接使用for循环。本周课程你将会学到实现的方法。在神经网络的计算过程中,通常有一个正向过程,或者叫正向传播步骤,接着会有一个反向步骤,也叫反向传播步骤。
为什么神经网络的传播可以分为前向传播和反向传播两个分开的过程呢?本周课程中,将会使用logistic回归来阐述以便于你能更好的理解,哪怕之前学过,这周的内容也会让你有新收获。
logistic回归是一个二分分类的算法,从一个例子开始,识别一张图片中动物是否是猫咪?
图片作为输入,输出识别此图的标签,y表示输出结果标签。
首先来看一张图片在计算机中是如何表示的?
计算机保存一张图片,要保存三个独立矩阵,分别对应RGB3个颜色通道,如果输入图片是6464像素的,就有三个6464的矩阵,分别对应图中的红绿蓝三种像素的亮度,为了方便,使用54的表示,把这些像素的亮度(像素)值放在一个特征向量x中。拿出来之后像是下面这样,形成了一个很长的特征向量,如果图片是6464的,那么特征向量x总维度就是64643,因为这是三个矩阵的元素数量,对于这个例子数字是12288。
我们用nx表示输入的特征向量的维度,nx=12288,有时候为了简洁会直接用小写的n来表示输入向量的维度。
在2分类问题中,目标是训练出一个分类器,它已图片的特征向量x作为输入,预测输出的结果标签y是1还是0,也就是预测图片中是否有猫,接下来学一些符号:
- (x,y)表示一个单独的样本,x是nx维的特征向量,标签y值为0或者1.
- 训练集由m个训练样本构成。
- x^(1) 和y ^(1) 表示样本1的输入和输出。
- x^(2) 和y ^(2) 表示样本2的输入和输出。
- x^(m) 和y ^(m) 表示最后一个样本m的输入和输出。 这些一起就表示整个训练集。
- 用小写字母m表示训练样本的个数,有时候为了强调这是训练样本的个数,可以写作m=m_train.
- 当说到测试集的时候,下标是test,M_test,表示测试集的样本数。
- 最后用最紧凑的符号表示训练集,我们定义一个矩阵,用大写的X表示。它由训练集中的x1,x2表示。每一个样本代表一列。这个矩阵有m列,矩阵的高度是nx(也就是特征向量的维度)。训练样本作为行向量堆叠,而不是列向量堆叠。所以需要将他们转置一下。
转置之后如下:
构建神经网络时,用左边这个约定形式,会让构建过程简单的多。回顾一下,X是一个 nx * m的矩阵。
当你用python实现的时候,你会看到X.shape,这是一条python指令,用来输出矩阵的维度,即(nx,m)。
这就是如何将训练样本,即输入x用矩阵表示。