机器学习
感知器实现
先用表格来表示与门、或门、与非门的真值表,然后代码实现三种逻辑门
P23,2.2.1 真值表
P27,2.2.3
异或门真值表与代码实现:基于两层感知器结构,用代码验证其可行性
P28,2.4.1
P33,2.5.2
激活函数实现
数学表达式(sigmoid、relu与softmax)
P42,3.2
使用Matplotlib绘制函数图像(可视化)
P42,3.2
3.代码实现(5分)
P42,3.2
计算图实现
先在PPT中绘制图形,然后依据计算图写代码:
基础运算层(加、减、乘、除)正向/反向传播(5分)
P130,5.3(计算图)
P135,5.4(代码)
激活函数层实现(5分)
P139,5.5.1(relu)
P141,5.5.2(Sigmoid)
3.全连接层实现(5分) p144,5.6.2
4.Softmax-with-loss层(10分)
P150,5.6.3(Softmax-with-loss的计算图和代码)
P91,4.2.4(cross_entropy_error的代码)
手写数字识别系统设计
网络结构设计(结构图形与训练参数,如64-64-10)
P62,图3-20
损失函数实现(用到的激活函数)
cross_entropy_error
数值微分训练神经网络(基于数值微分的手写数字识别)
P110,4.5.1(实现类)
P114,4.5.2(训练代码,从#超参数开始复制)
导入训练集代码:
from sklearn.datasets import load_digits
from sklearn.model_selection import train_test_split
导入数据
mydata = load_digits() x = mydata.data y = mydata.target
将数据集分为训练和测试两类
x_train,x_test,y_train,y_test = train_test_split(x,y,test_size=0.3)
误差反向训练神经网络(基于误差反向的手写数字识别)
P156,(复制TwoLayerNet类)
需要把t_onehot添加到cross_entropy_error中,改变t的维度
def t_onehot(y,t):
t_one_hot = np.zeros_like(y)
for i in range(t_one_hot.shape[0]):
for j in range(t_one_hot.shape[1]):
if t[i] == j:
t_one_hot[i][j] = 1
return t_one_hotP160训练代码
5.准确率统计
Accuracy(TwoLayerNet类中实现)
卷积神经网络
输出尺寸计算公式推导:输入特征大小(H,W),卷积核大小(FH,FW),输出大小为(OH,OW),填充为P,步幅为S,计算OH和OW(数学公式)
P208
2.基于LeNet的手写数字识别系统设计
(1)分析LeNet网络结构,包括两个卷积层、两个池化层和三个全连接层
(1)第一层:卷积层
这一层的输入就是原始的图像像素,LeNet-5模型接受的输入层大小为32*32*1。第一个卷积层过滤器的尺寸为5*5,深度为6,不使用全0填充,步长为1。因为没有使用全0填充,所以这一层的输出的尺寸为32-5+1=28,深度为6。这一个卷积层总共有 5*5*1*6+6=156个参数,其中6个为偏置项参数。
(2)第二层:池化层
这一层的输入为第一层的输出,是一个28x28x6的节点矩阵。本层采用的过滤器大小为2x2,长和宽的步长均为2,所以本层的输出矩阵的大小为14*14*6。
(3)第三层:卷积层
本层的输入矩阵大小为14*14*6,使用的过滤器大小为5*5,深度为16。本层不使用全0填充,步长为1。本层的输出矩阵大小为10*10*16。。
(4)第四层:池化层
本层的输入矩阵大小为10*10*16,采用的过滤器大小为2x2,步长为2。本层的输出矩阵大小为5*5*16。
(5)第五层:全连接层
本层的输入矩阵大小为5x5x16,本层的输出节点个数为120
(6)第六层:全连接层
本层的输入节点个数为120个,输出节点个数为84个。
(7)第七层:全连接层
本层的输入节点个数为84个,输出节点个数为10个。
(2)手写数字识别代码实现