深度学习-[源码+数据集]基于LSTM神经网络黄金价格预测实战

简介: 深度学习-[源码+数据集]基于LSTM神经网络黄金价格预测实战

循环神经网络(Recurrent Neural Networks,简称RNNs)是一类用于处理序列数据的神经网络。与传统的神经网络(如全连接神经网络或卷积神经网络)不同,RNNs具有记忆能力,能够捕获序列数据中的时间依赖性和模式。这使得RNNs在自然语言处理、语音识别、时间序列预测等领域具有广泛的应用。

一、RNNs的基本结构

RNNs的基本结构包括输入层、隐藏层和输出层。其中,隐藏层是RNNs的核心部分,它通过循环的方式连接,使得每个时间步的隐藏层都能接收上一时间步的隐藏层状态作为输入。这种结构使得RNNs能够捕获序列数据中的时间依赖性。

二、RNNs的工作原理

  1. 输入层:接收当前时间步的输入数据(如一个单词、一个时间点的观测值等)。
  2. 隐藏层:根据当前时间步的输入数据和上一时间步的隐藏层状态,计算当前时间步的隐藏层状态。这个状态包含了从序列开始到当前时间步的所有信息。隐藏层状态的计算通常使用非线性激活函数(如tanh或ReLU)进行。
  3. 输出层:根据当前时间步的隐藏层状态,计算当前时间步的输出。输出层可以是一个简单的全连接层,也可以是更复杂的结构(如softmax层用于分类任务)。
  4. 循环连接:隐藏层的状态通过循环连接传递给下一个时间步的隐藏层。这种循环连接使得RNNs能够捕获序列数据中的时间依赖性。

三、RNNs的变种

由于RNNs在处理长序列时存在梯度消失和梯度爆炸的问题,研究者们提出了许多RNNs的变种来改进这些问题,包括:

  1. 长短期记忆网络(Long Short-Term Memory,LSTM):通过引入门控机制(如输入门、遗忘门和输出门)来控制信息的传递和遗忘,从而有效地解决了梯度消失和梯度爆炸的问题。
  2. 门控循环单元(Gated Recurrent Unit,GRU):GRU是LSTM的一种简化版本,它合并了LSTM中的遗忘门和输入门,使得模型结构更加简单,但性能与LSTM相当。
  3. 双向循环神经网络(Bidirectional RNNs):双向RNNs同时考虑序列的前向和后向信息,从而能够捕获更丰富的上下文信息。

四、RNNs的应用

RNNs在自然语言处理、语音识别、时间序列预测等领域具有广泛的应用。例如,在机器翻译任务中,RNNs可以将一种语言的句子编码为向量表示,然后解码为另一种语言的句子;在语音识别任务中,RNNs可以将音频信号转换为文本序列;在时间序列预测任务中,RNNs可以利用历史数据来预测未来的趋势。

案例代码实现:

模型训练:

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from sklearn.preprocessing import MinMaxScaler
from keras.layers import Dense,LSTM
import keras
 
#解决中文显示问题
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False
 
#加载数据
dataset = pd.read_csv("LBMA-GOLD.csv",index_col=[0])   #将第一列作为索引列和标题列
#print(dataset)
 
#设置训练集的长度
training_len = 1056
 
#获取训练集
training_set = dataset.iloc[0:training_len, [0]]
 
#获取测试集数据
test_set = dataset.iloc[training_len:, [0]]
#print(test_set)
#对数据集进行归一化
sc = MinMaxScaler(feature_range=(0,1))
train_set_scaled = sc.fit_transform(training_set)
test_set = sc.fit_transform(test_set)
 
#设置训练集特征和训练集标签
x_train = []
y_train = []
 
#设置测试集特征和训练集标签
x_test = []
y_test = []
 
#利用for循环进行训练集特征和标签的制作,提取数据中连练五天作为特征
for i in range(5,len(train_set_scaled)):
    x_train.append(train_set_scaled[i-5:i,0])
    y_train.append(train_set_scaled[i,0])
 
#将训练集用list转换为array格式
x_train,y_train = np.array(x_train),np.array(y_train)
 
# 使x_train符合输入要求:[送入样本数, 循环核时间展开步数, 每个时间步输入特征个数]。
# 此处整个数据集送入,送入样本数为x_train.shape[0]即训练数据的样本个数; 循环核时间展开步数定位5
x_train = np.reshape(x_train,(x_train.shape[0],5,1))
 
#print(x_train.shape)
 
# 同理划分测试集数据
for i in range(5, len(test_set)):
    x_test.append(test_set[i - 5:i, 0])
    y_test.append(test_set[i, 0])
 
 
# 测试集变array并reshape为符合要求:[送入样本数, 循环核时间展开步数, 每个时间步输入特征个数]
x_test, y_test = np.array(x_test), np.array(y_test)
x_test = np.reshape(x_test, (x_test.shape[0], 5, 1))
 
