如下是 2020年人工神经网络第二次作业 中第五题的参考答案。

01 第五题参考答案


1.题目分析

(1) 数据产生

100个样本随机均匀分布在三角形区域内,训练样本{xi,yi}\left\{ {x_i ,y_i } \right\}{xi​,yi​}满足:
xi∈(0,1),yi<3(0.5−∣x−0.5∣)x_i \in \left( {0,1} \right),\,\,y_i < \sqrt 3 \left( {0.5 - \left| {x - 0.5} \right|} \right)xi​∈(0,1),yi​<3​(0.5−∣x−0.5∣)

下面使用 作业中的程序中python子程序:generate_data_triangle()产生100随机分布的数据点:

▲ 100个数据点

(2) 网络结构

自组织特征映射(SOFM)网络有15个竞争层的神经元,它们具有一维的拓扑结构。

▲ 一位拓扑结构的SOFM网络结构

竞争层的神经元参数{wi1,wi2}i=1,2,⋯15\left\{ {w_{i1} ,w_{i2} } \right\}_{i = 1,2, \cdots 15}{wi1​,wi2​}i=1,2,⋯15​初始化为区域(0,1)×(0,3/2)\left( {0,1} \right) \times \left( {0,\sqrt 3 /2} \right)(0,1)×(0,3​/2)中的随机数。

初始化之后,竞争层的神经元所处的位置:

▲ 网络初始化竞争神经元所处的位置

2.求解过程

求解过程中相关程序参见后面附录中 作业中的程序

(1) 训练参数

  • 训练半径:R从10线性递减到0
  • 学习速率:η\etaη从0.3线性递减到0
  • 训练周期:N= 200

(2) 学习过程

▲ 学习训练过程

(3) 训练结果

下面为训练的结果。SOFM的保序特性体现在竞争层的神经元分布与训练样本分布区域保持一致。

▲ 训练后的结果

3.结果讨论

为了更好地显示SOFM保序特性,下面在分别对不同的采样点和神经元个数训练的情况进行展示。训练参数(学习半径、学习速率)与前面相同。

  • 训练样本:100; 神经元个数:25

  • 训练样本200;神经元个数50

  • 训练样本:300;神经元数量:100

➤● 补充讨论


1.对2维拓扑结构SOFM进行训练

(1) 训练数据

数据采集自[−1,1]×[−1,1]\left[ { - 1,1} \right] \times \left[ { - 1,1} \right][−1,1]×[−1,1]随机分布的点。下图显示了300个随机均匀采样后的数据点。

x_ = random.random(num)
y_ = random.random(num)
xy = vstack((x_, y_))

▲ 用于训练2D SOFM的数据

(2) 神经网络初始化

W = stack((random.random((NEURAL_NUM, NEURAL_NUM)), random.random((NEURAL_NUM, NEURAL_NUM)))).T

▲ 随机初始化后的神经节点

2.训练结果

(1) 训练参数

  • 训练样本:N=500
  • 神经元个数:10×10
  • 学习速率:从0.1线性降低到0.01
  • 学习半径:从3 线性降低带0
  • 训练迭代次数:100

(2) 训练结果

下面是一次训练结果,2D的SOFM的神经元均匀分布在训练样本中间。

▲ 2D拓扑结构的SOFM的训练结果

下面是一次训练扭曲的分布结果:

▲ 发生扭曲的训练过程

3.不同的训练数据和节点个数对应的结果

(1) 较少的训练数据

下面是200 个训练数据产生的结果:

▲ 200个训练数据的结果

如下是2000个数据所产生的结果:

▲ 2000个训练数据产生的结果

如下是200个数据训练5×5的二维结构所产生的结果:

▲ 200个数据训练5×5的二维结构所产生的结果

➤※ 作业中的程序


1.训练1D拓扑结构的程序

