学习目标:
神经网络
目的:仿照人类大脑神经元工作方式,对模型进行训练(虽然一直没有实现)
我们按照该目的构造神经网络,首先要明确我们输入的是什么,以及期望的输出是什么。
以图像识别为例:
目标是给定一张照片,能够识别出该照片数据什么类别
因此,在训练过程中,我们将图片作为特征输入,其类别作为标签,进行训练学习
1.一张图片如何表示输入特征呢?
将图片进行分割,分割为 n*n矩阵的形式,每个点都表示其中的像素值(0-255),之后将 其拉长为向量的形式进行计算。此时输入特征为一个向量的形式,其值在(0-255)之间
2.开始进行计算,因为输入特征共有n*n个数值,我们认为他有n*n个特征。在计算时,我们 使用多个神经元进行计算,神经元的数量是认为进行定义的。如果想要模型更复杂,可以 使用多个神经元进行计算。
3.得到输出值,对于每一个经过计算的值来说,都可能成为下一次计算的输入值。所以会使 用sigmoid函数进行规范。得出图像类别
以图像分类为例子,我们可以得到,一个神经网络往往分为输入层、隐藏层、输出层。隐藏层就类似黑盒子一般,我们只需要考虑其输入输出。我们所需要进行的计算都在隐藏层之中,一个复杂的神经网络中含有多个隐藏层。从隐藏层到输出层,类将隐藏层作为特征,输出层作为标签,形成逻辑回归。所以神经网络时逻辑回归的一个版本,可以自己学习特征,容易做出准确预测。类似特征工程,神经网络自己能进行计算隐藏层使用的特征。明白自己需要多少个隐藏层,每个隐藏层需要多少个神经元。
因此神经网络的工作流程(前向传播):输入层->隐藏层->输出层
我们了解其工作流程,重要的是对于隐藏层来说如何进行计算?
隐藏层组的计算是以层作为基本单位进行的,每个神经网络的隐藏层组可能含有多个不同的子层共组成,每个隐藏层又可能含有多个神经元。对于神经网络的计算,我们要深入到隐藏层组,再到每一个隐藏层,然后是每一层中的每个神经元。
每个神经元都有两个 参数,帮助我们计算出其这一层的计算值,因此在每一层中,有多少个神经元,就对应的存在多少个。而对于每一个来说,其向量中值的个数等于输入过来的特征的个数。在每一个神经元中,都会经过 ,因此有多少个神经元最后的结果会有多少个 a值,我们将这一层的a值存放到一个向量中,就是我们这一层的输出函数。其公式整理如下:
下角标j表示为该隐藏层的第j个神经元
上标l表示那一层隐藏层
g()表示sigmoid函数
因此可以看出,每一层神经元的计算,都依托于前一层的输出(输入特征可以视为第0层隐藏层的输出)因此。所有层(包括输入层、输出层)都满足该公式。
六步法搭建神经网络:
1.import
2.train、test
3.model = tf.keras.models.Sequential
4.model.compile(optimizer = "优化器",loss = "损失函数", metrics = [“准确率”])
5.model.fit()
6.model.summary