2022年秋季学期人工神经网络第二次作业
Posted 卓晴
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了2022年秋季学期人工神经网络第二次作业相关的知识,希望对你有一定的参考价值。
◎ 说明: 完成作业可以使用你所熟悉的编程语言和平台,比如 C,C++、MATLAB、Python等。 作业要求链接: : https://zhuoqing.blog.csdn.net/article/details/127356631
01 分类问题
1.1 BP算法网络学习公式
下面是分层前馈网络的示意图,分层前馈网络的随机梯度下降算法(BP算法)中,第 n n n 层的权系数 w i j n w_ij^n wijn 的调整公式可以表述为:
Δ w i j n = η ( ∑ k = 1 m n δ k n + 1 w j k n + 1 ) y ′ n ⋅ y i n − 1 \\Delta w_ij^n = \\eta \\left( \\sum\\limits_k = 1^m_n \\delta _k^n + 1 w_jk^n + 1 \\right)y'^n \\cdot y_i^n - 1 Δwijn=η(k=1∑mnδkn+1wjkn+1)y′n⋅yin−1
▲ 图1.1.1 具有h+1层的BP网络结构示意图
1.1.1 作业基本要求
请写出如下图结构1网络结构算法中,每个神经元权系数的更新公式。神经元传递函数可以选择:sigmoid 或者 tanh (双曲正切),同学们自行选择。
▲ 图1.1.2 两种神经网络结构
1.1.2 作业选做要求
(1)请写出 结构2 网络中每个权系数的更新公式;
(2)编写程序实现上述两种神经网络结构,求解 XOR 问题。
1.2 三类分类问题
1.2.1 分类问题
设计一个神经网络(BP,RBF,ELM,SVM) 对于下图中平面坐标系中三类样本进行分类。每一类样本个数都是三个,它们的坐标 ( x 1 , x 2 ) \\left( x_1 ,x_2 \\right) (x1,x2) 在 [ 0 , 1 ] \\left[ 0,1 \\right] [0,1] 之间的五个离散值分布。
▲ 图1.1.1 三类样本处在坐标系中的位置
下面表格给出了三类样本五组随机分布的位置。可以任意选择一组分布作为训练样本训练网络。
【表1-1 五组三类分类坐标位置】
类别 | 位置1 | 位置2 | 位置3 |
---|---|---|---|
类别1 | (0.75;1.0) | (0.5;0.75) | (0.25;0.0) |
类别2 | (0.5;0.0) | (0.0;0.0) | (1.0;0.75) |
类别3 | (1.0;1.0) | (0.5;0.25) | (0.75;0.5) |
类别1 | (1.0;0.75) | (1.0;0.5) | (0.25;0.5) |
类别2 | (0.0;0.0) | (0.0;0.75) | (0.75;0.0) |
类别3 | (1.0;1.0) | (0.75;1.0) | (0.25;0.25) |
类别1 | (0.25;0.5) | (0.0;0.25) | (0.75;0.0) |
类别2 | (0.0;0.0) | (0.75;0.5) | (1.0;0.5) |
类别3 | (0.75;0.75) | (1.0;0.25) | (0.0;0.75) |
类别1 | (0.0;0.0) | (0.25;0.5) | (0.75;0.0) |
类别2 | (0.75;0.5) | (0.25;0.25) | (0.5;0.25) |
类别3 | (1.0;0.25) | (1.0;1.0) | (0.5;0.75) |
类别1 | (0.75;0.5) | (0.0;0.5) | (0.5;0.75) |
类别2 | (0.0;0.75) | (1.0;0.5) | (0.75;1.0) |
类别3 | (0.0;0.0) | (0.75;0.0) | (0.75;0.75) |
1.2.2 作业基本要求
(1)使用单隐层BP网络进行分类
- 绘制出网络结构,并给出算法流程描述;
- 讨论不同隐层节点个数对于分类结果影响,并给出解决 该分类问题最少隐层节点个数;
- 对每个样本增加噪声,讨论所训练网络的泛化能力。对样本增加噪声就是在两个坐标 ( x 1 , x 2 ) \\left( x_1 ,x_2 \\right) (x1,x2) 上增加随机数,如下所示;
( x 1 + δ 1 , x 2 + δ 2 ) , δ 1 , δ 2 ∈ r a n d ( − 0.25 , 0.25 ) \\left( x_1 + \\delta _1 ,x_2 + \\delta _2 \\right),\\,\\,\\,\\,\\delta _1 ,\\delta _2 \\in rand\\left( - 0.25,0.25 \\right) (x1+δ1,x2+δ2),δ1,δ2∈rand(−0.25,0.25)
- 在网络训练过程中,请注意样本坐标进行归一化处理,即将坐标 x 1 , x 2 x_1 ,x_2 x1,x2 经过变换,使其数值分布在 ( − 1 , 1 ) \\left( - 1,1 \\right) (−1,1) 的对称范围内,对比网络训练效果;
(2)使用RBF网络进行分类
- 使用正规化RBF网络求解,给出网络参数与仿真结果;
- 使用广义RBF网络求解,并讨论最少隐层节点个数;
1.2.3 作业选做要求
(1)构建ELM,SVM进行分类
使用 ELM,SVM 算法完成三类问题的分类。对比四种网络在增加有噪声样本上的泛化性能。
(2)训练数据扩充
选择一种网络(BF,RBF,ELM,SVM),对比以下两种数据训练后的网络泛化性能:
(1)仅仅使用没有增加噪声的九个样本进行训练;
(2)对样本增加随机噪声,扩充到 180 个样本进行训练。扩充后的样本个数可以自己定义;
1.3 MNist分类(选做)
这个题目是选做内容。
1.3.1 设计要求
设计一个BP网络完成MNIST手写体识别。也可以在网络上自行搜索下载。
▲ 图1.2.1 MNIST 数据集合示例
1.3.2 作业基本要求
(1) 人工提取特征:参照课件上[3-4-4]“手写体识别”中介绍的方法,利用数字的边缘方向图与灰度图的降采样作为特征,使用小的神经网络进行训练。训练样本选择5000,测试样本选择2000。
(2)直接图片输入:直接构造784个节点输入,10个节点输出,自行选择中间隐层数量和节点个数,使用50000数据进行训练,10000个测试样本测试。
(3) 对比和讨论人工提取特征与直接图片输入两种方法的优缺点。
02 回归问题
2.1 Peaks函数逼近
2.1.1 设计要求
使用神经网络逼近 MATLAB中 的 peaks 二维函数。 下面是 peaks 函数的数学表达式。
下面是 Peaks 函数的图像以及对应的网络样本采样点的分布。
▲ 图2.1.1 Peaks 函数的图像(左)以及训练样本采样点(右)
2.1.2 作业基本要求
分别设计 BF,RBF 网络完成对 Peaks 函数的逼近。
(1) 样本数据采样区域在区域内[-4,4]×[-4,4]随机采样。 样本采样的个数自行确定。
(2) 分别使用BP网络,RBF网络实现上述函数逼近;
(3) 在BP网络中,讨论训练样本个数与训练样本采样的分布对函数逼近效果的影响。讨论参见课件【3-4-2:函数逼近问题的讨论】。
▲ 图2.1.2 训练样本采集是否集中在函数变化剧烈的区域
(4)在RBF网络中,讨论隐层神经元尺度参数对于函数逼近的影响。
▲ 图2.1.3 随着训练次数增加对应的函数逼近曲面
2.1.3 作业选做要求
(1) 在BP网络中,请对比中间隐层传递函数在使用一下两种函数时对于结果的影响:
▲ 图2.1.3 两种不同的神经元传递函数
- 参考答案: 2020人工神经网络第一次作业-参考答案第五部分
03 数据压缩
3.1 ASCII字母压缩
3.1.1 设计要求
使用神经网络对于下面 26 个字母进行压缩。
▲ 图3.1.1 字符点阵信息与压缩网络
3.1.2 作业基本要求
(1) 26个字母的数据文件可以从数据文件ascii8×16.txt文件中获取。其中每一行代表一个字母的数据。字母数据为8×16点阵。也可以直接在作业要求网页上,拷贝如下代码段的字符,与 ascii8×16文件中的数据是一样的。
00000000000000000000000000010000000100000001100000101000001010000010010000111100010001000100001001000010111001110000000000000000
00000000000000000000000011111000010001000100010001000100011110000100010001000010010000100100001001000100111110000000000000000000
00000000000000000000000000111110010000100100001010000000100000001000000010000000100000000100001001000100001110000000000000000000
00000000000000000000000011111000010001000100001001000010010000100100001001000010010000100100001001000100111110000000000000000000
00000000000000000000000011111100010000100100100001001000011110000100100001001000010000000100001001000010111111000000000000000000
00000000000000000000000011111100010000100100100001001000011110000100100001001000010000000100000001000000111000000000000000000000
00000000000000000000000000111100010001000100010010000000100000001000000010001110100001000100010001000100001110000000000000000000
00000000000000000000000011100111010000100100001001000010010000100111111001000010010000100100001001000010111001110000000000000000
00000000000000000000000001111100000100000001000000010000000100000001000000010000000100000001000000010000011111000000000000000000
00000000000000000000000000111110000010000000100000001000000010000000100000001000000010000000100000001000000010001000100011110000
00000000000000000000000011101110010001000100100001010000011100000101000001001000010010000100010001000100111011100000000000000000
00000000000000000000000011100000010000000100000001000000010000000100000001000000010000000100000001000010111111100000000000000000
00000000000000000000000011101110011011000110110001101100011011000101010001010100010101000101010001010100110101100000000000000000
00000000000000000000000011000111011000100110001001010010010100100100101001001010010010100100011001000110111000100000000000000000
00000000000000000000000000111000010001001000001010000010100000101000001010000010100000101000001001000100001110000000000000000000
00000000000000000000000011111100010000100100001001000010010000100111110001000000010000000100000001000000111000000000000000000000
00000000000000000000000000111000010001001000001010000010100000101000001010000010101100101100101001001100001110000000011000000000
00000000000000000000000011111100010000100100001001000010011111000100100001001000010001000100010001000010111000110000000000000000
00000000000000000000000000111110010000100100001001000000001000000001100000000100000000100100001001000010011111000000000000000000
00000000000000000000000011111110100100100001000000010000000100000001000000010000000100000001000000010000001110000000000000000000
00000000000000000000000011100111010000100100001001000010010000100100001001000010010000100100001001000010001111000000000000000000
00000000000000000000000011100111010000100100001001000100001001000010010000101000001010000001100000010000000100000000000000000000
00000000000000000000000011010110100100101001001010010010100100101010101010101010011011000100010001000100010001000000000000000000
00000000000000000000000011100111010000100010010000100100000110000001100000011000001001000010010001000010111001110000000000000000
00000000000000000000000011101110010001000100010000101000001010000001000000010000000100000001000000010000001110000000000000000000
00000000000000000000000001111110100001000000010000001000000010000001000000100000001000000100001001000010111111000000000000000000
(2) 讨论网络隐层节点个数与恢复数据误差之间的关系。
(3)给出隐层节点在15个时,26个字母压缩恢复后的数据图像。
3.2 图像压缩(选做)
- 这个题目是选做内容。
3.2.1 设计要求
使用神经网络对于Lena图像进行压缩。对于隐层节点数目在16~256之间选择几个数目,给出图像压缩的效果以及图像压缩MSE。
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 是恢复图像的灰度值。
▲ 图3.2.1 灰白Lena测试图片
注:Lena的灰度图像可以从网络上寻找并下载。也可以选择其它的图像进行实验。
- 参考答案: 2020人工神经网络第一次作业-参考答案第八部分
注:Lena的灰度图像可以从网络上寻找并下载。也可以选择其它的图像进行实验。下面给出了Lena下载链接:
- BMP-GRAY:Lean512 : https://www.cosy.sbg.ac.at/~pmeerw/Watermarking/lena.html
- MATLAB:Lean512.mat(262kb) : https://www.ece.rice.edu/~wakin/images/lena512.mat
※ 附件 ※
4.1 三类问题数据生成
下面的 Python 程序完成三类分类问题中,三类样本随机生成的算法,同时生成不同样本集合对应位置动图。
from headm import *
pointdim = [30, 31, 32, 35, 34, 33, 36, 37, 38]
xyc = XYCoor(2, 3, 7, 8, 1, 1)
plotbox = 41
plotgif = PlotGIF()
xrange = list(arange(5)/4)*4
yrange = [xx for x in zip(*[list(arange(5)/4)]*4) for xx in x]
xyrange = [(x,y) for x,y in zip(xrange, yrange)]
printf('类别 位置1 位置2 位置3')
for i in range(5):
random.shuffle(xyrange)
for j in range(3):
printff('类别%d '%(j+1),
str(xyrange[j*3+0]).replace(' ', '').replace(',', ';') + ' ',
str(xyrange[j*3+1]).replace(' ', '').replace(',', ';') + ' ',
str(xyrange[j*3+2]).replace(' ', '').replace(',', ';') + ' ')
printf('- - - -')
for j in range(len(pointdim)):
xd,yd = xyrange[j]
x,y = xyc.XY2Pos(xd,yd)
tsplocatedop(pointdim[j以上是关于2022年秋季学期人工神经网络第二次作业的主要内容,如果未能解决你的问题,请参考以下文章