目录
本节课内容
使用python和numpy自行实现前向传播神经网络,从而理解TensorFlow的原理。
构建数据集
只有一个训练样本,两个特征。它是python中的一维数组,而不是矩阵,因此用一个中括号表示。
代码中表示不同层参数的符号
实现前向传播神经网络
1.实现第一层的计算
-
计算第一个神经元激活值:设置w,b,通过w,b计算z。通过z计算激活函数的激活值a。
-
计算第二个神经元激活值
-
计算第三个神经元激活值
- 存储每个神经元的激活值:将每个神经元的激活值存入一个数组,这个数组就是第一层的激活向量a1。
2.实现第二层的计算
接收第一层的激活项a1,然后输出a2_1,这就算实现了两个层的前向传播。
实现前向传播神经网络(简化过程)
1.构建dense函数
-
功能:输入前一层激活,给定当前层数对应的w,b并设置激活函数,输出下一层的激活。
-
W参数:矩阵,需要我们设置,表示当前层不同神经元的参数,W的列数对应神经元数量。W大写,因为是矩阵,小写w表示向量和标量。
-
b参数:一个一维数组数组。
-
a_in:层输入的内容,可以是输入层的x,可以是前一层的激活值。
2.构建sequential函数
给定一个x,x表示输入层的内容,如果有4个层,则调用4次dense,并写好顺序,就等于将4个层串联在一起,实现了前向传播。而无需像开始的计算过程,w,b,z,g都要一个一个编写。
实验
1.实现Dense
- a_in:输入样本,示例使用一维数组。
- W:权重矩阵,每个单元n个特征,j个单元。
- b:偏置向量,j个单元
- g:激活函数,例如sigmoid,relu
- 返回值:a_out,j个单元。
利用 for 循环访问层中的每个单元( j ),并对该单元的权重进行点积( W[:,j] ),然后将该单元的偏置相加( b[j] )以形成 z 。然后可以对该结果应用激活函数 g(z)。最终的a_out是一维数组,元素值就是每个神经元的激活值。
2.实现Sequential
使用上面的my_dense函数,编写创建前向传播神经网络模型的方法,并构建两层神经网络。a1,a2是每一层的激活值。
3.设置模型的权重和偏置
直接选择从上一个实验训练好的权重和偏置。
4.开始预测
4.1编写预测函数
- 参数:X表示接受预测的矩阵,W1b1是第一层的权重偏置,W2b2是第二层的权重偏置。
- 过程“”首先获取输入数据的样本数 m,然后创建一个全零矩阵 p 用于存储预测结果。接下来,通过一个循环遍历输入数据的每个样本,对每个样本调用 my_sequential 函数进行预测,并将预测结果存储在 p 中相应的位置。最后,返回预测结果矩阵 p
4.2使用预测函数
和上一个实验的预测过程一致,一个训练样本,神经网络预测出一个数,多个训练样本,神经网络会输出多个训练样本计算的激活值。
5.检验神经网络的预测
过程和上个实验一致,使用原始数据集检测神经的预测,左图阴影表示神经网络对于预测出好咖啡额的样本敏感,右图表示激活值高于0.5的样本,预测结果为好咖啡。