2020年人工神經網路第二次作業-參考答案第五題
如下是 2020年人工神經網路第二次作業 中第五題的參考答案。
➤01 第五題參考答案
1.題目分析
(1) 資料產生
100個樣本隨機均勻分佈在三角形區域內,訓練樣本
{
x
i
,
y
i
}
\left\{ {x_i ,y_i } \right\}
{xi,yi}滿足:
x
i
∈
(
0
,
1
)
,
y
i
<
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網路結構
競爭層的神經元引數 { w i 1 , w i 2 } 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;神經元個數500
- 訓練樣本:300;神經元數量:100
➤※ 作業中的程式
#!/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 problems
description.
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:
continue
pointdim.append([x, y])
break
return 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-All
In: x-sample(x1,x2)
w-net argument
Ret: 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):
if id + i < 0: continue
if id + i >= row: continue
iddim.append(id + i)
return iddim
def 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 = 0
plt.draw()
plt.pause(.2)
pltgif = PlotGIF()
for i in range(TRAIN_NUM):
eta = (ETA_BEGIN - ETA_END) * (TRAIN_NUM - i) / (TRAIN_NUM - 1) + ETA_END
ratio = 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
#============================================================
相關文章
- 2020人工神經網路第一次作業-參考答案第十部分神經網路
- 神經網路學習參考神經網路
- 第二次作業:卷積神經網路 part 1卷積神經網路
- 人工神經網路(ANN)神經網路
- 神經網路架構參考:2-2 卷積篇神經網路架構卷積
- Google人工智慧面試·真·題(附參考答案+攻略)Go人工智慧面試
- 第五週:迴圈神經網路神經網路
- 人工智慧 (11) 神經網路人工智慧神經網路
- 人工神經網路-2020-第十四周-人工神經網路硬體實現-備課神經網路
- NLP任務中可參考的神經網路架構(Keras+TensorFlow)神經網路架構Keras
- Web前端經典面試試題及答案(參考連結)Web前端面試
- 最簡單的人工神經網路神經網路
- MATLAB人工神經網路ANN程式碼Matlab神經網路
- python後端面試題答案(僅參考)Python後端面試題
- 【人工神經網路基礎】為什麼神經網路選擇了“深度”?神經網路
- 人工神經網路:競爭型學習神經網路
- 【機器學習】之第五章——神經網路機器學習神經網路
- Tensorflow系列專題(四):神經網路篇之前饋神經網路綜述神經網路
- 一句話總結人工神經網路神經網路
- 讀人工智慧全傳09神經網路人工智慧神經網路
- 神經網路:numpy實現神經網路框架神經網路框架
- 神經網路神經網路
- 100道JAVA面試題+JAVA面試題參考答案Java面試題
- 人工智慧教程 - 1.1.1 什麼是神經網路人工智慧神經網路
- 2020 Android 大廠面試(二)網路和安全機制 含 參考答案Android面試
- LSTM神經網路神經網路
- 8、神經網路神經網路
- 量子神經網路:人工智慧研究的新正規化神經網路人工智慧
- 人工智慧的神經網路到底是什麼?人工智慧神經網路
- 計算機網路參考模型計算機網路模型
- 聊聊從腦神經到神經網路神經網路
- 圖神經網路GNN 庫,液體神經網路LNN/LFM神經網路GNN
- 2024年廣東中考數學壓軸題參考答案
- 【神經網路篇】--RNN遞迴神經網路初始與詳解神經網路RNN遞迴
- 【深度學習篇】--神經網路中的卷積神經網路深度學習神經網路卷積
- 神經網路篇——從程式碼出發理解BP神經網路神經網路
- 人工智慧中神經網路發展緩慢的原因人工智慧神經網路
- 人工神經網路初學:是什麼以及為什麼?神經網路