#!/usr/local/bin/python
# -*- coding: gbk -*-
#============================================================
# HW25.PY                      -- by Dr. ZhuoQing 2020-11-26
#
# Note:
#============================================================from headm import *#------------------------------------------------------------
def generate_data_triangle(num):"""Generate the data point in triangle specifated in problemsdescription.In: num-data point number.Out: Point array-2D."""pointdim = []for i in range(num):while True:x = random.uniform(0, 1)y = random.uniform(0, sqrt(3)/2)y_limit = sqrt(3) * (0.5 - abs(x-0.5))if y > y_limit:continuepointdim.append([x, y])breakreturn array(pointdim)def show_data(data, lineflag=0, title=''):
#    plt.clf()if lineflag ==0:plt.scatter(data[:,0], data[:,1], s=10, c='blue')else:plt.scatter(data[:,0], data[:,1], s=35, c='red')plt.plot(data[:,0], data[:,1], 'y-', linewidth=1)board_x = linspace(0, 1, 200)board_y = [sqrt(3)*(0.5-abs(x-0.5)) for x in board_x]plt.plot(board_x, board_y, 'c--', linewidth=1)plt.plot(board_x, zeros(len(board_x)), 'c--', linewidth=1)plt.xlabel("x1")plt.ylabel("x2")plt.axis([-0.05, 1.05, -0.05, .9])if len(title) > 0: plt.title(title)plt.grid(True)plt.tight_layout()
#    plt.draw()
#    plt.pause(.0001)#------------------------------------------------------------
SAMPLE_NUM          = 300
NEURAL_NUM          = 100
x_data = generate_data_triangle(SAMPLE_NUM)
W = random.rand(NEURAL_NUM, x_data.shape[1])
W[:,1] *= sqrt(3)/2#------------------------------------------------------------
def WTA2(x, w):""" Win-Take-AllIn: x-sample(x1,x2)w-net argumentRet: id-Win ID of w"""dist = array([(x-ww).dot(x-ww) for ww in w])return list(where(dist==amin(dist)))[0][0]#------------------------------------------------------------
def neighborid1(id, row, r):if r <= 0: return [id]iddim = []for i in range(-r,r+1):if id + i < 0:    continueif id + i >= row: continueiddim.append(id + i)return iddimdef compete1(x, w, eta, r):for xx in x:id = WTA2(xx, w)iddim = neighborid1(id, w.shape[0], r)for iidd in iddim:w[iidd] = w[iidd] + eta * (xx - w[iidd])return w#------------------------------------------------------------
TRAIN_NUM       = 200
ETA_BEGIN       = 0.3
ETA_END         = 0.01
RATIO_BEGIN     = 10
RATIO_END        = 0plt.draw()
plt.pause(.2)pltgif = PlotGIF()
for i in range(TRAIN_NUM):eta = (ETA_BEGIN - ETA_END) * (TRAIN_NUM - i) / (TRAIN_NUM - 1) + ETA_ENDratio = int((RATIO_BEGIN - RATIO_END) * (TRAIN_NUM - i) / (TRAIN_NUM - 1) + RATIO_END)W = compete1(x_data, W, eta, ratio)plt.clf()show_data(x_data, 0)show_data(W, 1, "Step:%d/%d, R:%d, eta:%4.2f"%(i+1, TRAIN_NUM, ratio, eta))plt.draw()plt.pause(0.001)pltgif.append(plt)pltgif.save(r'd:\temp\1.gif')
plt.show()#------------------------------------------------------------
#        END OF FILE : HW25.PY
#============================================================

2.训练2D拓扑结构而的SOFM程序

