深度學習 遞迴網路

2021-07-25 13:55:27 字數 3506 閱讀 7682

先介紹乙個簡單的例子,放入字串的第乙個字元,讓遞迴網路複述出後面的字串,我們看看是如何工作的

public class 

basicrnnexample

// we need to use rnnoutputlayer for our rnn

rnnoutputlayer.builder outputlayerbuilder =

new

rnnoutputlayer.builder(lossfunction.

mcxent

);//配置rnn的輸出層,設定損失函式為交叉熵

// softmax normalizes the output neurons, the sum of all outputs is 1

// this is required for our samplefromdistribution-function

outputlayerbuilder.activation(

"softmax"

);//設定輸出層的啟用函式為softmax,為了使輸出概率和為1

outputlayerbuilder.nin(

hidden_layer_width

);//設定輸出層的輸入節點50

outputlayerbuilder.nout(learnstring_chars.size())

;//設定輸出層的輸出節點20

listbuilder.layer(

hidden_layer_cont

, outputlayerbuilder.build())

;//裝入網路配置列表末端

// finish builder

listbuilder.pretrain(

false

);//不進行預訓練

listbuilder.backprop(

true

);//使用反向傳播

// create network

multilayerconfiguration conf = listbuilder.build()

;//通過build方法變成多層配置,注意

multilayerconfiguration和

neuralnetconfiguration的關係

multilayernetwork net =

new

multilayernetwork(conf)

;//把配置轉入多層網路

net.init()

;//初始化網路

net.setlisteners(

new

scoreiterationlistener(1))

;//設定***,每次迭代列印score

/** create our training data

*/// create input and output arrays: sample_index, input_neuron,

// sequence_position

indarray input = nd4j.

zeros(1

, learnstring_chars_list

.size()

, learnstring

.length

);//建立全0輸入向量,1代表1維陣列,每個元素是乙個20*64的矩陣,20是字元計數,64是要學習的字串長度

indarray labels = nd4j.

zeros(1

, learnstring_chars_list

.size()

, learnstring

.length

);//建立全0標籤向量,1代表1維陣列,每個元素是乙個20*64的矩陣

// loop through our sample-sentence

int

samplepos =

0;//初始索引為0

for

(char

currentchar :

learnstring

) , 1)

;//new int

本身是乙個3個元素的陣列,元素分別是0,當前字元的在字元集合中的索引,自增位置,1代表置這個元素為1,putscalar就是把陣列位置索引的元素置為1

// output neuron for next-char is 1 at "samplepos"

labels.putscalar(

new int ,

1);//同理

new int

本身是乙個3個元素的陣列,元素分別是0,下乙個字元的在字元集合中的索引,自增位置,1代表置這個元素為1,putscalar就是把陣列位置索引的元素置為1

samplepos++

;//位置自增

} dataset trainingdata =

new

dataset(input

, labels)

;//由上面兩個陣列構成訓練資料,最終輸入資料有是乙個長度為20的陣列,有64組資料,這樣做的目的是保證每次只輸入乙個字元,其他字元都是0,然後順序的輸入其他字元,這也符合遞迴或者流式的思想,標籤一直都代表下乙個要輸入的字元來不斷矯正輸入的字元

// some epochs

for

(int

epoch = 0;

epoch <

100;

epoch++)

int

sampledcharacteridx =

findindexofhighestvalue

(outputprobdistribution)

;//找出陣列中的最大值索引

// print the chosen output

system.

out.print(

learnstring_chars_list

.get(sampledcharacteridx))

;//輸出**值

// use the last output as input

indarray nextinput = nd4j.

zeros

(learnstring_chars_list

.size())

;//建立儲存上次輸出的陣列

nextinput.putscalar(sampledcharacteridx, 1

);//把最大索引位置置為1

output = net.rnntimestep(nextinput)

;//以上次的輸出為輸入再執行乙個時間步

} system.

out.print("\n

");}

}private static int

findindexofhighestvalue

(double

distribution)

}return

maxvalueindex;}

}

深度學習 深度神經網路

神經網路是由乙個個神經元相互連線並按層次排列構成的,深度神經網路是有任意層的神經網路,這裡的深度是指層次的多,而不是神經元數量的多。有任意層,那麼就要有乙個迴圈來負責遍歷每一層進行計算。所以深度神經網路的計算形式,就必須要適應這個迴圈結構。我們先來說說神經元吧 對於多神經元神經網路,其實也是一樣的。...

深度學習 深度前饋網路

1 學習xor 2 基於梯度的學習 3 隱藏單元 4 架構設計 5 反向傳播 和其他微分演算法 6 歷史小計 reference 原文 joselynzhao.top 夏木青 深度前饋網路 資訊流過 x 的函式,流經用於 定義 f 的中間計算過程,最終到達輸出 y。前饋神經網路被稱作網路 netwo...

深度學習 深度網路 backbone 含義

q 深度學習的 中網路都會有backbone,這個是什麼意思呢?關注用的什麼backbone意義是什麼呢?比如某篇 backbone用的resnet,這代表什麼呢?a backbone這個單詞原意指的是人的脊梁骨,後來引申為支柱,核心的意思。在神經網路中,尤其是cv領域,一般先對影象進行特徵提取 常...