TensorFlow2.1入门学习笔记(16)——实战使用RNN,LSTM,GRU实现股票预测

1 Embedding
独热码:数量大,过于稀疏,映射之间是独立的,没有表现出关联性 Embedding:一种单词编码方法,以低维向量实现了编码,这种编码通过神经网络训练优化,能表达出单词的相关性。
-
TF描述Embedding层
1 2 3 4
tf.keras.layers.Embedding(词汇表大小,编码维度) # 编码维度就是用几个数字表达一个单词 # 对1-100进行编码, [4] 编码为 [0.25, 0.1, 0.11] tf.keras.layers.Embedding(100, 3 )
-
入Embedding时, x_train维度:[送入样本数, 循环核时间展开步数]
2 RNN使用Embedding 编码,预测字母
|
|
- 运行结果
3 用RNN实现股票预测
- 数据源 使用tushare模块下载股票数据,TuShare是一个著名的免费、开源的python财经数据接口包。其官网主页为:TuShare -财经数据接口包。该接口包如今提供了大量的金融数据,涵盖了股票、基本面、宏观、新闻的等诸多类别数据(具体请自行查看官网),并还在不断更新中。TuShare可以基本满足量化初学者的回测需求
import tushare as ts import matplotlib.pyplot as plt
df1 = ts.get_k_data(‘600519’, ktype=‘D’, start=‘2010-06-22’, end=‘2020-06-22’) datapath1 = “./BSH600519.csv” df1.to_csv(datapath1)
代码
|
|
训练结果
4 用LSTM实现股票预测
传统的RNN网络可以通过记忆体实现短期记忆,进行连续数据的预测,但是当连续数据过长时,会使展开的时间步过长,在反向传播更新参数时,梯度要按时间步连续相乘会导致梯度消失。
-
LSTM 由Hochreiter & Schmidhuber 于1997年提出,通过门控单元改善了RNN长期依赖问题。 Sepp Hochreiter,Jurgen Schmidhuber.LONG SHORT-TERM MEMORY.Neural Computation,December 1997
-
LSTM计算过程:
输入门:$i_t = \sigma (W_i) \cdot [h_{t-1},x_t] + b_i$
遗忘门:$f_t = \sigma (W_f) \cdot [h_{t-1},x_t] + b_f$
输出门:$o_t = \sigma (W_o) \cdot [h_{t-1},x_t] + b_o$
细胞态(长期记忆):$C_t = f_t \cdot C_{t-1} + i_t\cdot \breve{C_t}$
记忆体(短期记忆):$h_t = o_t \cdot tanh(C_t)$
候选体(归纳出的新知识):$\breve{C_t} = tanh(W_c \cdot [h_{t-1}, x_t] + b_c)$
-
TF描述LSTM层:
1 2 3 4 5 6 7 8 9 10 11 12
tf.keras.layers.LSTM(记忆体个数,return_sequences=是否返回输出) # 参数 return_sequences=True 各时间步输出ht return_sequences=False 仅最后时间步输出ht(默认) # 例 model = tf.keras.Sequential([ LSTM(80, return_sequences=True), Dropout(0.2), LSTM(100), Dropout(0.2), Dense(1) ])
代码
|
|
训练结果
5 用GRU实现股票预测
GRU是由LSTM简化得到的
-
GRU由Cho等人于2014年提出,优化LSTM结构。 Kyunghyun Cho,Bart van Merrienboer,Caglar Gulcehre,Dzmitry Bahdanau,Fethi Bougares,HolgerSchwenk,Yoshua Bengio.Learning Phrase Representations using RNN Encoder–Decoder for Statistical Machine Translation.Computer ence, 2014.
-
GRU计算过程:
更新门:$z_t = \sigma(W_z \cdot [h_{t-1}, x_t])$
重置门:$r_t = \sigma(W_r \cdot [h_{t-1}, x_t])$
记忆体:$h_t = (1-z)\cdot h_{t-1} + z_t \cdot \breve{h_t}$
候选隐藏层:$\breve{h_t} = tanh(W \cdot [r_t \cdot h_{t-1}, x_t])$
-
TF描述GRU层:
1 2 3 4 5 6 7 8 9 10 11 12
tf.keras.layers.GRU(记忆体个数,return_sequences=是否返回输出) # 参数 return_sequences=True 各时间步输出ht return_sequences=False 仅最后时间步输出ht(默认) # 例 model = tf.keras.Sequential([ GRU(80, return_sequences=True), Dropout(0.2), GRU(100), Dropout(0.2), Dense(1) ])
代码
|
|
训练结果
- 文章作者:Ogo
- 文章链接:https://wyxogo.top/rnn2/
- 版权声明:本站所有文章除特别声明外,均采用 转载请注明来自