#print(x_test.shape)
 
 
# # 搭建神经网络模型
model = keras.Sequential()
model.add(LSTM(80, return_sequences=True, activation="relu"))
model.add(LSTM(100, return_sequences=False, activation="relu"))
model.add(Dense(10, activation="relu"))
model.add(Dense(1))
 
 
# 对模型进行编译,选用学习率为0.01
model.compile(loss='mse', optimizer=keras.optimizers.Adam(0.01))
 
# 将训练集和测试集放入网络进行训练,每批次送入的数据为32个数据,一共训练50轮,将测试集样本放入到神经网络中测试其验证集的loss值
history = model.fit(x_train, y_train, batch_size=32, epochs=100, validation_data=(x_test, y_test))
model.save('model.h5')
 
 
 
# 绘制训练集和测试集的loss值对比图
plt.plot(history.history['loss'], label='train')
plt.plot(history.history['val_loss'], label='val')
plt.title("LSTM神经网络loss值")
plt.legend()
plt.show()

数据测试:

# 导入库
import pandas as pd
import numpy as np
import matplotlib.pyplot
from sklearn.preprocessing import MinMaxScaler
from sklearn.metrics import mean_squared_error
from math import sqrt
from keras.models import load_model
import matplotlib.pyplot as plt
 
# 解决中文显示问题
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False
 
# 加载历史数据文件
dataset = pd.read_csv('LBMA-GOLD.csv', index_col='Date')
# print(dataset)
 
# 设置训练集的长度
training_len = 1256 -200
 
 
# 获取测试集数据
test_set = dataset.iloc[training_len:, [0]]
 
# 将数据集进行归一化,方便神经网络的训练
sc = MinMaxScaler(feature_range=(0, 1))
test_set = sc.fit_transform(test_set)
 
 
# 设置放置测试数据特征和测试数据标签的列表
x_test = []
y_test = []
 
 
 
# 同理划分测试集数据
for i in range(5, len(test_set)):
    x_test.append(test_set[i - 5:i, 0])
    y_test.append(test_set[i, 0])
 
 
# 测试集变array并reshape为符合要求:[送入样本数, 循环核时间展开步数, 每个时间步输入特征个数]
x_test, y_test = np.array(x_test), np.array(y_test)
x_test = np.reshape(x_test, (x_test.shape[0], 5, 1))
 
# 导入模型
model = load_model('model.h5')
 
 
# 利用模型进行测试
predicted = model.predict(x_test)
# print(predicted.shape)
 
# 进行预测值的反归一化
prediction = sc.inverse_transform(predicted)
# print(prediction)
 
# 对测试集的标签进行反归一化
 
real = sc.inverse_transform(test_set[5:])
# print(real)
 
 
# 打印模型的评价指标
rmse = sqrt(mean_squared_error(prediction, real))
mape = np.mean(np.abs((real-prediction)/prediction))
print('rmse', rmse)
print('mape', mape)
 
# 绘制真实值和预测值的对比
plt.plot(real, label='真实值')
plt.plot(prediction, label='预测值')
plt.title("基于LSTM神经网络的黄金价格预测")
plt.legend()
plt.show()

预测结果:

五,相关作品展示

基于Java开发、Python开发、PHP开发、C#开发等相关语言开发的实战项目

基于Nodejs、Vue等前端技术开发的前端实战项目

基于微信小程序和安卓APP应用开发的相关作品

基于51单片机等嵌入式物联网开发应用

基于各类算法实现的AI智能应用

基于大数据实现的各类数据管理和推荐系统