#!/usr/local/bin/python
# -*- coding: gbk -*-
#============================================================
# HW25_1.PY                      -- by Dr. ZhuoQing 2020-11-26
#
# Note:
#============================================================from headm import *#------------------------------------------------------------
def generate_data_rect(num):"""Generate the data point in triangle specifated in problemsdescription.In: num-data point number.Out: Point array-2D."""x_ = random.random(num)y_ = random.random(num)xy = vstack((x_, y_))return xy.Tdef show_data(data):plt.scatter(data[:,0], data[:,1], s=10, c='blue', label='Train Data')plt.vlines(0, 0, 1, color='green', linewidth=1, linestyles='--')plt.vlines(1, 0, 1, color='green', linewidth=1, linestyles='--')plt.hlines(0, 0, 1, color='green', linewidth=1, linestyles='--')plt.hlines(1, 0, 1, color='green', linewidth=1, linestyles='--')plt.axis([-0.1, 1.1, -0.1, 1.2])plt.xlabel("x1")plt.ylabel("x2")plt.grid(True)#------------------------------------------------------------
SAMPLE_NUM          = 200
NEURAL_NUM          = 5
x_data = generate_data_rect(SAMPLE_NUM)
W = stack((random.random((NEURAL_NUM, NEURAL_NUM)), random.random((NEURAL_NUM, NEURAL_NUM)))).Tdef show_W(w):w_ = w.reshape(-1, 2)plt.scatter(w_[:,0], w_[:,1], s=40, c='red', label='Node')for ww in w:plt.plot(ww[:,0], ww[:,1], color='red', linewidth=1, linestyle='--')for ww in w.transpose((1,0,2)):plt.plot(ww[:,0], ww[:,1], color='red', linewidth=1, linestyle='--')plt.legend(loc="upper right")plt.tight_layout()#------------------------------------------------------------
def WTA2(x, w):""" Win-Take-AllIn: x-sample(x1,x2)w-net argumentRet: id-Win ID of w"""col = w.shape[1]dist = array([(x-ww).dot(x-ww) for ww in w.reshape(-1,2)])id = list(where(dist==amin(dist)))[0][0]idx = id % colidy = id // colreturn(idx, idy)#------------------------------------------------------------
def neighborid1(id, row, col, r):if r <= 0: return [id]iddim = []idx = id[0]idy = id[1]for i in range(-r,r+1):if idy + i < 0:    continueif idy + i >= row: continuefor j in range(-r,r+1):if idx + j < 0: continueif idx + j >= col: continueiddim.append((idx+j, idy+i))return iddimdef compete1(x, w, eta, r):for xx in x:id = WTA2(xx, w)iddim = neighborid1(id, w.shape[0], w.shape[1], r)for iidd in iddim:idx = iidd[0]idy = iidd[1]w[idy,idx] = w[idy,idx] + eta * (xx - w[idy,idx])return w#------------------------------------------------------------
TRAIN_NUM       = 100
ETA_BEGIN       = 0.1
ETA_END         = 0.01
RATIO_BEGIN     = 3
RATIO_END        = 0plt.draw()
plt.pause(.2)pltgif = PlotGIF()
for i in range(TRAIN_NUM):eta = (ETA_BEGIN - ETA_END) * (TRAIN_NUM - i) / (TRAIN_NUM - 1) + ETA_ENDratio = int((RATIO_BEGIN - RATIO_END) * (TRAIN_NUM - i) / (TRAIN_NUM - 1) + RATIO_END)W = compete1(x_data, W, eta, ratio)plt.clf()show_data(x_data)show_W(W)plt.title("Step:%d/%d, R:%d, eta:%4.2f"%(i+1, TRAIN_NUM, ratio, eta))plt.draw()plt.pause(0.001)pltgif.append(plt)pltgif.save(r'd:\temp\1.gif')printf('\a')
plt.show()#------------------------------------------------------------
#        END OF FILE : HW25_1.PY
#============================================================

