神經網路 ANN(二)

2021-07-26 11:31:08 字數 3970 閱讀 1556

最簡單的ann只是由神經元構成的

那麼我們先來定義乙個神經元類networknode

屬性:

public

static

final

int type_input = 0;//輸入層

public

static

final

int type_hidden = 1;//隱藏層

public

static

final

int type_output = 2;//輸出層

//節點型別

private

int type;

//節點誤差

private

float error;

//節點值

private

float value;

方法:

//前向傳播,使用啟用函式

private

float

forwardpropagate(float x)

return

0; }

//設定節點值

public

void

float

setvalue(float value)

再來定義神經網路類

private

int minputcount; //輸入層節點個數

private

int mhiddencount;//隱藏層節點個數

private

int moutputcount;//輸出層節點個數

int i;

private listminputnodes; //輸入層

private listmhiddennodes;//隱藏層

private listmoutputnodes;//輸出層

private

float minputhidden_weight; //輸入層->隱藏層 權重

private

float minputhidden_weight_delta;//輸入層->隱藏層 權重動量

private

float mhiddenoutput_weight; //隱藏層->輸出層 權重

private

float mhiddenoutput_weight_deta;//隱藏層->輸出層 權重動量

public

float mobp=(float) 0.25;//動量係數

public

float rate=(float) 0.22;//學習係數

public

bpnn(int inputcount,int hiddencount,int outputcount)

/*** 更新權重,用動量法調整

* 也可以用梯度下降法調整:每個權重的梯度 = 與其相連的前一層節點的輸出 * 與其相連的後一層的反向傳播的輸出

*/private

void

updateweights()}}

//輸入層<-隱藏層

for(int i=0;i//對每乙個輸入層節點

for(int j=0;j//對應連線所有隱藏層

minputhidden_weight_delta[i][j]=

mobp*minputhidden_weight_delta[i][j]+

rate*mhiddennodes.get(j).geterror()//隱藏層的誤差

*minputnodes.get(i).getvalue();//輸入層的值

minputhidden_weight[i][j] += minputhidden_weight_delta[i][j];

if(i==minputcount-1)}}

}/**

* 前向傳播

*@param list 輸入的列表

*/private

void

forward(listtrainlist)

//輸出層

for(int k=0;k//對每乙個輸出層的節點k

float sum=0;//初始化和

for(int j=0;j//使該節點k接受隱藏層所有節點的輸出

sum += mhiddenoutput_weight[j][k] //求和(接受刺激)

* mhiddennodes.get(j).getvalue();

moutputnodes.get(k).setvalue(sum);//將和作為輸入**化刺激)}}

/*** 反向傳播

*@param targetlist

*/private

void

backward(listtargetlist)

//隱藏層

for(int j=0;jfloat coefficient=0; //係數coefficient

float hiddennodevalue=mhiddennodes.get(j).getvalue();

for(int k=0;kfloat outputnodeerror=moutputnodes.get(k).geterror();

coefficient=hiddennodevalue * outputnodeerror;//+

}mhiddennodes.get(j).seterror(

hiddennodevalue * (1-hiddennodevalue) * coefficient);}

//輸入層

for(int i=0;i0);

}updateweights();

}/**

* 訓練

*@param trainnodes訓練集

*@param times訓練次數

*/public

void

train(listtrainnodes,int times)

public

float answer(datanode datanode)

使用

public

static

void

main(string args) throws exception,,,};

float target =new

float,,,};

listtrainnodes=new arraylist();

for(int i=0,j=0;inew datanode(inputdata[i], target[j])); //封裝資料

//訓練神經網路(用trainnodes訓練50000次)

bpnn.train(trainnodes, 50000);

//原樣本檢測

for(int k=0;kfloat input=inputdata[k];

float expectoutput=target[k];

float bpnn_answer=bpnn.answer(trainnodes.get(k));

system.out.println(arrays.tostring(input)+"-"+

arrays.tostring(expectoutput)+"---"+

arrays.tostring(bpnn_answer));

}//實踐

datanode question=new datanode(new

float, new

float);

system.out.println(arrays.tostring(new

float)+"-"+ //需要分類的點

arrays.tostring(new

float)+"---"+ //真實結果

arrays.tostring(bpnn.answer(question))); //神經網路的結果

}

神經網路 ANN(一)

神經網路 ann 新年啦!先給自己乙個小小的改變,比如寫一篇部落格。再給自己乙個小目標,比如3天內徒手寫個ann 所以,以下內容是在3天的時間內學到的,未免有不足之處,望指教。ann不是一下子就可以被發明出來的,期間經過了幾代人的努力才慢慢成型 參考 從單個神經元講起。乙個神經元其實很笨,它可以有多...

人工神經網路(ANN)

參考資料 從函式上來看,神經網路是回歸方程的級聯疊加,用來逼近目標函式的,本質是一種模擬特徵與目標之間的真實關係函式的模型 乙個有向拓撲,每層有若干節點,節點間有邊,邊上有權值。輸入層隱藏層 多層 後層是前層各節點值的線性組合的函式,即y f x0 w1x1 w2x2 wnxn 線性組合的係數就是邊...

人工神經網路ANN

一 基本概念 ann artificial neural network前饋神經網路的縮寫 二 模型構建 2.1 神經元 2.2 啟用函式 意義 啟用函式是用來讓給神經網路加入非線性因素的,因為線性模型的表達能力不夠。如果沒有啟用函式,那麼該網路僅能表達線性對映,此時即便有再多的隱藏層,其整個網路跟...