异或问题是一类简单的非线性可分问题,通过人工神经网络完成对异或逻辑关系的实现,可以帮助加深对人工神经网络算法的理解。
▲ 异或问题两种表示
▲ 异或问题两种表示图示
可以使用以下两种网络结构求解异或问题,其中结构1是标准的前馈分层网络,结构2是最简化的求解神经网络。
▲ 两种网络结构求解异或问题
(1) 分别写出上述两种网络结构中权系数 w i j w_{ij} wij的学习算法公式: Δ w i j \Delta w_{ij} Δwij。
结构1网络的所有神经元传递函数都是Sigmoid函数,结构2网络中所有神经元的传递函数都是双曲正切函数。
f ( x ) = 1 1 + e − x f\left( x \right) = {1 \over {1 + e^{ - x} }} f(x)=1+e−x1 f ′ ( x ) = f ( x ) [ 1 − f ( x ) ] f'\left( x \right) = f\left( x \right)\left[ {1 - f\left( x \right)} \right] f′(x)=f(x)[1−f(x)]
f ( x ) = 1 − e − x 1 + e − x f(x) = {{1 - e^{ - x} } \over {1 + e^{ - x} }} f(x)=1+e−x1−e−x f ′ ( x ) = 1 2 [ 1 − f 2 ( x ) ] f'(x) = {\textstyle{1 \over 2}}\left[ {1 - f^2 (x)} \right] f′(x)=21[1−f2(x)]
(2) 使用你所熟悉的编程语言,比如C,MATLAB,Python等,实现上述网络的基本学习算法。
(3) 实验对比异或问题两种表示方法(二值、双极性)对于算法训练次数的影响。
(4) 实验对比单个样本学习即每个样本学习过程都对网络系数进行更新,和批次样本学习,即全部四个样本算出的权系数修正值之后统一进行权系数跟新对训练收敛速度的影响。
(5) 使用MATLAB,或者任何其他神经网络平台,比如Tensorflow, Keras,Paddle等实现结构1的算法框架,并讨论隐层节点个数从1逐步增加对训练效果的影响。
设计一个神经网络对于下面图中的3类模式进行分类。期望输出分别使用:
( 1 , − 1 , − 1 ) T , ( − 1 , 1 , − 1 ) T , ( − 1 , − 1 , 1 ) T \left( {1, - 1, - 1} \right)^T ,\left( { - 1,1, - 1} \right)^T ,\left( { - 1, - 1,1} \right)^T (1,−1,−1)T,(−1,1,−1)T,(−1,−1,1)T
来表示。
▲ 三类样本在坐标系中的分布
(1) 使用BP网络对上述问题进行分类,探讨不同的几种不同的隐层数量和隐层节点对于分类结果,训练收敛时间(迭代次数)的影响。讨论解决该分类问题最少隐层节点个数。
(2) 使用RBF网络对该问题进行分类,并探讨隐层节点个数,隐层节点方差对于训练精度的影响。对比BP网络和RBF网络求解该问题最少隐层节点个数。
本问题算法实现可以使用MATLAB,TensorFlow等平台,或者直接使用MATLAB,C,Python编程等。
使用神经网络逼近sin函数:
▲ 逼近sine函数
(1) 构造单层BP网络隐层神经元的传递函数取sigmoid函数,输出节点神经元传递函数取线性函数,对上函数进行逼近。
(2) 通过实验讨论训练样本个数与函数逼近精度之间的关系;通过实验讨论证隐层神经元个数和函数频率ω之间的近似关系。
通过实验讨论BP算法过学习现象:即训练样本集少,而网络结构庞大的情况。
(3) 将隐层节点的传递函数更换成ReLU函数,对比在相同隐层节点下,与传递函数为sigmoid函数的逼近精度。
R e L U ( x ) = max ( 0 , x ) = { x x ≥ 0 0 x < 0 {\mathop{\rm Re}\nolimits} LU\left( x \right) = \max \left( {0,x} \right) = \left\{ \begin{matrix} {x\,\,\,\,x \ge 0}\\{0\,\,\,\,\,x < 0}\\\end{matrix} \right. ReLU(x)=max(0,x)={xx≥00x<0
▲ ReLU传递函数的图像
▲ 不同的神经网络的传递函数
使用神经逼近 Hermit 多项式:
▲ Hermit多项式与它的图像
(1) 采用BP算法设计一个单输入单输出的’多层BP网络对该函数进行逼近。训练样本按照以下方法产生:样本数 P = 100 P = 100 P=100,其中输入样本 x i x_i xi.服从区间[-4,4]内的均匀分布,样本输出为 F ( x i ) + e i F\left( {x_i } \right) + e_i F(xi)+ei, e i e_i ei为添加的噪声,服从均值为0,标准差为0.1的正态分布。隐层采用Sigmoid传递函数,输出层采用线性传递函数: f ( x ) = x f\left( x \right) = x f(x)=x。
(2) 对于上述函数采用RBF网络进行逼近。样本数取32个。在[-4,4]之间均匀分布,同样添加标准差为0.1的正态分布噪声。
注意:在本题中需要考虑对函数的输入输出变量进行归一化预处理,将网络的输入输出值尽可能平移到正负1内。
使用神经网络逼近MATLAB中的peaks二维函数:
▲ MATLAB Peaks 函数
(1) 要求与第一题类似,样本数据采样区域在[-4,4]×[-4,4]。
(2) 请参照课件中对于二维函数使用神经网络进行逼近实例中,对于样本点分布和数量的讨论,论证这些样本采样因素对于网络训练性能的影响。
注意:在本题中需要考虑对函数的输入输出变量进行归一化预处理,将网络的输入输出值尽可能平移到正负1内。
构造如下神经网络对样本进行压缩:
▲ 用于压缩数据的Autoencoder
(1) 通过实验得到每个样本对应的隐层输出;
(2) 通过实验得到每个样本隐层恢复输出值;
构造神经网络压缩下面字符数据:
▲ 样本英文字符
说明:上面数据可以从作业文件:ABCDEFJ.TXT中获得对应的编码数据。
A = [0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 1, 0, 0, 0, 1, 0, 1, 1, 1, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0]
B = [1, 1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 1, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0]
C = [0, 0, 1, 1, 1, 1, 0, 0, 1, 1, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0]
D = [1, 1, 1, 1, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
E = [1, 1, 1, 1, 1, 1, 0, 0, 1, 0, 0, 0, 1, 0, 0, 1, 0, 1, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0]
F = [1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 0, 0, 1, 0, 1, 0, 1, 0, 0, 1, 1, 1, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
G = [0, 0, 1, 1, 1, 1, 0, 0, 1, 1, 1, 1, 1, 0, 1, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0]
H = [1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 0, 1, 1, 0, 0, 1, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 0, 0, 1, 0, 0, 1, 1, 0, 0, 1, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 1, 0, 1, 1, 1, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0]
I = [0, 1, 1, 1, 1, 1, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0]
J = [0, 0, 1, 1, 1, 1, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
(1) 通过实验绘制出在恢复误差在10%的要求下,网络隐层节点个数与训练迭代次数之间的关系。
(2) 写出出隐层节点个数在15的情况下,每个字符所对应的隐层输出数据,和恢复的字符图像。可以借助MATLAB中plotchar函数绘制,也可以自行生成点阵图绘制。
使用神经网络对于Lena图像进行压缩。
▲ Lena灰白图像
注:Lena的灰度图像可以从网络上寻找并下载。也可以选择其它的图像进行实验。
对于隐层节点数目在16~256之间选择几个数目,给出图像压缩的效果以及图像压缩MSE(Mean Squared Error).
M S E = 1 N ⋅ ∑ i = 1 N ( I i o r g − I i r e ) 2 MSE = {1 \over N} \cdot \sum\limits_{i = 1}^N {\left( {I_i^{org} - I_i^{re} } \right)^2 } MSE=N1⋅i=1∑N(Iiorg−Iire)2
其中 I i o r g I_i^{org} Iiorg是原始图像的灰度, I i r e I_i^{re} Iire是回复图像的灰度。
使用BP网络完成下面7个字符,三种字体的识别:
▲ Char7Data数据
字符的数据在作业文件Char7Data.txt中。其中包含有42行字符数据。每两行分别代表字符的点阵数据和对应的类别标签数据。
可以考虑使用在 液晶12864COG 液晶模块串口/并口ST7565R带背3.3v 12864-14显示屏 中的 6×8点阵字符进行设计新的样本集合。
(1) 通过实验对比隐层的个数分别为0,1,2时对应的分类效果。
(2) 通过对实验数据增加5~20%的噪声,讨论网络训练识别的效果。
对于网络学堂中给定的几组实际数据,完成相应的模式识别的任务。数据的内容和格式参见网络学堂中相应的数据说明文档。以下三个任务可以任选一个完成。
在数据库color中,包括实际车辆的车牌图片文件。文件名称最后一个汉字表示该车模的颜色。自行设计对图片的特征提取方案,并设置一个BP网络完成车牌颜色识别。
▲ 车牌颜色样本
在数据库number中,包括实际车辆的车牌字符图片。文件名称最后一个字符表示该字符类别。自行设计对图片的特征提取方案,并设置一个BP网络完成车牌字符识别。
▲ 车牌字符样本
在数据库direction中包含有表示灯图片。文件名称最后三个数字表示了信标灯的方向。通过自行设计图片特征提取方法,并设计BP网络或者RBF网络完成对图像中信标灯方向回归计算。
▲ 信标灯方向定义
▲ 目标数据样本
参照问题描述。