Encog3 2學習筆記(二)

2021-07-05 09:28:18 字數 4689 閱讀 6332

predict,從sample中分離出來的子專案,使用tanh函式作為啟用函式(預設,可以選擇sigmoid)

下圖為encog支援的各種啟用函式(好吧,高斯函式,不論是作為核函式還是正態分佈,**都能找到它)。

public 

static 

final 

string 

af_bipolar

=

"bipolar";

public 

static 

final 

string 

af_competitive

=

"comp";

public 

static 

final 

string 

af_gaussian

=

"gauss";

public 

static 

final 

string 

af_linear

=

"linear";

public 

static 

final 

string 

af_log

=

"log";

public 

static 

final 

string 

af_ramp

=

"ramp";

public 

static 

final 

string 

af_sigmoid

=

"sigmoid";

public 

static 

final 

string 

af_ssigmoid

=

"ssigmoid";

public 

static 

final 

string 

af_sin

=

"sin";

public 

static 

final 

string 

af_softmax

=

"softmax";

public 

static 

final 

string 

af_step

=

"step";

public 

static 

final 

string

af_tanh

=

"tanh";

從構建乙個空的神經網路開始,

encogutility.

******feedforward

(input_window

,predict_window

*2,

0,1,true);

其中,顯然input_window作為入參表達入參數量(也就是輸入層節點數),然後是隱藏層1節點數,隱藏層2節點數(如果為0,表示無此層),輸出層節點數,啟用函式型別(true表示sanh啟用函式,false表示sigmoid)。

在******feedforward

首先建立乙個pattern,用於記錄各層資料,

final 

feedforwardpattern 

pattern=newfeedforwardpattern();

之後由final 

basicnetwork 

network

(basicnetwork)

pattern

.generate();

執行建立神經網路。

在generate函式內開始按照節點建立各種basiclayer,注意這是乙個通用型別,可以是輸入層,隱藏層或者輸出層。建立完成後,

result

.getstructure().

finalizestructure();

進行層的管理,從注釋的表達上說,應該是為了構建乙個可動態增加修改層和節點數的神經網路,因此對諸多層進行了淺複製和構建了乙個flatnetwork,注意flatnetwork和basicnetwork沒有繼承派生關係。這個flat儲存於structure的flat。

flat是用於實際計算的神經網路,儲存了權重,偏置等量

隨後既是隨機各層引數result

.reset

();。值得一提的是,nguyenwidrowrandomizer這個類根據

double 

b

0.7d 

*math.

pow(

tocount,(

1d/fromcount))/

(high

-low);

計算出隨機數的範圍,而不再是傳統意義上的bp神經網路的-0.5到0.5的範圍。

同時,認定the bias neuron is always

the last neuron on a layer.也就是每一層都會設定乙個偏置神經元,這個神經元是所屬層最末(右,下,參考神經元整體影象)。

對於這種偏置神經元設定的範圍為-b到b,而其它節點都是0至b之間。、

疑問:final 

basicnetwork 

network

(basicnetwork)

pattern

.generate();

network

.reset();

generate內已經reset一次,為什麼還要reset一次?

在predict內依舊再次reset

temporalwindowarray 

temp=newtemporalwindowarray

(input_window

,predict_window

);

temp

.analyze(a

);returntemp

.process(a

);最終生成mldataset也就是最終的訓練樣本集。

process是較為重要的乙個過程,他包含了資料的整理,比如入參和出參的配對。

/**

*  process  the  array.

*@paramdata  the  array  to  process.

*@returna  neural  data  set  that  contains  the  time

-series. */

publicfinal

mldataset

process(finaldouble

data

)//顯然inputwindow決定了每個點用來訓練的樣本是從此點起向後inputwindow個點

// handle  predict  window

for

(intj=0

;j<

this.

predictwindow;j

++)//設定已知的值作為校驗字段

假設輸入視窗5,輸出視窗2

那麼,訓練樣本是從i開始5個資料,6-7個資料作為驗證樣本

final

mldatapair

pair

=new

basicmldatapair

(inputdata,

idealdata

);  //設定一組樣本和實際值

result

.add

(pair);

}return

result;

}

libusb win32學習筆記(二)

當完成配置工作後,就可以進行 的編寫 需要了解一些基本的usb協議的知識 對於乙個庫的使用,其幫助文件是非常重要的,可以去找libusb win32開發 文件 接下來分析一下使用bulk 進行資料傳輸的 編寫 時,首先要確定 idvendor 和idproduct 接著要確定 bulk 端點的輸入輸...

學習筆記32

今天繼續對第十二章進行學習 首先用 開啟檔案並取得工作表 對資料結構進行填充 最後將結果寫入檔案即可。首先需要呼叫openpyxl.workbook 函式。利用create sheet and remove sheet 方法可以在工作簿中新增或者刪除工作表。最後將值寫入單元格即可。此專案的思路是 1...

stm32學習筆記(二)按鍵實驗

本程式只供學習使用,未經作者許可,不得用於其它任何用途 alientek mini stm32開發板 按鍵輸入 驅動 正點原子 alientek 技術論壇 www.openedv.com 修改日期 2014 3 06 版本 v1.0 按鍵初始化函式 pa15和pc5 設定成輸入 void key i...