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

01 第三题参考答案


1.题目分析

本题实际上是课件中例题的重现问题。

对于7个字符(三种字体),21个训练样本,它们分别属于7大类。所以用于对该数据集合的竞争学习,竞争神经元的个数应该至少大于7。题目要求竞争层的神经元的个数等于25。

根据课件上的描述,以及题目中的要求,构造自组织特征映射(SOFM)的主要参数为:

  • 竞争层的三种结构:要求分别从无拓扑结构(WTA)、一维拓扑结构、二维拓扑结构来进行对比;
  • 训练过程中,学习速率按照线性从0.6逐步线性减小至0.01;
  • 对于一维拓扑结构、二维拓扑结构,训练半径始终保持为1;
  • 对于二维结构,一个神经元只有上下左右四个相邻的神经元样本;

根据以上简化假设,可以编写相应的程序,完成网络训练。

2.求解过程

(1) 求解程序

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

  • 无拓扑结构训练算法
def compete0(x, w, eta):for xx in x:id = WTA2(xx, w)w[id] = w[id] + eta * (xx - w[id])return w
  • 一维拓扑结构训练算法
def compete1(x, w, eta):for xx in x:id = WTA2(xx, w)w[id] = w[id] + eta * (xx - w[id])if id > 0:              w[id-1] = w[id-1] + eta*(xx-w[id-1])if id+1 < w.shape[0]:   w[id+1] = w[id+1] + eta*(xx-w[id+1])return w
  • 二维拓扑结构训练算法
def neighborid2(id, row, col):rown = id // colcoln = id % coliddim = [id]if coln > 0:        iddim.append(id-1)if coln < col-1:    iddim.append(id+1)if rown > 0:        iddim.append(id-col)if rown < row-1:    iddim.append(id+col)return iddimdef compete2(x, w, eta):for xx in x:id = WTA2(xx, w)iddim = neighborid2(id, 5, 5)for iidd in iddim:w[iidd] = w[iidd] + eta * (xx - w[iidd])return w

(2) 竞争层无结构

也就是采用胜者为王的竞争算法:

  • 随机初始化后,竞争层神经元对应的响应:
 1.        2.        3.        4.JJEJ    5.       6.        7.        8.        9.       10.
11.       12.A      13.AB     14.       15.BEE
16.       17.KK     18.       19.       20.
21.       22.       23.       24.CDBCKDCD25.A

上面显示随机初始化之后,只有6个神经元(编号:4,12,13,15,17,24)对训练样本有响应。其中四个神经元(编号:4,13,15,24)响应样本有混淆,即多于一个字符。

  • 经过训练之后竞争层层的神经元响应:
 1.        2.        3.        4.JJJ     5.BED    6.        7.        8.        9.K      10.AA
11.       12.KEKE   13.A      14.       15.
16.       17.BDBD   18.       19.       20.
21.       22.       23.       24.CCC    25.

经过竞争训练之后,有8个神经元(编号:4,5,9,10,12,13,17,24)有响应了。其中三个神经元(编号:5,12,17)存在字符混淆。

  • 重新初始化之后再一次训练之后的神经元响应:
 1.CCC     2.BED     3.        4.        5.       6.        7.KEKE    8.        9.       10.
11.       12.AA     13.       14.BDBD   15.
16.       17.       18.       19.       20.
21.K      22.A      23.       24.       25.JJJ

重新训练,仍然有8个神经元(编号:1,2,7,12,14,21,22,25)有响应,有3个神经元(编号:2,7,14)存在字符混淆。

(3) 竞争层采用一维拓扑结构

  • 第一次训练结果
 1.KK      2.        3.EE      4.        5.BB     6.        7.DD      8.        9.CCC    10.
11.JJJ    12.       13.A      14.       15.A
16.       17.A      18.       19.B      20.
21.D      22.       23.E      24.       25.K

使用一维拓扑结构训练之后,总共有13个神经元有响应,而且不存在有混淆字符的神经元。这说明对于字符分类已经能够达到100%正确了。

  • 第二次训练结果
 1.KK      2.        3.E       4.        5.BE     6.        7.B       8.        9.DD     10.
11.K      12.       13.BE     14.       15.D
17.       17.CCC    18.       19.       20.A
18.       22.AA     23.       24.JJJ    25

再训练一次,存在14个神经元响应。其中存在2个神经元(编号:5,13)存在着字符混淆。

(4) 竞争层采用二维拓扑结构

  • 第一次训练结果
 1.        2.AA      3.        4.C       5.       6.A       7.        8.DD      9.       10.CC
21.       12.K      13.       14.JJJ    15.
16.ED     17.       18.KK     19.       20.EE
22.       22.B      23.       24.BB     25.
  • 第二次训练结果
 1.        2.K       3.        4.        5.BB     6.D       7.        8.        9.EE     10.
