小編寫這篇文章的一個主要目的,主要是給大家做一個詳細的介紹,介紹的內容主要是利用Python知識,利用Python去實現RNN與堆疊的RNN,具體的實例代碼,下面就給大家詳細的去做一個解答。
1、雙向RNN
雙向RNN(Bidirectional RNN)的結構如下圖所示。
雙向的RNN是同時考慮“過去”和“未來”的信息。上圖是一個序列長度為4的雙向RNN結構。
雙向RNN就像是我們做閱讀理解的時候從頭向后讀一遍文章,然后又從后往前讀一遍文章,然后再做題。有可能從后往前再讀一遍文章的時候會有新的不一樣的理解,最后模型可能會得到更好的結果。
2、堆疊的雙向RNN
堆疊的雙向RNN(Stacked Bidirectional RNN)的結構如上圖所示。上圖是一個堆疊了3個隱藏層的RNN網絡。
注意,這里的堆疊的雙向RNN并不是只有雙向的RNN才可以堆疊,其實任意的RNN都可以堆疊,如SimpleRNN、LSTM和GRU這些循環神經網絡也可以進行堆疊。
堆疊指的是在RNN的結構中疊加多層,類似于BP神經網絡中可以疊加多層,增加網絡的非線性。
3、雙向LSTM實現MNIST數據集分類
import tensorflow as tf from tensorflow.keras.models import Sequential from tensorflow.keras.layers import Dense from tensorflow.keras.layers import LSTM,Dropout,Bidirectional from tensorflow.keras.optimizers import Adam import matplotlib.pyplot as plt #載入數據集 mnist=tf.keras.datasets.mnist #載入數據,數據載入的時候就已經劃分好訓練集和測試集 #訓練集數據x_train的數據形狀為(60000,28,28) #訓練集標簽y_train的數據形狀為(60000) #測試集數據x_test的數據形狀為(10000,28,28) #測試集標簽y_test的數據形狀為(10000) (x_train,y_train),(x_test,y_test)=mnist.load_data() #對訓練集和測試集的數據進行歸一化處理,有助于提升模型訓練速度 x_train,x_test=x_train/255.0,x_test/255.0 #把訓練集和測試集的標簽轉為獨熱編碼 y_train=tf.keras.utils.to_categorical(y_train,num_classes=10) y_test=tf.keras.utils.to_categorical(y_test,num_classes=10) #數據大小-一行有28個像素 input_size=28 #序列長度-一共有28行 time_steps=28 #隱藏層memory block個數 cell_size=50 #創建模型 #循環神經網絡的數據輸入必須是3維數據 #數據格式為(數據數量,序列長度,數據大小) #載入的mnist數據的格式剛好符合要求 #注意這里的input_shape設置模型數據輸入時不需要設置數據的數量 model=Sequential([ Bidirectional(LSTM(units=cell_size,input_shape=(time_steps,input_size),return_sequences=True)), Dropout(0.2), Bidirectional(LSTM(cell_size)), Dropout(0.2), #50個memory block輸出的50個值跟輸出層10個神經元全連接 Dense(10,activation=tf.keras.activations.softmax) ]) #循環神經網絡的數據輸入必須是3維數據 #數據格式為(數據數量,序列長度,數據大小) #載入的mnist數據的格式剛好符合要求 #注意這里的input_shape設置模型數據輸入時不需要設置數據的數量 #model.add(LSTM( #units=cell_size, #input_shape=(time_steps,input_size), #)) #50個memory block輸出的50個值跟輸出層10個神經元全連接 #model.add(Dense(10,activation='softmax')) #定義優化器 adam=Adam(lr=1e-3) #定義優化器,loss function,訓練過程中計算準確率使用交叉熵損失函數 model.compile(optimizer=adam,loss='categorical_crossentropy',metrics=['accuracy']) #訓練模型 history=model.fit(x_train,y_train,batch_size=64,epochs=10,validation_data=(x_test,y_test)) #打印模型摘要 model.summary() loss=history.history['loss'] val_loss=history.history['val_loss'] accuracy=history.history['accuracy'] val_accuracy=history.history['val_accuracy'] #繪制loss曲線 plt.plot(loss,label='Training Loss') plt.plot(val_loss,label='Validation Loss') plt.title('Training and Validation Loss') plt.legend() plt.show() #繪制acc曲線 plt.plot(accuracy,label='Training accuracy') plt.plot(val_accuracy,label='Validation accuracy') plt.title('Training and Validation Loss') plt.legend() plt.show()
這個可能對文本數據比較容易處理,這里用這個模型有點勉強,只是簡單測試下。
模型摘要:
acc曲線:
loss曲線:
到此為止,這篇文章就給大家介紹完畢了,希望可以給大家帶來幫助。
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/128394.html
摘要:深度學習近年來在中廣泛使用,在機器閱讀理解領域也是如此,深度學習技術的引入使得機器閱讀理解能力在最近一年內有了大幅提高,本文對深度學習在機器閱讀理解領域的技術應用及其進展進行了歸納梳理。目前的各種閱讀理解任務中完形填空式任務是最常見的類型。 關于閱讀理解,相信大家都不陌生,我們接受的傳統語文教育中閱讀理解是非常常規的考試內容,一般形式就是給你一篇文章,然后針對這些文章提出一些問題,學生回答這...
摘要:通過將神經元的值設置為希望的模式來訓練網絡,之后可以計算權重。輸入神經元在完整網絡更新結束時變成輸出神經元。在某種程度上,這類似于峰值神經網絡,并不是所有的神經元始終都在發射并且點的生物合理性得分。 隨著新的神經網絡架構不時出現,很難跟蹤這些架構。知道所有縮寫(DCIGN,BiLSTM,DCGAN,任何人?)起初可能有點壓倒性。 所以我決定編寫一個包含許多這些體系結構的備忘單。這些大多...
閱讀 911·2023-01-14 11:38
閱讀 878·2023-01-14 11:04
閱讀 740·2023-01-14 10:48
閱讀 1982·2023-01-14 10:34
閱讀 942·2023-01-14 10:24
閱讀 819·2023-01-14 10:18
閱讀 499·2023-01-14 10:09
閱讀 572·2023-01-14 10:02