序列模型(Sequence Model)
基于文本內(nèi)容及其前后信息進行預測
基于目標不同時刻狀態(tài)進行預測
基于數(shù)據(jù)歷史信息進行預測
序列模型:輸入或者輸出中包含有序列數(shù)據(jù)的模型
突出數(shù)據(jù)的前后序列關系
兩大特點:
- 輸入(輸出)元素之間是具有順序關系。不同的順序,得到的結(jié)果應該是不同的,比如“不吃飯”和“吃飯不”這兩個短語意思是不同的
- 輸入輸出不定長。比如文章生成、聊天機器人
循環(huán)神經(jīng)網(wǎng)絡(RNN)
前部序列的信息經(jīng)處理后,作為輸入信息傳遞到后部序列
任務:
自動尋找語句中的人名:
詞匯數(shù)值化:建立一個詞匯-數(shù)值一一對應的字典,然后把輸入詞匯轉(zhuǎn)化數(shù)值矩陣
字典生成的另外一種方式
不同類型的RNN模型
RNN常見結(jié)構
多輸入對多輸出、維度相同RNN結(jié)構
應用:特定信息識別
應用:情感識別
舉例:I feel happy watching the movie
判斷:positive
應用:序列數(shù)據(jù)生成器
舉例:文章生成、音樂生成
應用:語言翻譯
普通RNN結(jié)構缺陷
- 前部序列信息在傳遞到后部的同時,信息權重下降,導致重要信息丟失
- 求解過程中梯度消失
需要提高前部特定信息的決策權重
長短期記憶網(wǎng)絡(LSTM)
- 忘記門:選擇性丟棄a與x中不重要的信息
- 更新門:確定給記憶細胞添加哪些信息
- 輸出門:篩選需要輸出的信息
- 在網(wǎng)絡結(jié)構很深(很多層)的情況下,也能保留重要信息
- 解決了普通RNN求解過程中的梯度消失問題
雙向循環(huán)神經(jīng)網(wǎng)絡(BRNN)
做判斷時,把后部序列信息也考慮
深層循環(huán)神經(jīng)網(wǎng)絡(DRNN)
解決更復雜的序列任務,可以把單層RNN疊起來或者在輸出前和普通mlp結(jié)構結(jié)合使用
實戰(zhàn)準備
實戰(zhàn)一:RNN實現(xiàn)股價預測
提取序列數(shù)據(jù):
def extract_data(data,slide):
x=[]
y=[]
for i in range(len(data)-slide):
x.append([a for a in data[i:i+slide]])
y.append(data[i+slide])
x=np.array(x)
x=x.reshape(x.shape[0],x.shape[1],1)
return x,y
建立普通RNN模型:
from keras.models import Sequential
from keras.layers import Dense,SimpleRNN
model = Sequential()
#增加一個RNN層
model.add(SimpleRNN(units=5,input_shape=(X.shape[1],X.shape[2]),activation='relu'))
#增加輸出層
model.add(Dense(units=1,activation='linear'))
model.compile(optimizer='adam',loss='mean_squared_error')
實戰(zhàn)二:LSTM自動生成文本
文本加載:文章來源:http://www.zghlxwxcb.cn/news/detail-819773.html
rew_data = open('flare').read()
# 移除換行字符'\n'
data = rew_data.replace('\n','').replace('\r','')
字符字典建立:文章來源地址http://www.zghlxwxcb.cn/news/detail-819773.html
#字符去重
letters = list(set(data))
#建立數(shù)字到字符的索引字典
int_to_char = {
a:b for a,b in enumerate(letters)}
#建立字符到數(shù)字的索引字典
char_to_int = {
b:a for a,b
到了這里,關于深度學習-循環(huán)神經(jīng)網(wǎng)絡-RNN實現(xiàn)股價預測-LSTM自動生成文本的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網(wǎng)!