實驗2 som網實驗

2021-09-10 10:52:23 字數 4368 閱讀 1529

傳送門(所有的實驗都使用python實現)

實驗1 bp神經網路實驗

實驗2 som網實驗

實驗3 hopfield實現八皇后問題

實驗4 模糊搜尋演算法**薄冰厚度

實驗5 遺傳演算法求解tsp問題

實驗6 蟻群演算法求解tsp問題

實驗7 粒子群優化演算法求解tsp問題

實驗8 分布估計演算法求解揹包問題

實驗9 模擬退火演算法求解揹包問題

實驗10 禁忌搜尋演算法求解tsp問題

一、實驗目的

了解使用som演算法

二、實驗內容

(描述實驗任務)

試設計乙個具有5*5神經元平面陣的som網,建議學習率(t)在前1000步訓練中從0.5線性下降至0.04,然後在訓練到10,000步時減小至0。優勝鄰域半徑初值設為2個節點(即優勝鄰域覆蓋整個輸出平面),1000個訓練步時減至0(即只含獲勝節點)。每訓練200步保留一次權向量,觀察其在訓練過程中的變化。給出訓練結束後,5個輸入模式在輸出平面的對映圖。

三、實驗環境

(描述實驗的軟體、硬體環境)

使用python3.0 在 eclipse進行編輯

四、實驗步驟

(描述實驗步驟及中間的結果或現象。在實驗中做了什麼事情,怎麼做的,發生的現象和中間結果)

經過迭代學習10000次,得到的權重矩陣如下:

畫圖的結果如下:

未進行歸一化所畫的圖

歸一化之後畫的圖

五、總結

(說明實驗過程中遇到的問題及解決辦法;新發現或個人的收穫;未解決/需進一步研討的問題或建議新實驗方法等)

python原始碼

# -*- coding: utf-8 -*-

import numpy as np

import pylab as pl

def draw(c): #畫圖函式

colvalue = ['r', 'y', 'g', 'b', 'c', 'k', 'm']

for i in range(len(c)):

coo_x =

coo_y =

for j in range(len(c[i])):

pl.scatter(coo_x, coo_y, marker='x', color=colvalue[i % len(colvalue)], label=i)

pl.legend(loc='upper right')

pl.show()

class myson(object):

def __init__(self, x, output, times, size):

self.x = x #輸入樣例

self.output = output #輸出

self.times = times #迭代次數

self.size = size #資料長度

self.w = np.random.rand(x.shape[1], output[0] * output[1])

print(self.w.shape)

def ree(self, t, n):

return np.power(np.e, -n) / (t + 2)

def ren(self, t): # 返回拓撲距離

a = min(self.output)

return int(a - float(a) * t / self.times)

def nei(self, index, n): #確定獲勝區域點

a, b = self.output

length = a * b

def dis(index1, index2): #計算距離

i1_a, i1_b = index1 // a, index1 % b

i2_a, i2_b = index2 // a, index2 % b

return np.abs(i1_a - i2_a), np.abs(i1_b - i2_b)

def upw(self, x, t, winner): #更新權值

n = self.ren(t)

for x, i in enumerate(winner):

to_update = self.nei(i[0], n)

for j in range(n + 1):

e = self.ree(t, j)

for w in to_update[j]:

self.w[:, w] = np.add(self.w[:, w], e * (x[x, :] - self.w[:, w]))

ans = [set() for i in range(n + 1)]

for i in range(length):

dist_a, dist_b = dis(i, index)

if dist_a <= n and dist_b <= n: ans[max(dist_a, dist_b)].add(i) #將獲勝節點加入集合

return ans

def train(self): #訓練函式

count = 0

while self.times > count:

train_x = self.x[np.random.choice(self.x.shape[0], self.size)]

normal_w(self.w)

normal_x(train_x)

train_y = train_x.dot(self.w)

winner = np.argmax(train_y, axis=1).tolist()

self.upw(train_x, count, winner)

count += 1

return self.w

def af_train(self): #返回訓練結果

normal_x(self.x)

train_y = self.x.dot(self.w)

winner = np.argmax(train_y, axis=1).tolist()

print(winner)

return winner

def normal_x(x): #輸入歸一化處理

n, d = x.shape

for i in range(n):

temp = np.sum(np.multiply(x[i], x[i]))

x[i] /= np.sqrt(temp)

return x

def normal_w(w): #初始權值歸一化處理

for i in range(w.shape[1]):

temp = np.sum(np.multiply(w[:, i], w[:, i]))

w[:, i] /= np.sqrt(temp)

return w

if __name__ == '__main__':

data = """1,0,0,0,1,1,0,0,1,1,1,0,0,1,0,0,1,1,1,1;"""

a = data.split(',')

dataset = np.mat([[float(a[i]), float(a[i + 1]),float(a[i+2]),float(a[i+3]),] for i in range(0, len(a) - 1, 4)])

dataset_old = dataset.copy()

myson = myson(dataset, (5, 5), 1,5)

myson.train()

res = myson.af_train()

classify = {}

for i, win in enumerate(res):

if not classify.get(win[0]):

classify.setdefault(win[0], [i])

else:

a = # 未歸一化的資料分類結果

b = # 歸一化的資料分類結果

for i in classify.values():

draw(a) #未歸一化畫出的圖

draw(b) #歸一化之後畫出的圖

MPEG2網馬實驗

了解mpeg2網馬的工作原理。能分析簡單的網馬。用提供的工具生成mpeg2網馬。閱讀生成的網馬的源 熟悉其工作原理。執行網馬,觀察生成的效果。windows xp作業系統 mpeg 2 網馬生成工具 1 開啟控制台,進入虛擬環境。2 用網馬生成器生成網馬 3 閱讀木馬檔案 首先我們看muma.htm...

計網實驗 網路層實驗

arp是位址解析協議的簡稱,實際通訊過程中需要建立ip位址和硬體位址之間的對映關係,將ip位址解析成硬體位址的協議就稱為位址解析協議。使用arp的主機都有乙個arp快取區用來儲存對映關係。在同一網段通訊時,如果arp快取中沒有目的主機的硬體位址,則源主機傳送arp請求報文,目的主機對此報文作出應答。...

計網實驗 OSPF協議實驗

ospf協議概述及基本配置 ospf協議報文互動過程 ospf協議鏈路狀態描述 區域劃分及lsa種類 ospf協議路由的計算 ospf協議組網設計 ospf是乙個基於鏈路狀態 link state 的內部閘道器協議,核心思想 每一台路由器將其周邊的鏈路狀態描述出來,傳送給相鄰路由器,一段時間後,每台...