欢迎分享本文,转载请保留出处
点击关注,获取最新AI干货
本周,我们学习计算机网络编程的基础知识。当你要构建一个神经网络时,有些技巧是相当重要的。
例如,m个样本的训练集,你可能会习惯性地去用一个for循环,来遍历这m个样本。但事实上,实现一个神经网络,如果你要遍历真个训练集,并不需要直接使用for循环。
另外,神经网络的计算过程中,通常有一个正向过程,或者叫正向传播步骤。接着会有一个反向步骤,也叫做反向传播步骤。
为什么神经网络的计算过程可以分为前向传播和反向传播,两个分开的过程呢?。
周课程中,我会用logistic回归来阐述,以便于你能更好地理解。
如果你之前学过logistic回归。我也认为,这周的学习材料,也会带给你一些新的、有意思的想法。
下面开始吧!
一、logistic回归是一个用于二分分类的算法。
我们从一个二分分类问题的例子开始。例如,你有一张图片作为输入,如图所示。你想输出识别此图的标签。如果是猫,输出1.如果不是,则输出0。我们用y;来表示输出的结果标签。
来看看一张图片,在计算机中是如何表示的。
计算机保存一张图片,要保存三个独立矩阵。分别对应图片中的红、绿、蓝三个颜色通道。如果输入图片是64×64像素的,就有三个64×64的矩阵,分别对应图片中红、绿、蓝三种像素的宽度。
为了方便表示,这里我用三个小矩阵。它们是5×4,并不是64×64的。要把这些像素亮度值,放进一个特征向量中,就要把这些像素值都提出来,放入一个特征向量x。
为了把这些像素值取出放入特征向量,就要像下面这样定义一个特征向量x,以表示这张图片。我们把所有的像素值都取出来。例如255、231等等,直至列完所有的红色像素。接着是255、134、255、134等等,最后得到一个很长的特征向量,把图像中所有的红、绿、蓝像素强度值都列出来。
如果图片是64×64的话,那么向量x的总维度就是64×64×3。因为这里三个矩阵的元素数量,对于这个例子,数字是12288,把它们乘起来,这就是结果。
我们用nx=12288,来表示输入的特征向量x的维度。有时为了简洁,我会直接用小写的n,来表示输入的特征向量的维度。
在二分分类问题中,目标是训练出一个分类器,它以图片的特征向量x作为输入,预测输出的结果标签y是1还是0。也就是预测图片中是否有猫。
二、使用到的符号
现在,我们看看在后面课程中,需要用到的一些符号。
用一对(x,y)来表示一个单独的样本,x时nx维的特征向量。标签y值为0或1。训练集由m个训练样本构成(x^(1),y^(1))表示样本一的输入和输出,(x^(2),y^(2))表示样本二的输入和输出,(x^(m),y^(m))表示最后一个样本m的输入和输出。这些一起就表示整个训练集。
用小写的字母m来训练样本的个数。有时候为了强调,这是训练样本的个数。可以写作m=m_train。
当说到训练集时,我们会用m,下标test,来表示测试集的样本数。所以,这是训练集的样本数。
最后,用更紧凑的符号来表示训练集。我们定义一个矩阵,用大写的X表示。它有训练集中的x1、x2这些组成。像这样写成矩阵的列。
现在我们把x^(1)放进矩阵的第一列,x^(2)是第二列......x^m是第m列,最后得到矩阵x。这个矩阵有m列。m是训练集的样本数。这个矩阵的高度记为nx。
要注意的是,有时候矩阵x的定义。训练样本作为行向量堆叠,而不是这样列向量堆叠。x^(1)转置......x^(m)转置。
构建神经网络时,用左边这个约定形式。会让构建过程简单很多。
现在回顾一下,X是一个nx×m矩阵。当你用Python实现的时候。你会看到X.shape,这是一条Python命令,用来输出矩阵的维度,即(nx,m),表示X是一个nx×m矩阵。这就是如何将训练样本,即输入x用矩阵表示。
那输出标签y呢?同样,为了方便,构建一个神经网络,将y标签也放到列中。我们定义Y=【y^(1)y^(2)……,y^(m)】。如果这里Y是一个1×m的矩阵。
同样地,在Python里,Y.shape=(1,m),表示这是一个1×m矩阵。
在后续的课程,以及在实现神经网络时,你会发现,好的惯例符号能将不同训练样本的数据联系起来。这里说的数据,不仅有x和y,还会有之后其他的量,将不同的训练样本数据取出来放到不同的列上,就像刚刚我们处理x和y那样。
这门课中,在logistic回归和神经网络,要用到的符号就是这些了。如果你忘了这些符号的意义,比如什么是m,什么是n,或者其他,我们会在课程网站上,放上符号说明,这样你就可以快速地查阅,每个符号的意义。
【下期预告】
下一个课程,我们以logistic回归作为开始。
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/dujiahaogod