神經網路系列講解之離散型Hopfield網路

2021-08-03 20:17:54 字數 3402 閱讀 4348

hopfield網路及學習演算法最初是由美國物理學家j.j hopfield於2023年首先提出的,曾經為人工神經網路的發展程序開闢了新的研究途徑。它利用與階層型神經網路不同的結構特徵和學習方法,模擬生物神經網路的記憶機理,獲得了令人滿意的結果。

hopf

ield最早提出的網路是二值神經網路,神經元的輸出只取1和0,所以,也稱離散hopfield神經網路(discrete hopfield neural network,dhnn)。在離散hopfield網路中,所採用的神經元是二值神經元,因此,所輸出的離散值1和0分別表示神經元處於啟用和抑制狀 態。

離散型hopfield神經網路的結構如下圖所示。

從dhnn的結構可以看出:它是一種多輸入、含有閾值的二值非線性動態系統。在動態系統中,平衡穩定狀態可以理解為系統某種形式的能量函式在系統運動過程 中,其能量值不斷減小,最後處於最小值。coben和grossberg在2023年給出了關於hopfield網路穩定的充分條件,他們指出:如果 hopfield網路的權係數矩陣是乙個對稱矩陣,並且對角線元素為0,則這個網路是穩定的。應該指出,這只是hopfield網路穩定的充分條件,而不 是必要條件。在實際中有很多穩定的hopfield網路,但是它們並不滿足權係數矩陣 是對稱矩陣這一條件。

第二部分 工具箱講解

hopfield神經網路工具箱主要包括newhop和sim函式。

1 newhop

函式功能:建立乙個離散型hopfield網路。

呼叫格式:net=newhop(t);

t:具有q個目標向量的r*q矩陣(元素必須為-1或1);

net:生成的神經網路,具有在t中的向量上穩定的點。

2 sim

函式功能:對訓練好的神經網路進行**。

呼叫格式:[y,af,e,perf] = sim(net,p,ai,t)

[y,af,e,perf] = sim(net,,ai,t)

p,q:測試向量的個數;

ai:初始的層延時,預設為0;

t:測試向量;

ts:測試的步數;

y:網路的輸出向量;

af:訓練終止時的層延遲狀態;

e:誤差向量;

perf:網路的效能。

說明:函式中用到的引數採取了兩種不同的形式進行表示:矩陣和元胞陣列。矩陣的形式只用於**的時間步長ts=1的場合,元胞陣列形式常用於一些沒有輸入訊號的神經網路。

第三部分 程式示範

% ------------------------------number array---------------------------------

one=[-1 -1 -1 -1 -1 -1 -1 -1 -1 -1;...

-1 -1 -1 -1 1 1 -1 -1 -1 -1;-1 -1 -1 -1 1 1 -1 -1 -1 -1;...

-1 -1 -1 -1 1 1 -1 -1 -1 -1;-1 -1 -1 -1 1 1 -1 -1 -1 -1;...

-1 -1 -1 -1 1 1 -1 -1 -1 -1;-1 -1 -1 -1 1 1 -1 -1 -1 -1;...

-1 -1 -1 -1 1 1 -1 -1 -1 -1;-1 -1 -1 -1 1 1 -1 -1 -1 -1;...

-1 -1 -1 -1 1 1 -1 -1 -1 -1;-1 -1 -1 -1 1 1 -1 -1 -1 -1;...

-1 -1 -1 -1 -1 -1 -1 -1 -1 -1];

two=[-1 -1 -1 -1 -1 -1 -1 -1 -1 -1;...

-1 1 1 1 1 1 1 1 1 -1;-1 1 1 1 1 1 1 1 1 -1;...

-1 -1 -1 -1 -1 -1 -1 1 1 -1;-1 -1 -1 -1 -1 -1 -1 1 1 -1;...

-1 1 1 1 1 1 1 1 1 -1;-1 1 1 1 1 1 1 1 1 -1;...

-1 1 1 -1 -1 -1 -1 -1 -1 -1;-1 1 1 -1 -1 -1 -1 -1 -1 -1;...

-1 1 1 1 1 1 1 1 1 -1;-1 1 1 1 1 1 1 1 1 -1;...

-1 -1 -1 -1 -1 -1 -1 -1 -1 -1];

% --------------------------plot standard number figure--------------

subplot(2,3,1)

imshow(imresize(one,20))

title('standard number')

subplot(2,3,4)

imshow(imresize(two,20))

title('standard number')

% ---------------------------creat hopfield net---------------------

t=[one;two]';

net=newhop(t);

% --------------------------generate rand noise------------------

for i=2:11

for j=2:9

a=rand;

if a<=0.1

one(i,j)=-one(i,j);

two(i,j)=-two(i,j);

end end

endnoise_one=one

noise_two=two

% -------------------------plot noise figure----------------------------

subplot(2,3,2)

imshow(imresize(noise_one,20))

title('noise number')

subplot(2,3,5)

imshow(imresize(noise_two,20))

title('noise number')

% ------------------------plot identify figure---------------------------

noise1=;

tu1=sim(net,,{},noise1);

tu1'

subplot(2,3,3)

imshow(imresize(tu1',20))

title('identify number')

noise2=;

tu2=sim(net,,{},noise2);

tu2'

subplot(2,3,6)

imshow(imresize(tu2',20))

title('identify number')

神經網路學習之 Hopfield神經網路

1982年,美國加州理工學院的優秀物理學家hopfield提出了hopfield神經網路。hopfield神經網路引用了物理力學的分析方法,把網路作為一種動態系統並研究這種網路動態系統的穩定性。dhnn 離散型hopfield神經網路 這是一種單層全反饋網路,共有n個神經元。其特點是任一神經元的輸出...

人工神經網路之自適應神經網路

今天完成了普通自適應神經網路的設計與開發,設計類圖如下 自適應人工神經網路主要是用來處理聚類問題,即通過 勝者為王 的競爭機制把要分類樣本的中心儲存到競爭層神經元的網路權值之中。演示程式 隨機取兩個區域的點的集合,我們把其分為兩類,最後要得到的結果是經過網路學習,網路的權值儲存了這兩類樣本的資料中心...

神經網路的損失函式講解

在應用python進行神經網路訓練時,我們需要提供神經網路。如keras中,定義 在深度學習中。損失函式是用來衡量一組引數好壞的函式,其衡量方式是比較網路輸出和真實輸出的差異。損失函式有很多別名 價值函式,目標函式,誤差函式 損失函式並不使用測試資料來衡量網路的效能,損失函式用來指導訓練過程,使得網...