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

举报
tsinghuazhuoqing 发表于 2021/12/26 01:14:20 2021/12/26
【摘要】 如下是 2020年人工神经网络第二次作业 中第一题的参考答案。   ➤01 第一题参考答案 1.题目分析 (1) 已知条件 本题中的建立的是一个由两个竞争节点组成的竞争网络。竞争层...

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

 

01 第一题参考答案


1.题目分析

(1) 已知条件

本题中的建立的是一个由两个竞争节点组成的竞争网络。竞争层的神经元和五个训练样本都分布在二维坐标系的单位圆上。因此,对于本题在挑选胜出者神经元的时候采用向量内积来度量输入样本 x i = { x i 1 , x i 2 } x_i = \left\{ {x_{i1} ,x_{i2} } \right\} xi={xi1,xi2}与神经元内星向量 w 1 = { w 11 , w 12 } w_1 = \left\{ {w_{11} ,w_{12} } \right\} w1={w11,w12}之间的相似度。内积越大,相似程度越强。

⟨ x i , w j ⟩ = x i 1 w j 1 + x i 2 w j 2 \left\langle {x_i ,w_j } \right\rangle = x_{i1} w_{j1} + x_{i2} w_{j2} xi,wj=xi1wj1+xi2wj2

根据给定的五个训练样本对应的角度, ∣ x i ∣ = 1 ,    x i = { 45 , 90 , 130 , 180 , − 135 } \left| {x_i } \right| = 1,\,\,x_i = \left\{ {45,90,130,180, - 135} \right\} xi=1,xi={45,90,130,180,135}

可以获得五个训练样本的空间坐标: x i 1 = cos ⁡ ( x i ) , x i 2 = sin ⁡ ( x i ) x_{i1} = \cos \left( {x_i } \right),x_{i2} = \sin \left( {x_i } \right) xi1=cos(xi),xi2=sin(xi)

(2) 求解算法

对于选定的输入样本 x i = { x i 1 , x i 2 } x_i = \left\{ {x_{i1} ,x_{i2} } \right\} xi={xi1,xi2},寻找与它夹角最小的 w j w_j wj j = arg ⁡ min ⁡ n ( x i , w n ) j = \mathop {\arg \min }\limits_n \left( {x_i ,w_n } \right) j=nargmin(xi,wn)

w j w_j wj进行学习: w j ← w j + η ⋅ ( x i − w j ) w_j \leftarrow w_j + \eta \cdot \left( {x_i - w_j } \right) wjwj+η(xiwj)

然后在进行归一化: w j ← w j ∣ w j ∣ w_j \leftarrow {{w_j } \over {\left| {w_j } \right|}} wjwjwj

2.求解过程

(1) 求解程序

使用Python编写求解过程中相关程序参见后面附录中 作业中的程序

(2) 迭代 一次的结果

w1=[-0.87642497  0.48153841]
w2=[-0.45765242 -0.8891312 ]

  
 
  • 1
  • 2

▲ 迭代一次后的结果

▲ 迭代一次后的结果

(3) 多次学习过程

  • 学习速率: η = 0.05 \eta = 0.05 η=0.05,迭代次数 N = 100 N = 100 N=100

学习速率相对比较低,两个神经元的位置随着学习过程逐步靠近平衡位置。
▲ 迭代一百次的学习过程

▲ 迭代一百次的学习过程

  • 学习速率 η = 0.2 \eta = 0.2 η=0.2,迭代次数 N = 100 N = 100 N=100

学习速率比较大的情况下,最终两个神经元的位置在平衡位置附近抖动。
▲ 迭代100次训练过程

▲ 迭代100次训练过程

  • 学习速率 η = 0.005 \eta = 0.005 η=0.005,迭代次数 N = 100 N = 100 N=100

学习速率过小,两个神经元移动缓慢。在有限的步骤(N=100)之内无法运动到最佳的位置。

▲ 迭代100次的收敛过程

▲ 迭代100次的收敛过程

  • 变速率学习:学习速率线性下降,从0.2,经过100步线性下降到0.

▲ 学习速率线性下降

▲ 学习速率线性下降

▲ 变学习速率的训练过程

▲ 变学习速率的训练过程

3.结果讨论

  • 如果训练样本和网络的权系数都进行了归一化之后,可以通过比较样本与神经元的权系数向量内积来选择获胜的神经元。

  • 神经元经过学习之后还需要重新进行归一化,为后面的竞争做准备。

  • 学习速率对于竞争网络的收敛情况起到非常重要的作用。通过学习速率的逐步降低,可以保证最终训练结果收敛到一个比较稳定的结果。


 

※ 作业中的程序


#!/usr/local/bin/python
# -*- coding: gbk -*-
#============================================================
# HW21.PY                     -- by Dr. ZhuoQing 2020-11-24
#
# Note:
#============================================================

from headm import *

#------------------------------------------------------------
sample_angle = [45, 90, 130, 180, -135]
sample_xy = array([[cos(a*pi/180), sin(a*pi/180)] for a in sample_angle]).astype('float32')

W12 = array([[1,0], [0,-1]]).astype('float32')

plt.draw()
plt.pause(.2)

#------------------------------------------------------------
def shownet(s, w, title):
    plt.clf()
    plt.scatter(s[:,0], s[:,1], c='b', s=20.0, alpha=1)
    plt.scatter(w[:,0], w[:,1], c='r', s=30.0, alpha=1)
    a = linspace(0, 2*pi, 100)
    plt.plot(cos(a), sin(a), 'g--', linewidth=1)
    plt.xlabel("x1")
    plt.ylabel("x2")
    plt.grid(True)
    plt.title(title)
    plt.tight_layout()
#    plt.show()
    plt.draw()
    plt.pause(.001)

#------------------------------------------------------------
def WTA1(x, w):
    """ Win-Take-All
    In: x-sample(x1,x2)
           w-net argument
    Ret: id-Win ID of w
    """
    innerdot = w.dot(x)
    return list(where(innerdot==amax(innerdot)))[0][0]

def normvect(v):
    m = v.dot(v)
    return v/sqrt(m)

#------------------------------------------------------------
def compete(s, w, lr=0.1):
    for ss in s:
        winid = WTA1(ss, w)
        w[winid] = normvect(w[winid] + lr * (ss - w[winid]))

    return w

#------------------------------------------------------------
pltgif = PlotGIF()

sxy = sample_xy
for i in range(100):
    random.shuffle(sxy)

    eta = 0.2 - 0.2 * i / 99
    W12 = compete(sxy, W12, eta)

    shownet(sample_xy, W12, 'Step:%d, η=%4.2f'%(i, eta))

    pltgif.append(plt)

pltgif.save(r'd:\temp\1.gif')

printf('w1=%s'%W12[0])
printf('w2=%s'%W12[1])

plt.show()
#------------------------------------------------------------
#        END OF FILE : HW21.PY
#============================================================

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68
  • 69
  • 70
  • 71
  • 72
  • 73
  • 74
  • 75
  • 76
  • 77
  • 78
  • 79
  • 80

文章来源: zhuoqing.blog.csdn.net,作者:卓晴,版权归原作者所有,如需转载,请联系作者。

原文链接:zhuoqing.blog.csdn.net/article/details/110085738

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。