2020年人工神经网络第二次作业-参考答案第五题相关推荐

  1. 2020年人工神经网络第二次作业-参考答案第八题

    如下是 2020年人工神经网络第二次作业 中第八题的参考答案. ➤01 第八题参考答案 1.题目分析 (1) 训练样本 根据题目中的两类样本点在坐标系的位置,可以获得训练样本输入数据矩阵x_train ...

  2. 2020年人工神经网络第二次作业-参考答案第七题

    如下是 2020年人工神经网络第二次作业 中第七题的参考答案. ➤01 第七题参考答案 1.题目分析 根据题目要求,使用CPN(Counterpropagation Network: 对偶传播网络 ) ...

  3. 2020年人工神经网络第二次作业-参考答案第六题

    如下是 2020年人工神经网络第二次作业 中第六题的参考答案. ➤01 第六题参考答案 1.题目分析 (1) 数据处理 将题目中给定的十个景点位置{xi,yi}i=1,2,⋯,10\left\{ {x ...

  4. 2020年人工神经网络第二次作业-参考答案第四题

    如下是 2020年人工神经网络第二次作业 中第四题的参考答案. ➤01 第四题参考答案 1.题目分析 (1) 训练数据 第一个数据集合 这个数据集合包括有16中动物.它们的属性编码在题目中的表格中给出 ...

  5. 2020年人工神经网络第二次作业-参考答案第三题

    如下是 2020年人工神经网络第二次作业 中第三题的参考答案. ➤01 第三题参考答案 1.题目分析 本题实际上是课件中例题的重现问题. 对于7个字符(三种字体),21个训练样本,它们分别属于7大类. ...

  6. 2020年人工神经网络第二次作业-参考答案第二题

    如下是 2020年人工神经网络第二次作业 中第二题的参考答案. ➤01 第二题参考答案 1.题目分析 (1) 训练样本 训练样本是低分辨率(5×5)字符,可以使用长度为25的向量表示,下面就是字母C, ...

  7. 2020年人工神经网络第二次作业-参考答案第一题

    如下是 2020年人工神经网络第二次作业 中第一题的参考答案. ➤01 第一题参考答案 1.题目分析 (1) 已知条件 本题中的建立的是一个由两个竞争节点组成的竞争网络.竞争层的神经元和五个训练样本都 ...

  8. 2020年人工神经网络第二次作业

    第二次作业TEASOFT-DOP文档所在云端目录 ➤01 第一题 1.题目描述 建立起一个竞争网络,有输入层和竞争层组组成,如下图所示,初始权向量为已经归一化为: 训练集合有五个样本向量 xn,n=1 ...

  9. 2021年春季学期-信号与系统-第二次作业参考答案-第九小题

    本文是 2021年春季学期-信号与系统-第二次作业参考答案 的参考答案. ▌第九题 9. 已知三个系统的输入输出关系分别为: 把上述三个子系统进行如下的级联,求系统的输入输出关系,它是线性.时不变系统 ...

最新文章

  1. linux日志按照时间切割,Linux下把tomcat日志按日期自动分割
  2. mysql 员工工资上涨5%_工资从1万到3万,你还差mysql数据库优化之系列五
  3. 图解RHEL6安装过程、VMware-tools的安装及repo仓库的配置
  4. 实验8 分析一个奇怪的程序
  5. c语言大数的加减运算,求用C编个大数加减法运算程序
  6. c# 从地址拷贝byte_面试必备的 “零拷贝” 问题!从头给你说!
  7. 主机数,子网数,网络号,主机号
  8. Android doc |Getting Started|部分 转载 --管理Activity生命周期
  9. 5.PHP ES 使用
  10. 开两个服务内存溢出_详解JVM内存区域
  11. 自定义Qml控件:ImageButton
  12. 使用DBeaver连接mysql报Access denied for user ‘test‘@‘%‘ to database
  13. 【机器学习】某工19级智科专业机器学习期末复习资料
  14. 招人!!!招人!!!
  15. QQ农场之舌尖上的美食(20210729~20211021)
  16. 【Blender小技巧】点对齐
  17. 计算机找不到工具怎么办,电脑工具栏声音图标不见了怎么办
  18. 计算机语言学专业排名,2019QS世界大学学科排名,澳洲语言学专业排名Top200
  19. mysql 修改密码
  20. 短信验证码+token唯一机制+防止重刷+幂等性

热门文章

  1. windows7 RDP修改
  2. 第28篇 js中let和var
  3. 更简单的非递归遍历二叉树的方法
  4. oracle 按照周 分组
  5. 悟透javascript-笔记
  6. 艾伟也谈项目管理,如何做一个合格的项目经理
  7. 远程桌面不能用不能连接处理办法
  8. 传统运维团队转型应该注意哪些问题?
  9. Android 中文 SDK (47) —— Filter
  10. PAT Basic 1069. 微博转发抽奖(20)