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

01 第二题参考答案


1.题目分析

(1) 训练样本

训练样本是低分辨率(5×5)字符,可以使用长度为25的向量表示,下面就是字母C,I,T对应的向量,以及由它们组成的训练样本矩阵x_data。

c_data = [0,1,1,1,0,1,0,0,0,1,1,0,0,0,0,1,0,0,0,1,0,1,1,1,0]
i_data = [0,1,1,1,0,0,0,1,0,0,0,0,1,0,0,0,0,1,0,0,0,1,1,1,0]
t_data = [1,1,1,1,1,0,0,1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1,0,0]
x_data = array[c_data, i_data, t_data]

训练样本是由上述三个无噪声样本通过增加海明距离(Hamming Distance)为1的噪声,即两个二值向量之间不相同元素的个数为1产生。

请注意,作为训练样本的数据集合中,C字符数据与I,T两个字符数据相距比较远。I,T两个字符数据向量之间的距离比较近。这种情况为后面使用竞争网络进行聚类增加了困难。

(2) 网络结构

  • 网络结构:
    - 输入节点个数:25
    - 竞争层节点个数:3

▲ 网络结构

(3) 显示权系数

由于输入样本和权系数是长度为25的向量,它们代表着5×5的字符。为了显示出25维向量的意义,通过绘制坐标系中的散点图来显示它们对应的字符形式。

下面是使用python中的matplotlib函数绘制出没有添加噪声的x_data形态。

def plotw(w, title):plt.clf()for id,ww in enumerate(w):x = id * CHAR_DIST * DOT_SIZEfor hid,v in enumerate(ww):line = hid // 5col  = hid % 5yy = (5-line) * DOT_SIZExx = x + col * DOT_SIZEarea = v * 500plt.scatter(xx, yy, s=area, c='b', alpha=0.5)

▲ 三个训练样本显示的情况

▲ 添加噪声后的训练样本

2.求解过程

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

(1) 随机初始化开始

在开始,选择学习速率固定位η=0.1\eta = 0.1η=0.1,训练周期N=100。

按照题意,将三个神经元随机初始化。将权系数对应的图像如下:

▲ 三个神经元随机初始化

下面是训练过程权系数演变过程。可以看到第一个神经元在整个过程中都没有胜出,所以它始终保持在初始化状态。神经元2对于I,T两个字符都有响应。它最终演变成I,T的平均值。第3个神经元响应C字符的输入,它最终演变成字符C的形状。

▲ 训练过程中权系数演变过程

下面选择学习速率是一个线性递减的过程。从0.5 经过N=100个训练周期之后,递减至0。

下面是重新初始化后,三个权系数对应的信息:

▲ 神经元初始化过程

下面是训练过程中,三个神经元演变的过程。这一次,是第三个神经元始终没有胜出。第一个神经元对I,T两个字符有响应。第二个神经元对于字符C有响应。

▲ 训练过程中三个神经元演变过程

以上两个例子说明,对于竞争网络从随机初始化其,很大可能性会造成部分神经元在整个训练过程中始终无法胜出,而另外神经元则可能对于一个,或者多个样本进行学习。对应多个样本学习的神经元最终形成这些样本的平均值

(2) 使用原字符初始化

下面是对竞争神经元初始化成三个样本加五个噪声的情况。

▲ 三个神经元初始化后的情况

学习速率固定位η=0.1\eta = 0.1η=0.1,经过100次训练之后,三个系数的演变过程为:

▲ 竞争演变过程

通过上面训练最后,可以看到三个神经原分别收敛到三个字符的形态。这说明它们各自对三个字符能够进行响应,从增加有1个噪声点的训练样本集合中学习到了三个字符类别。

(3) 使用更多噪声样本训练

为了避免随机初始化的竞争神经元存在死神经元–也就是在整个训练过程中始终没有响应,下面使用添加有更多噪声的样本进行训练。

下面分别使用添加有4个噪声,5个噪声的样本进行训练。可以看到它们从随机初始化开始,三个神经元最终都能够有响应。

在训练过程中,学习速率线性降低到0。训练循环次数为:N=100。

▲ 使用增加4个噪声样本进行训练

▲ 使用增加5个噪声点样本训练过程

看到上面训练到最后,学习速率线性降低到0的时候,三个神经元分别对应着三个字符,这样就说明竞争网络学习之后,可以正确区分这三个字符了。

3.结果讨论

  • 训练竞争神经网络,通常设置学习速率从一个较大的值,逐步降低到0。这样可以保证最终网络收敛到一个比较准确的值;
  • 竞争网络的结果依赖于初始化的值。如果随机对竞争神经元进行初始化,往往会造成部分神经元在整个训练过程没有响应,形成死神经元,从而使得学习效果降低;
  • 将竞争网络初始化为随机的训练样本可以改善学习效果;
  • 使用增加有更多噪声的样本进行训练,也可以有效提高竞争神经元学习的效果。

➤※ 作业中的程序