11.       12.       13.KK     14.       15.DD
16.       17.BE     18.       19.A      20.
21.CCC    22.       23.JJJ    24.       25.AA

使用二维拓扑结构,无论是在神经元响应的数量上,还是存在欢笑神经元方面,都没有比一维拓扑结构有明显改善。

3.结果讨论

  • 通过对比三种竞争层的拓扑结构(无拓扑结构(0维拓扑)、一维拓扑、二维拓扑)可以看到,对于分类问题,一维拓扑结构比起无拓扑结构(0维结构)效果要好。体现在能够更多的激发出神经元来对应样本相应,类别混淆的神经元个数进一步降低;
  • 分类问题上,二维拓扑结构比一维拓扑结构没有显著的效果改进。

➤※ 作业中的程序


1.作业竞争算法主程序

#!/usr/local/bin/python
# -*- coding: gbk -*-
#============================================================
# HW23.PY                      -- by Dr. ZhuoQing 2020-11-24
#
# Note:
#============================================================from headm import *
import hw19data#------------------------------------------------------------
x_data = hw19data.chardata.astype('float32')
target = hw19data.targetdata.T
CharStr = 'ABCDEJK'#------------------------------------------------------------
def target2c(t):id = list(where(t==1))[0][0]
#    printff(t, id)return CharStr[id]#------------------------------------------------------------
W = random.rand(25, x_data.shape[1])#------------------------------------------------------------
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]#------------------------------------------------------------
SHOW_SEGMENT_LEN        = 10
def shownet0(w):                    # Show net result: 0-dimensionstrdim = [''] * 25for id,x in enumerate(x_data):iidd = WTA2(x, w)c = target2c(target[id])strdim[iidd] += cfor i in range(5):showstr = ''for j in range(5):strid = i * 5 + joutstr = '%2d.%s'%(strid+1, strdim[strid])if len(outstr) < SHOW_SEGMENT_LEN:outstr += " " * (SHOW_SEGMENT_LEN - len(outstr))showstr += outstrprintf(showstr)shownet0(W)#------------------------------------------------------------
def compete0(x, w, eta):for xx in x:id = WTA2(xx, w)w[id] = w[id] + eta * (xx - w[id])return w#------------------------------------------------------------
def compete1(x, w, eta):for xx in x:id = WTA2(xx, w)w[id] = w[id] + eta * (xx - w[id])if id > 0:              w[id-1] = w[id-1] + eta*(xx-w[id-1])if id+1 < w.shape[0]:   w[id+1] = w[id+1] + eta*(xx-w[id+1])return w#------------------------------------------------------------
def neighborid2(id, row, col):rown = id // colcoln = id % coliddim = [id]if coln > 0:        iddim.append(id-1)if coln < col-1:    iddim.append(id+1)if rown > 0:        iddim.append(id-col)if rown < row-1:    iddim.append(id+col)return iddimdef compete2(x, w, eta):for xx in x:id = WTA2(xx, w)iddim = neighborid2(id, 5, 5)for iidd in iddim:w[iidd] = w[iidd] + eta * (xx - w[iidd])return w#------------------------------------------------------------
STEPS = 1000
for i in range(STEPS):eta = 0.6 - (0.59 * i/STEPS)x = x_data.copy()random.shuffle(x)W = compete2(x, W, eta)shownet0(W)#------------------------------------------------------------
#        END OF FILE : HW23.PY
#============================================================

2.训练数据整理子程序模块

