Python深度學習 學習筆記(十三)

2021-09-25 20:39:47 字數 2732 閱讀 7886

上一節,我們提到了rnn已經rnn在keras中最簡單的層******rnn。但******rnn由於過於簡化,沒有實用價值。

實際上,它不可以學到長期依賴。原因在於梯度消失問題,當運用比較多的非迴圈層時,而讓網變得無法訓練。同樣的問題其實也普遍發生在密集連線層。

今天介紹的lstm(long short-term memory)層,也是rnn層中的一種,這個演算法有hochreiter和 schmidhuber 在 1997 年開發,是二人研究梯度消失問題的重要成果。

簡單的來講,lstm比******rnn在內部迴圈中多了乙個ct值的傳遞。

這裡,附上偽**,lstm與******rnn的對比來方便理解:

#******rnn:

output_t = np.tanh(np.dot(w, input_t)

+ np.dot(u, state_t)

+ b)

state_t = output_t

#lstm

output_t = activation(dot(state_t,uo)

+ dot(input_t,wo)

+ dot(c_t,vo)

+ bo)

i_t = activation(dot(state_t, ui)

+ dot(input_t, wi)

+ bi)

f_t = activation(dot(state_t, uf)

+ dot(input_t, wf)

+ bf)

k_t = activation(dot(state_t, uk)

+ dot(input_t, wk)

+ bk)

c_t+

1= i_t * k_t + c_t * f_t

state_t = output_t

其中,i,f,k分別代表迴圈過程前面的層。將迴圈過程中不同的權重(w)和狀態權重(u)攜帶到後面的迴圈中,有效控制梯度消失問題。這裡貼上簡單的例子,理解lstm的實際運用:

from keras import layers

from keras import models

#處理資料

from keras.datasets import imdb

from keras.preprocessing import sequence

max_features =

10000

maxlen =

500# 在這麼多單詞之後截斷文字(這些單詞都

# 屬於前 max_features 個最常見的單詞)

batch_size =

32print

('loading data...'

)(input_train,y_train)

,(input_test,y_test)

= imdb.load_data(num_words=max_features)

print

(len

(input_train)

,'train sequence'

)print

(len

(input_test)

,'test sequence'

)print

('pad sequences (sample x time)'

)input_train = sequence.pad_sequences(input_train,maxlen=maxlen)

input_test = sequence.pad_sequences(input_test,maxlen=maxlen)

print

('input_train shape:'

,input_train.shape)

print

('input_test shape:'

,input_test.shape)

#構建模型

model = models.sequential(

)model.add(layers.embedding(max_features,32)

)# 32 維向量

model.add(layers.lstm(32)

)model.add(layers.dense(

1,activation=

'sigmoid'))

model.summary(

)#編譯模型

model.

compile

(optimizer=

'rmsprop'

, loss=

'binary_crossentropy'

, metrics=

['acc'])

#訓練模型

驗證精度達到了88%,還不錯,肯定比******rnn網路好多了,這主要是因為lstm受梯度消失問題的影響要小的多。

Python學習筆記(十)

mylab 專案實戰 1 在templates中乙個index.html我需要引入當前資料夾中的另乙個網頁,我直接在index的 中引入 html無效 最後,我在這個專案的主目錄下的urls中進行設定,可行 2 在呼叫網頁的時候,進行views設定,就已經把處理函式給選定了 直接在views,用re...

python學習筆記十

字典遍歷 集合函式 copy僅拷貝物件本身,而不對中的子物件進行拷貝,故對子物件進行修改也會隨著修改。dict1 dict2 dict1 dict3 dict1.copy dict1 user root dict1 num remove 1 print dict1 print dict2 print...

Python 深度學習 學習筆記(十四)

用一維卷積神經網路處理序列 今天,我們將學習到用一維卷積理解序列資料。一維卷積的卷積核是 n,1 的形狀。這裡需要注意的一點是,我們在二維卷積是大部分時間用到的卷積核為 3,3 3x3 9 在一維卷積層,卷積視窗的大小可以提公升到 7,或 9,一維卷積處理的思路與二維的大致相同,這裡直接貼上 例項 ...