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