#!/usr/local/bin/python
# -*- coding: gbk -*-
#============================================================
# HW19DATA.PY                  -- by Dr. ZhuoQing 2020-11-24
#
# Note:
#============================================================from headm import *sdata = ('[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, 0, 1, 0, 0, 0, 1, 0, 1, 1, 1, 0, 1, 1, 1]',\'[1, 0, 0, 0, 0, 0, 0]',\'[1, 1, 1, 1, 1, 1, 0, 0, 1, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 1, 0, 1, 1, 1, 1, 1, 0, 0, 1, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 0]',\'[0, 1, 0, 0, 0, 0, 0]',\'[0, 0, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 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, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 0]',\'[0, 0, 1, 0, 0, 0, 0]',\'[1, 1, 1, 0, 0, 1, 1, 0, 1, 0, 0, 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1, 1, 1, 0, 0, 1, 1]',\'[0, 0, 0, 0, 0, 0, 1]',\'[0, 0, 0, 1, 1, 1, 1, 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, 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, 1, 0]',\'[1, 1, 1, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 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, 0, 1, 1, 1, 1, 1, 1, 1, 1]',\'[0, 0, 0, 0, 1, 0, 0]',\'[1, 1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 1, 0, 1, 1, 1, 1, 1, 0, 0]',\'[0, 0, 0, 1, 0, 0, 0]',\'[0, 0, 0, 0, 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, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 0, 0, 1, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 1, 0]',\'[1, 0, 0, 0, 0, 0, 0]',\'[0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 0]',\'[0, 1, 0, 0, 0, 0, 0]',\'[0, 0, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 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, 0, 0, 0, 1, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 0, 0]',\'[0, 0, 1, 0, 0, 0, 0]',\'[1, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 1, 0]',\'[0, 0, 0, 0, 0, 0, 1]',\'[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, 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, 1, 0]',\'[0, 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, 1, 1, 1, 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, 1, 1, 1, 1, 1, 1]',\'[0, 0, 0, 0, 1, 0, 0]',\'[0, 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, 1, 1, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 1, 0, 1, 1, 1, 1, 1, 0, 0]',\'[0, 0, 0, 1, 0, 0, 0]',\'[0, 0, 0, 0, 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, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 1, 1]',\'[1, 0, 0, 0, 0, 0, 0]',\'[1, 1, 1, 1, 1, 1, 0, 0, 1, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 1, 0, 1, 1, 1, 1, 1, 0, 0, 1, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 0]',\'[0, 1, 0, 0, 0, 0, 0]',\'[0, 0, 1, 1, 1, 0, 1, 0, 1, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 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, 0, 0, 0, 1, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 0, 0]',\'[0, 0, 1, 0, 0, 0, 0]',\'[1, 1, 1, 0, 0, 1, 1, 0, 1, 0, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1, 1, 1, 0, 0, 1, 1]',\'[0, 0, 0, 0, 0, 0, 1]',\'[0, 0, 0, 0, 1, 1, 1, 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, 0, 0, 1, 0, 0, 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, 1, 0]',\'[1, 1, 1, 1, 1, 1, 0, 0, 1, 0, 0, 0, 0, 1, 0, 1, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 1, 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, 1, 1, 1]',\'[0, 0, 0, 0, 1, 0, 0]',\'[1, 1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 1, 0, 1, 1, 1, 1, 1, 0, 0]',\'[0, 0, 0, 1, 0, 0, 0]',)#------------------------------------------------------------
chardata = []
targetdata = []
for s in sdata:data = eval(s)if len(data) > 7:   chardata.append(data)else:               targetdata.append(data)#printf(chardata, targetdata)chardata = array(chardata)
targetdata = array(targetdata).Tif __name__ == "__main__":printff(chardata, targetdata)#------------------------------------------------------------
#        END OF FILE : HW19DATA.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) 数据产生 100个样本随机均匀分布在三角形区域内,训练样本{xi,yi}\left\{ { ...

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

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

  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. Vue之for列表渲染、methods事件和model表单绑定
  2. 第十九课.Pytorch-geometric扩展
  3. 数据蒋堂 | 大数据计算语法的SQL化
  4. ubuntu重启+sublime快捷键
  5. Java必须了解的“递归”与“IO流”!!!
  6. python爬取快代理IP并测试IP的可用性
  7. c语言 get网页,get c语言获取网页信息 - 下载 - 搜珍网
  8. 手动封装js的call和apply和bind和typeof和new方法
  9. 教授呼吁:应当让博士生先回学校
  10. matlab must agree,EEMD遇到Inner matrix dimensions must agree.
  11. python selenium自动化框架_一文讲透!实现一个Python+Selenium的自动化测试框架如此简单!...
  12. 发票验真API开发文档
  13. eclipse php 代码补全,phpeclipse代码提示
  14. VS2013配置OpenGL
  15. java 获取视频编码_Java如何获取文件编码格式
  16. bedtools subtract 基因区段取差集
  17. JAVA医院预约挂号系统毕业设计 开题报告
  18. 阿里数据仓库架构与模型设计
  19. 2022最新HTML生成国庆头像网页源码+打开即用
  20. 国产处理器兆芯可运行Windows,已试制出Intel i5级处理器

热门文章

  1. thinkphp整合极验滑动验证码源码演示下载
  2. 通过ngx-lua来统计Nginx上的虚拟主机性能数据
  3. 显示ip的img的url
  4. 快排--java实现
  5. (入门)上传GitHub怎么忽略node_modules
  6. AtCoder Regular Contest 071 D - 井井井 / ###
  7. shell脚本中常见的一些特殊符号和作用详解
  8. ORACLE之SPFILE与PFILE
  9. 【IT职场生存手册】他山之石,可以攻玉【51CTO技术论坛】
  10. 浅析epoll – epoll例子以及分析 - C++爱好者博客