python中RNN和LSTM的基本介紹
1、RNN
簡(jiǎn)單的神經(jīng)網(wǎng)絡(luò)和卷積神經(jīng)網(wǎng)絡(luò)都有一個(gè)主要的特點(diǎn),那就是都不具備記憶能力,也就是說(shuō),它們都是分別處理每一個(gè)輸入,而不存在前、后兩個(gè)輸入之間的關(guān)系。例如,您需要處理數(shù)據(jù)點(diǎn)或時(shí)序,您需要同時(shí)向網(wǎng)絡(luò)顯示整個(gè)時(shí)序,也就是將時(shí)序轉(zhuǎn)換為單一數(shù)據(jù)點(diǎn)輸入。采用這種輸入方式的網(wǎng)絡(luò)叫做前向神經(jīng)網(wǎng)絡(luò)(feddforwardnetwork)。
為了使這個(gè)過(guò)程更加容易理解,我們用簡(jiǎn)單的循環(huán)邏輯來(lái)實(shí)現(xiàn)一個(gè)RNN的前向傳播。
#簡(jiǎn)單的RNN實(shí)現(xiàn)Numpy實(shí)現(xiàn)
importnumpyasnp
timesteps=100
input_feature=32
output_fearture=64
inputs=np.random.random((timesteps,input_feature))#生成100,32形狀的矩陣
print(inputs)
state_t=np.zeros((output_fearture,))#生成64個(gè)全為0的數(shù)
print(state_t)
w=np.random.random((output_fearture,input_feature))
u=np.random.random((output_fearture,output_fearture))
b=np.random.random((output_fearture,))
successive_outputs=[]
forinput_tininputs:
output_t=np.tanh(np.dot(w,input_t)+np.dot(u,state_t)+b)#np.dot表示數(shù)組點(diǎn)積
successive_outputs.append(output_t)
state_t=output_t
final_output_sequence=np.stack(successive_outputs,axis=0)
print(final_output_sequence)
2、LSTM
在理論上,RNN應(yīng)該能夠記住在過(guò)去的時(shí)間里看到過(guò)的信息,但是實(shí)際上它不可能學(xué)習(xí)長(zhǎng)期存在的信息,主要是由于梯度消失的問(wèn)題。因此研究人員設(shè)計(jì)了LSTM(longshort-termmemory),也就是所謂的長(zhǎng)短期記憶。
與RNN相比,LSTM多了一種跨域攜帶信息的多時(shí)間步法(細(xì)胞狀態(tài)C),這種步法類(lèi)似于傳送帶,它運(yùn)行方向與你所處理的序列方向平行,而序列中的信息可以隨時(shí)跳到傳送帶上,然后被傳送帶送到更遠(yuǎn)的時(shí)間步,必要時(shí)還能原封不動(dòng)地跳回來(lái)。那是LSTM的原理。
以上就是python中RNN和LSTM的基本介紹,希望能對(duì)大家有所幫助!更多Python學(xué)習(xí)教程請(qǐng)關(guān)注IT培訓(xùn)機(jī)構(gòu):千鋒教育。