当前位置: 首页 > news >正文

网站建设与服务考试南海网站建设哪家好

网站建设与服务考试,南海网站建设哪家好,有没有做门面设计的网站,seo技术培训学校文章目录 0 前言1 课题意义1.1 股票预测主流方法 2 什么是LSTM2.1 循环神经网络2.1 LSTM诞生 2 如何用LSTM做股票预测2.1 算法构建流程2.2 部分代码 3 实现效果3.1 数据3.2 预测结果项目运行展示开发环境数据获取 最后 0 前言 #x1f525; 这两年开始毕业设计和毕业答辩的要… 文章目录 0 前言1 课题意义1.1 股票预测主流方法 2 什么是LSTM2.1 循环神经网络2.1 LSTM诞生 2 如何用LSTM做股票预测2.1 算法构建流程2.2 部分代码 3 实现效果3.1 数据3.2 预测结果项目运行展示开发环境数据获取 最后 0 前言 这两年开始毕业设计和毕业答辩的要求和难度不断提升传统的毕设题目缺少创新和亮点往往达不到毕业答辩的要求这两年不断有学弟学妹告诉学长自己做的项目系统达不到老师的要求。 为了大家能够顺利以及最少的精力通过毕设学长分享优质毕业设计项目今天要分享的是 深度学习 大数据 股票预测系统 学长这里给一个题目综合评分(每项满分5分) 难度系数3分工作量3分创新点4分 1 课题意义 利用神经网络模型如果能够提高对股票价格的预测精度更好地掌握股票价格发展趋势这对于投资者来说可以及时制定相应的发展策略更好地应对未来发生的不确定性事件对于个人来说可以降低投资风险减少财产损失实现高效投资具有一定的实践价值。 1.1 股票预测主流方法 股票市场复杂、非线性的特点使我们难以捉摸其变化规律目前有很多预测股票走势的论文和算法。 定量分析从精确的数据资料中获得股票发展的价值规律通过建立模型利用数学语言对股市的发展情况做出解释与预测。 目前常用的定量分析方法有 传统时间序列预测模型马尔可夫链预测灰色系统理论预测遗传算法机器学习预测等方法 2 什么是LSTM LSTM是长短期记忆网络LSTMLong Short-Term Memory想要理解什么是LSTM首先要了解什么是循环神经网络。 2.1 循环神经网络 对于传统的BP神经网络如深度前馈网络、卷积神经网络来说同层及跨层之间的神经元是独立的但实际应用中对于一些有上下联系的序列来说如果能够学习到它们之间的相互关系使网络能够对不同时刻的输入序列产生一定的联系像生物的大脑一样有“记忆功能”这样的话我们的模型也就会有更低的训练出错频率及更好的泛化能力。 JordanMI提出序列理论描述了一种体现“并行分布式处理”的网络动态系统适用于语音生成中的协同发音问题并进行了相关仿真实验ElmanJL认为连接主义模型中对时间如何表示是至关重要的1990年他提出使用循环连接为网络提供动态内存从相对简单的异或问题到探寻单词的语义特征网络均学习到了有趣的内部表示网络还将任务需求和内存需求结合在一起由此形成了简单循环网络的基础框架。 循环神经网络RNN之间的神经元是相互连接的不仅在层与层之间的神经元建立连接而且每一层之间的神经元也建立了连接隐藏层神经元的输入由当前输入和上一时刻隐藏层神经元的输出共同决定每一时刻的隐藏层神经元记住了上一时刻隐藏层神经元的输出相当于对网络增添了“记忆”功能。我们都知道在输入序列中不可避免会出现重复或相似的某些序列信息我们希望RNN能够保留这些记忆信息便于再次调用且RNN结构中不同时刻参数是共享的这一优点便于网络在不同位置依旧能将该重复信息识别出来这样一来模型的泛化能力自然有所上升。 RNN结构如下 2.1 LSTM诞生 RNN在解决长序列问题时未能有良好的建模效果存在长期依赖的弊端对此HochreiterS等人对神经单元做出了改进引入自循环使梯度信息得以长时间持续流动即模型可以拥有长期记忆信息且自循环权重可以根据前后信息进行调整并不是固定的。作为RNN的一种特殊结构它可以根据前后输入情况决定历史信息的去留增进的门控机制可以动态改变累积的时间尺度进而控制神经单元的信息流这样神经网络便能够自己根据情况决定清除或保留旧的信息不至于状态信息过长造成网络崩溃这便是长短期记忆LSTM网络。随着信息不断流入该模型每个神经元内部的遗忘门、输入门、输出门三个门控机制会对每一时刻的信息做出判断并及时进行调整更新LSTM模型现已广泛应用于无约束手写识别、语音识别、机器翻译等领域。 2 如何用LSTM做股票预测 2.1 算法构建流程 2.2 部分代码 import numpy as np import matplotlib.pyplot as plt import tensorflow as tf import pandas as pd import mathdef LSTMtest(data):n1 len(data[0]) - 1 #因为最后一位为labeln2 len(data)print(n1, n2)# 设置常量input_size n1 # 输入神经元个数rnn_unit 10 # LSTM单元(一层神经网络)中的中神经元的个数lstm_layers 7 # LSTM单元个数output_size 1 # 输出神经元个数预测值lr 0.0006 # 学习率train_end_index math.floor(n2*0.9) # 向下取整print(train_end_index, train_end_index)# 前90%数据作为训练集后10%作为测试集# 获取训练集# time_step 时间步batch_size 每一批次训练多少个样例def get_train_data(batch_size60, time_step20, train_begin0, train_endtrain_end_index):batch_index []data_train data[train_begin:train_end]normalized_train_data (data_train - np.mean(data_train, axis0)) / np.std(data_train, axis0) # 标准化train_x, train_y [], [] # 训练集for i in range(len(normalized_train_data) - time_step):if i % batch_size 0:# 开始位置batch_index.append(i)# 一次取time_step行数据# x存储输入维度不包括label :X(最后一个不取# 标准化(归一化x normalized_train_data[i:i time_step, :n1]# y存储labely normalized_train_data[i:i time_step, n1, np.newaxis]# np.newaxis分别是在行或列上增加维度train_x.append(x.tolist())train_y.append(y.tolist())# 结束位置batch_index.append((len(normalized_train_data) - time_step))print(batch_index, batch_index)# print(train_x, train_x)# print(train_y, train_y)return batch_index, train_x, train_y# 获取测试集def get_test_data(time_step20, test_begintrain_end_index1):data_test data[test_begin:]mean np.mean(data_test, axis0)std np.std(data_test, axis0) # 矩阵标准差# 标准化(归一化normalized_test_data (data_test - np.mean(data_test, axis0)) / np.std(data_test, axis0)# // 表示整数除法。有size个sampletest_size (len(normalized_test_data) time_step - 1) // time_stepprint(test_size$$$$$$$$$$$$$$, test_size)test_x, test_y [], []for i in range(test_size - 1):x normalized_test_data[i * time_step:(i 1) * time_step, :n1]y normalized_test_data[i * time_step:(i 1) * time_step, n1]test_x.append(x.tolist())test_y.extend(y)test_x.append((normalized_test_data[(i 1) * time_step:, :n1]).tolist())test_y.extend((normalized_test_data[(i 1) * time_step:, n1]).tolist())return mean, std, test_x, test_y# ——————————————————定义神经网络变量——————————————————# 输入层、输出层权重、偏置、dropout参数# 随机产生 w,bweights {in: tf.Variable(tf.random_normal([input_size, rnn_unit])),out: tf.Variable(tf.random_normal([rnn_unit, 1]))}biases {in: tf.Variable(tf.constant(0.1, shape[rnn_unit, ])),out: tf.Variable(tf.constant(0.1, shape[1, ]))}keep_prob tf.placeholder(tf.float32, namekeep_prob) # dropout 防止过拟合# ——————————————————定义神经网络——————————————————def lstmCell():# basicLstm单元# tf.nn.rnn_cell.BasicLSTMCell(self, num_units, forget_bias1.0,# tate_is_tupleTrue, activationNone, reuseNone, nameNone) # num_units:int类型LSTM单元(一层神经网络)中的中神经元的个数和前馈神经网络中隐含层神经元个数意思相同# forget_bias:float类型偏置增加了忘记门。从CudnnLSTM训练的检查点(checkpoin)恢复时必须手动设置为0.0。# state_is_tuple:如果为True则接受和返回的状态是c_state和m_state的2-tuple如果为False则他们沿着列轴连接。后一种即将被弃用。# LSTM会保留两个state也就是主线的state(c_state),和分线的state(m_state)会包含在元组tuple里边# state_is_tupleTrue就是判定生成的是否为一个元组# 初始化的 c 和 a 都是zero_state 也就是都为list[]的zero这是参数state_is_tuple的情况下# 初始state,全部为0慢慢的累加记忆# activation:内部状态的激活函数。默认为tanh# reuse:布尔类型描述是否在现有范围中重用变量。如果不为True并且现有范围已经具有给定变量则会引发错误。# name:String类型层的名称。具有相同名称的层将共享权重但为了避免错误在这种情况下需要reuseTrue.#basicLstm tf.nn.rnn_cell.BasicLSTMCell(rnn_unit, forget_bias1.0, state_is_tupleTrue)# dropout 未使用drop tf.nn.rnn_cell.DropoutWrapper(basicLstm, output_keep_probkeep_prob)return basicLstmdef lstm(X): # 参数输入网络批次数目batch_size tf.shape(X)[0]time_step tf.shape(X)[1]w_in weights[in]b_in biases[in]# 忘记门输入门# 因为要进行矩阵乘法,所以reshape# 需要将tensor转成2维进行计算input tf.reshape(X, [-1, input_size])input_rnn tf.matmul(input, w_in) b_in# 将tensor转成3维计算后的结果作为忘记门的输入input_rnn tf.reshape(input_rnn, [-1, time_step, rnn_unit])print(input_rnn, input_rnn)# 更新门# 构建多层的lstmcell tf.nn.rnn_cell.MultiRNNCell([lstmCell() for i in range(lstm_layers)])init_state cell.zero_state(batch_size, dtypetf.float32)# 输出门w_out weights[out]b_out biases[out]# output_rnn是最后一层每个step的输出,final_states是每一层的最后那个step的输出output_rnn, final_states tf.nn.dynamic_rnn(cell, input_rnn, initial_stateinit_state, dtypetf.float32)output tf.reshape(output_rnn, [-1, rnn_unit])# 输出值同时作为下一层输入门的输入pred tf.matmul(output, w_out) b_outreturn pred, final_states# ————————————————训练模型————————————————————def train_lstm(batch_size60, time_step20, train_begin0, train_endtrain_end_index):# 于是就有了tf.placeholder# 我们每次可以将 一个minibatch传入到x tf.placeholder(tf.float32,[None,32])上# 下一次传入的x都替换掉上一次传入的x# 这样就对于所有传入的minibatch x就只会产生一个op# 不会产生其他多余的op进而减少了graph的开销。X tf.placeholder(tf.float32, shape[None, time_step, input_size])Y tf.placeholder(tf.float32, shape[None, time_step, output_size])batch_index, train_x, train_y get_train_data(batch_size, time_step, train_begin, train_end)# 用tf.variable_scope来定义重复利用,LSTM会经常用到with tf.variable_scope(sec_lstm):pred, state_ lstm(X) # pred输出值state_是每一层的最后那个step的输出print(pred,state_, pred, state_)# 损失函数# [-1]——列表从后往前数第一列即pred为预测值Y为真实值(Label)#tf.reduce_mean 函数用于计算张量tensor沿着指定的数轴tensor的某一维度上的的平均值loss tf.reduce_mean(tf.square(tf.reshape(pred, [-1]) - tf.reshape(Y, [-1])))# 误差loss反向传播——均方误差损失# 本质上是带有动量项的RMSprop它利用梯度的一阶矩估计和二阶矩估计动态调整每个参数的学习率。# Adam的优点主要在于经过偏置校正后每一次迭代学习率都有个确定范围使得参数比较平稳.train_op tf.train.AdamOptimizer(lr).minimize(loss)saver tf.train.Saver(tf.global_variables(), max_to_keep15)with tf.Session() as sess:# 初始化sess.run(tf.global_variables_initializer())theloss []# 迭代次数for i in range(200):for step in range(len(batch_index) - 1):# sess.run(b, feed_dict replace_dict)state_, loss_ sess.run([train_op, loss],feed_dict{X: train_x[batch_index[step]:batch_index[step 1]],Y: train_y[batch_index[step]:batch_index[step 1]],keep_prob: 0.5})# 使用feed_dict完成矩阵乘法 处理多输入# feed_dict的作用是给使用placeholder创建出来的tensor赋值# [batch_index[step]: batch_index[step 1]]这个区间的X与Y# keep_prob的意思是留下的神经元的概率如果keep_prob为0的话 就是让所有的神经元都失活。print(Number of iterations:, i, loss:, loss_)theloss.append(loss_)print(model_save: , saver.save(sess, model_save2\\modle.ckpt))print(The train has finished)return thelosstheloss train_lstm()# 相对误差测量值-计算值/计算值×100%test_y np.array(test_y) * std[n1] mean[n1]test_predict np.array(test_predict) * std[n1] mean[n1]acc np.average(np.abs(test_predict - test_y[:len(test_predict)]) / test_y[:len(test_predict)])print(预测的相对误差:, acc)print(theloss)plt.figure()plt.plot(list(range(len(theloss))), theloss, colorb, )plt.xlabel(times, fontsize14)plt.ylabel(loss valuet, fontsize14)plt.title(loss-----blue, fontsize10)plt.show()# 以折线图表示预测结果plt.figure()plt.plot(list(range(len(test_predict))), test_predict, colorb, )plt.plot(list(range(len(test_y))), test_y, colorr)plt.xlabel(time value/day, fontsize14)plt.ylabel(close value/point, fontsize14)plt.title(predict-----blue,real-----red, fontsize10)plt.show()prediction()需要完整代码工程的同学请联系学长获取 3 实现效果 3.1 数据 采集股票数据 任选几支股票作为研究对象。 3.2 预测结果 项目运行展示 废话不多说, 先展示项目运行结果, 后面才进行技术讲解 对某公司的股票进行分析和预测 : 开发环境 如果只运行web项目则只需安装如下包 python 3.6.x django 2.1.4 或者使用conda安装最新版 pandas 0.23.4 或者使用conda安装最新版 numpy 1.15.2 或者使用conda安装最新版 *apscheduler 2.1.2 请用pip install apscheduler2.1.2 安装conda装的版本不兼容 如果需要训练模型或者使用模型来预测(注需要保证本机拥有 NVIDIA GPU以及显卡驱动)则还需要安装 tensorflow-gpu 1.10.0 可以使用conda安装最新版。如用conda安装cudatoolkit和cudnn会被自动安装 cudatoolkit 9.0 根据自己本机的显卡型号决定请去NVIDIA官网查看 cudnn 7.1.4 版本与cudatoolkit9.0对应的其他版本请去NVIDIA官网查看对应的cudatoolkit版本 keras 2.2.2 可以使用conda安装最新版 matplotlib 2.2.2 可以使用conda安装最新版 数据获取 训练模型的数据即10个公司的历史股票数据。获取国内上市公司历史股票数据, 并以csv格式保存下来。csv格式方便用pandas读取输入到LSTM神经网络模型 用于训练模型以及预测股票数据。 最后
http://www.dnsts.com.cn/news/10813.html