相关文章
|
5月前
|
机器学习/深度学习 人工智能 算法
猫狗宠物识别系统Python+TensorFlow+人工智能+深度学习+卷积网络算法
宠物识别系统使用Python和TensorFlow搭建卷积神经网络,基于37种常见猫狗数据集训练高精度模型,并保存为h5格式。通过Django框架搭建Web平台,用户上传宠物图片即可识别其名称,提供便捷的宠物识别服务。
586 55
|
4月前
|
机器学习/深度学习 人工智能 算法
基于Python深度学习的眼疾识别系统实现~人工智能+卷积网络算法
眼疾识别系统,本系统使用Python作为主要开发语言,基于TensorFlow搭建卷积神经网络算法,并收集了4种常见的眼疾图像数据集(白内障、糖尿病性视网膜病变、青光眼和正常眼睛) 再使用通过搭建的算法模型对数据集进行训练得到一个识别精度较高的模型,然后保存为为本地h5格式文件。最后使用Django框架搭建了一个Web网页平台可视化操作界面,实现用户上传一张眼疾图片识别其名称。
328 5
基于Python深度学习的眼疾识别系统实现~人工智能+卷积网络算法
|
3月前
|
机器学习/深度学习 数据可视化 算法
PyTorch生态系统中的连续深度学习:使用Torchdyn实现连续时间神经网络
神经常微分方程(Neural ODEs)是深度学习领域的创新模型,将神经网络的离散变换扩展为连续时间动力系统。本文基于Torchdyn库介绍Neural ODE的实现与训练方法,涵盖数据集构建、模型构建、基于PyTorch Lightning的训练及实验结果可视化等内容。Torchdyn支持多种数值求解算法和高级特性,适用于生成模型、时间序列分析等领域。
241 77
PyTorch生态系统中的连续深度学习:使用Torchdyn实现连续时间神经网络
|
27天前
|
机器学习/深度学习 人工智能 运维
AI“捕风捉影”:深度学习如何让网络事件检测更智能?
AI“捕风捉影”:深度学习如何让网络事件检测更智能?
51 8
|
2月前
|
机器学习/深度学习 数据采集 算法
基于MobileNet深度学习网络的MQAM调制类型识别matlab仿真
本项目基于Matlab2022a实现MQAM调制类型识别,使用MobileNet深度学习网络。完整程序运行效果无水印,核心代码含详细中文注释和操作视频。MQAM调制在无线通信中至关重要,MobileNet以其轻量化、高效性适合资源受限环境。通过数据预处理、网络训练与优化,确保高识别准确率并降低计算复杂度,为频谱监测、信号解调等提供支持。
|
2月前
|
机器学习/深度学习 人工智能 算法
基于Python深度学习的【害虫识别】系统~卷积神经网络+TensorFlow+图像识别+人工智能
害虫识别系统,本系统使用Python作为主要开发语言,基于TensorFlow搭建卷积神经网络算法,并收集了12种常见的害虫种类数据集【"蚂蚁(ants)", "蜜蜂(bees)", "甲虫(beetle)", "毛虫(catterpillar)", "蚯蚓(earthworms)", "蜚蠊(earwig)", "蚱蜢(grasshopper)", "飞蛾(moth)", "鼻涕虫(slug)", "蜗牛(snail)", "黄蜂(wasp)", "象鼻虫(weevil)"】 再使用通过搭建的算法模型对数据集进行训练得到一个识别精度较高的模型,然后保存为为本地h5格式文件。最后使用Djan
163 1
基于Python深度学习的【害虫识别】系统~卷积神经网络+TensorFlow+图像识别+人工智能
|
2月前
|
JSON 前端开发 JavaScript
HarmonyOS NEXT 实战系列10-网络通信
本文介绍了网络通信相关知识,包括HTTP协议的工作原理、鸿蒙系统中HTTP模块的使用方法、Promise异步操作处理机制及async/await语法糖的应用,以及JSON数据格式的语法规则与转换方法。重点讲解了HTTP请求响应流程、鸿蒙开发中的网络权限申请与代码实现、Promise三种状态及创建方式,并通过示例说明异步编程技巧和JSON在数据传递中的应用。
87 10
|
2月前
|
机器学习/深度学习 存储 算法
基于MobileNet深度学习网络的活体人脸识别检测算法matlab仿真
本内容主要介绍一种基于MobileNet深度学习网络的活体人脸识别检测技术及MQAM调制类型识别方法。完整程序运行效果无水印,需使用Matlab2022a版本。核心代码包含详细中文注释与操作视频。理论概述中提到,传统人脸识别易受非活体攻击影响,而MobileNet通过轻量化的深度可分离卷积结构,在保证准确性的同时提升检测效率。活体人脸与非活体在纹理和光照上存在显著差异,MobileNet可有效提取人脸高级特征,为无线通信领域提供先进的调制类型识别方案。
|
3月前
|
机器学习/深度学习 人工智能 算法
基于Python深度学习的【蘑菇识别】系统~卷积神经网络+TensorFlow+图像识别+人工智能
蘑菇识别系统,本系统使用Python作为主要开发语言,基于TensorFlow搭建卷积神经网络算法,并收集了9种常见的蘑菇种类数据集【"香菇(Agaricus)", "毒鹅膏菌(Amanita)", "牛肝菌(Boletus)", "网状菌(Cortinarius)", "毒镰孢(Entoloma)", "湿孢菌(Hygrocybe)", "乳菇(Lactarius)", "红菇(Russula)", "松茸(Suillus)"】 再使用通过搭建的算法模型对数据集进行训练得到一个识别精度较高的模型,然后保存为为本地h5格式文件。最后使用Django框架搭建了一个Web网页平台可视化操作界面,
208 11
基于Python深度学习的【蘑菇识别】系统~卷积神经网络+TensorFlow+图像识别+人工智能
|
2月前
|
监控 安全 网络协议
Hyper V上网实战:多虚拟机网络环境配置
在Hyper-V环境中配置多虚拟机网络以实现上网功能,需完成以下步骤:1. 确认Hyper-V安装与物理网络连接正常;2. 配置虚拟交换机(外部、内部或专用)以支持不同网络需求;3. 设置虚拟机网络适配器并关联对应虚拟交换机;4. 验证虚拟机网络连接状态;5. 根据场景需求优化多虚拟机网络环境。此外,还需注意网络隔离、性能监控及数据备份等事项,确保网络安全稳定运行。