說到lstm,無可避免的首先要提到最簡單最原始的rnn。在這一部分,我的目標只是理解「迴圈神經網路」中的『迴圈』二字,不打算扔出任何公式,順便一提曾經困惑過我的keras中的輸入資料格式。
我們經常可以看到有人說,lstm適合時序序列,變長序列,尤其適合自然語言處理。那麼是什麼賦予它可以處理變長序列的能力呢? 其實,只要仔細研究上圖,相信每個人都能有乙個直觀的答案。
從左邊來看,rnn有兩個輸入,乙個是當前t時刻的輸入xt, 另乙個是乙個看似「本身「的輸入。
這樣看還不甚明了,再看右邊: 實際上右圖是左圖的乙個在時間序列上的展開,上乙個時刻輸出是這乙個時刻的輸入。值得注意的是,實際上,右圖上的所有神經元是同乙個神經元,也就是左圖,它們共享同樣的權值,只不過在每乙個時刻接受不同的輸入,再把輸出給下乙個時刻作為輸入。這就是儲存的過去的資訊。
理解到「迴圈」的含義即達到本章的目的了,公式和細節將在lstm中詳細敘述。
keras中文文件: (中文文件真的做的很贊,除了翻譯的內容,還加了額外的內容,例如tensor, batch size的概念幫助dl新手理解)
在所有的rnn中,包括******rnn, lstm, gru等等,輸入輸出資料格式如下:
輸入是乙個三維向量。samples即為資料的條數。難以理解的是timesteps 和input_dim. input_dim是資料的表示形式的維度,timestep則為總的時間步數。例如這樣乙個資料,總共100條句子,每個句子20個詞,每個詞都由乙個80維的向量表示。在rnn中,每乙個timestep的輸入是乙個詞(當然這不一定,你也可以調成兩個詞或者其他),從第一張rnn的圖來看,t0時刻是第乙個時間步,x0則為代表一條句子中第乙個詞的80維向量,t1是第二個時間步,x1表示句子中第二個詞的80維向量。。。所以,輸入資料的大小應當是(100, 20, 80)
Keras中LSTM引數的含義
units 是輸出的維度。在下圖中,中間的綠色cell 裡面有四個黃色小框,每乙個小黃框代表乙個前饋網路層,對,就是經典的神經網路的結構,num units就是這個層的隱藏神經元個數,就這麼簡單。其中1 2 4的啟用函式是 sigmoid,第三個的啟用函式是 tanh。參考 units還可以理解為 ...
keras使用LSTM生成文字
本文主要介紹使用lstm實現字元級文字生成。下面是示例 coding utf 8 in 1 import keras import numpy as np path keras.utils.get file nietzsche.txt origin text open path read lower...
keras 4 LSTM函式詳解
層數1,2,3,4 基本沒有看到過更多的了,大部分網路可能就是兩層雙向或者一層雙向即可 結點數 根據特徵維數和資料量 64,128,256,512,也是基本沒有看到過更多的,大部分網路就是128或者256 lstm層 keras.layers.recurrent.lstm units,activat...