本文已参与「新人创作礼」活动, 一起开启掘金创作之路。
👉引言💎
铭记于心 | ||
---|---|---|
🎉✨🎉我唯一知道的,便是我一无所知🎉✨🎉 |
学习的最大理由是想摆脱平庸,早一天就多一份人生的精彩;迟一天就多一天平庸的困扰。
热爱写作,愿意让自己成为更好的人……
……
【深度学习实践(三)】RNN实现股票预测
1 RNN是什么
1.1 RNN的基本概念
RNN是一个不断循环的神经网络,它在循环的过程当中是具有记忆性的,可以根据前面的输入状态循环对模型进行适当的调整
-
比如时序神经网络:
处理“具有时序关系的输入序列”。也就是说,一个输入对应的输出,还取决于其“上文”的应用场合,如文字分类,自然语言处理
*
1.2 RNN的应用场景
RNN循环神经网络的应用范围非常广泛,举出部分例子:
-
Many To One
-
情感分析。输入一段评论,输出该段评论是好评还是差评。
-
关键信息提取。输入一篇文章,输出该文章中的关键信息。
-
-
Many To Many
-
语音识别。输入一段语音,输出对应的文字。
-
语言翻译。输入一段某国的文字或语音,输出一段另一个国家的对应意思的文字或语音。
-
聊天机器人。输入一句话,输出回答。
-
-
其他
-
句子文法结果分析。输入一个句子,输出该句子的文法结构。
-
句子自编码
-
2 前期准备
-
设置GPU
(模型的训练通常需要加工处理大量数据,这时候GPU的强大算力就体现出来了,一块好的GPU就像一个好鼎,就能练出来更好的丹药)这里使用TensorFlow深度学习框架,故使用以下方法进行GPU的配置
import tensorflow as tf gpus = tf.config.list_physical_devices("GPU")
-
数据预处理
将加载好的数据进行预处理
-
加载数据,将数据集加载到内存中
-
用平均值或者0代替空值,奇异值;
-
归一化,消去量纲影响等
-
3 模型训练与预测
-
神经网络程序大概分为如下几个步骤:
-
选择模型
-
构建网络层
-
编译
-
训练
-
预测
-
3.1 构建模型
model = tf.keras.Sequential([
SimpleRNN(100, return_sequences=True), #布尔值。是返回输出序列中的最后一个输出,还是全部序列。
Dropout(0.1), #防止过拟合
SimpleRNN(100),
Dropout(0.1),
Dense(1)
])
3.2 激活模型
model.compile(optimizer=tf.keras.optimizers.Adam(0.001),
loss='mean_squared_error') # 损失函数用均方误差
3.3 训练模型
history = model.fit(x_train, y_train,
batch_size=64,
epochs=20,
validation_data=(x_test, y_test),
validation_freq=1)
model.summary()
-
预测
predicted_stock_price = model.predict(x_test) predicted_stock_price = sc.inverse_transform(predicted_stock_price) real_stock_price = sc.inverse_transform(test_set[60:])
-
评估
""" MSE :均方误差 -----> 预测值减真实值求平方后求均值 RMSE :均方根误差 -----> 对均方误差开方 MAE :平均绝对误差-----> 预测值减真实值求绝对值后求均值 R2 :决定系数,可以简单理解为反映模型拟合优度的重要的统计量 详细介绍可以参考文章:https://blog.csdn.net/qq_38251616/article/details/107997435 """ MSE = metrics.mean_squared_error(predicted_stock_price, real_stock_price) RMSE = metrics.mean_squared_error(predicted_stock_price, real_stock_price)**0.5 MAE = metrics.mean_absolute_error(predicted_stock_price, real_stock_price) R2 = metrics.r2_score(predicted_stock_price, real_stock_price) print('均方误差: %.5f' % MSE) print('均方根误差: %.5f' % RMSE) print('平均绝对误差: %.5f' % MAE) print('R2: %.5f' % R2)
🌹写在最后💖:
路漫漫其修远兮,吾将上下而求索!伙伴们,再见!🌹🌹🌹