#!/usr/local/bin/python
# -*- coding: gbk -*-
#============================================================
# HW22.PY                      -- by Dr. ZhuoQing 2020-11-24
#
# Note:
#============================================================from headm import *#------------------------------------------------------------
c_data = [0,1,1,1,0,1,0,0,0,1,1,0,0,0,0,1,0,0,0,1,0,1,1,1,0]
i_data = [0,1,1,1,0,0,0,1,0,0,0,0,1,0,0,0,0,1,0,0,0,1,1,1,0]
t_data = [1,1,1,1,1,0,0,1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1,0,0]
x_data = array([c_data, i_data, t_data]).astype('float32')Wcit = random.rand(3, x_data.shape[1]) # initialize NN
#Wcit = x_data#------------------------------------------------------------
def shufflenoise(x, nn=1):                # Shuffle data and add one noise
#    random.shuffle(x)for xx in x:for i in range(nn):id = random.randint(x.shape[1])if xx[id] < 0.5: xx[id] = 1.0else: xx[id] = 0return x#Wcit = shufflenoise(x_data.copy(), 5)#------------------------------------------------------------
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 compete(x, w, eta):for xx in x:id = WTA2(xx, w)w[id] = w[id] + eta * (xx - w[id])return w#------------------------------------------------------------
DOT_SIZE            = 1
CHAR_DIST           = 7plt.draw()
plt.pause(.2)def plotw(w, title):plt.clf()for id,ww in enumerate(w):x = id * CHAR_DIST * DOT_SIZEfor hid,v in enumerate(ww):line = hid // 5col  = hid % 5yy = (5-line) * DOT_SIZExx = x + col * DOT_SIZEarea = v * 500plt.scatter(xx, yy, s=area, c='b', alpha=0.5)plt.xlabel("x")plt.ylabel("y")plt.axis([-1.0, 19, -1, 7])plt.grid(True)plt.title(title)plt.tight_layout()plt.draw()plt.pause(0.002)#------------------------------------------------------------
pltgif = PlotGIF()plotw(x_data,'Initial')for i in range(100):eta = 0.5 - (0.5 * i/99)x = shufflenoise(x_data.copy(), 4)Wcit = compete(x, Wcit, eta)plotw(Wcit, 'Step:%d, eta:%4.2f'%(i+1, eta))
#    plotw(x, "Noise:%d"%i)pltgif.append(plt)pltgif.save(r'd:\temp\1.gif')
plt.show()#------------------------------------------------------------
#        END OF FILE : HW22.PY
#============================================================

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

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

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

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

    本文是 2021年春季学期-信号与系统-第二次作业参考答案 的参考答案. ▌第十题 10 从网络学堂下载代表两个信号的音频文件: 音频文件: f1(t)f_1 \left( t \right)f1​( ...

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

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

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

    本文是 2021年春季学期-信号与系统-第二次作业参考答案 的参考答案. ▌第七题 7. 判断下列系统是否可逆.若可逆,给出它的逆系统:若不可逆,指出使该系统产生相同输出的两个输入信号. 判断系统是否 ...

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

    本文是 2021年春季学期-信号与系统-第二次作业参考答案 的参考答案. ▌第六题 6. 有一线性时不变系统, 当激励e1(t)=u(t)e_1 \left( t \right) = u\left( ...

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

    本文是 2021年春季学期-信号与系统-第二次作业参考答案 的参考答案. ▌第五题 5. Consider a LTI systems whose response to the singal x1( ...

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

    本文是 2021年春季学期-信号与系统-第二次作业参考答案 的参考答案. ▌第四题 4 .试写出下图所示的系统输入.输出关系. 求解: (1)第一小题 在原来系统框图的基础上,增加节点变量y′(t), ...

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

    本文是 2021年春季学期-信号与系统-第二次作业参考答案 的参考答案. ▌第三题 3.已知序列f[n]f\left[ n \right]f[n]如下图所示,画出下列格式的波形. 注:(4)(5)为选 ...

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

    本文是 2021年春季学期-信号与系统-第二次作业参考答案 的参考答案. ▌第二题 2. 已知下图(a)中的xe(t)x_e \left( t \right)xe​(t)是信号x(t)x\left( ...

最新文章

  1. 聊聊reactive streams的schedulers
  2. Angular4 组件通讯方法大全
  3. tomcat5应用移植到WAS5.1中的一些问题及解决
  4. [学习笔记] Cordova+AmazeUI+React 做个通讯录 - 单页应用 (With Router)
  5. JSON解析---初识
  6. [html] 页面上的登录表单记住了密码(显示星号),但我又忘了密码,如何找回这个密码呢?
  7. 【C语言】请输入一个n(n=10)并输出一个n行n列的杨辉三角
  8. CCF201609试题
  9. Spark内核解析之一:内核概述
  10. 书接上文——python实现感知分类器模型分类过程动态可视化
  11. python arma_Python实现ARMA模型
  12. Material Design 总结
  13. 论文摘要6 - board planar antenna with Circular Polarization
  14. 这次的室温超导爆炸性发现,会是人类的进步?
  15. 如意人生守护·典藏版:论赔付力度,这款产品是碾压级的!
  16. 基于SSM美食食谱管理系统Java家庭食谱安排系统的设计与实现(源码调试+讲解+文档)
  17. LabVIEW如何实现高性能串口助手-附代码
  18. opencv blur函数——均值滤波
  19. (每日水题004-1)(DP,滚动数组)洛谷P1508 Likecloud-吃、吃、吃
  20. 复杂图形求面积c语言,用CAD计算复杂图形面积的方法

热门文章

  1. 移动端与PHP服务端接口通信流程设计(基础版)
  2. Android中service应用
  3. Java String字符串补0或空格
  4. 【端口号和服务漫谈】
  5. android闪退日志收集
  6. 实现Windows non-Unicode设置批量修改
  7. React Redux 的一些基本知识点
  8. REDIS 高可用性部署架构图
  9. 思科交换机vlan配置
  10. 海天学院的打造IT人才讲座准备