相关文章:

  • 简约设计网站中国小康建设网官方网站
  • 网站的产品上传图片网站制作邯郸
  • 新手入门网站建设书籍新闻头条免费下载安装
  • 网站搭建及应用教程北京营销型网站建站公司
  • 如何做一个网站代码购买wordpress模板
  • 两个域名 两个网站 如何推广怎么做网页模板展示网站
  • 哪个网站域名解析淘客推广方法
  • 网站 宕机 优化自己创建一个公司
  • 企业网站托管电话做海淘是在哪个网站
  • 郑州网站建设网络公司wordpress信息管理系统
  • 科技微网站tplink域名申请
  • 公司的网站备案手续2022引流人脉推广软件
  • 网站排名优化机构邯郸58同城招聘信息
  • 计算机编程与网站建设怎样使用仿站小工具做网站
  • 越南做网站服务器个人网站怎么建设步骤
  • 智能响应式网站建设招聘网站哪个平台比较好
  • 网站怎么做轮幕wordpress登录sso
  • 做家电家具回收用哪个网站好赣州seo顾问
  • 阜阳企业做网站县级门户网站建设的报告
  • 备案网站名怎么写wordpress 去优酷广告
  • 昆明做整站优化做以个一元购的网站多少钱
  • 网站的设计与制作阅读第2版衣服品牌
  • 免费做销售网站马家堡做网站的公司
  • 做网站怎样调用支付宝接口wordpress工单系统
  • 网站域名备案信息学技术的培训机构
  • 做的阿里巴巴网站的放哪个科目常德网站建设全域云
  • apache搭建网站广告优化师适合女生吗
  • 网站域名备案要多久成都手机网站建设哪
  • phyton 网站开发wordpress4.7.4+for+sae
  • 网站建设企业蛋糕做营销最好的网站源码