问题情境:已知某一天内到目前为止股票各个时刻的价格,预测接下来短时间内的价格变化。

import tushare as ts
import time
from collections import namedtuple
import numpy as np
import tensorflow as tf class TPPM:
def __init__(self):
self.input_size = 10
self.output_size = 10
self.lstm_size = 10
self.learning_rate = 0.001
self.time_step = 1 self.input = tf.placeholder(tf.float32, shape=(None, self.time_step, self.input_size), name='input')
self.label = tf.placeholder(tf.float32, shape=(None, self.time_step, self.output_size), name='label') self.lstm = tf.nn.rnn_cell.BasicLSTMCell(self.lstm_size)
self.initial_state = self.lstm.zero_state(1, tf.float32)
self.output, self.final_state = tf.nn.dynamic_rnn(self.lstm, self.input, initial_state=self.initial_state, dtype=tf.float32) self.loss = tf.reduce_mean(tf.square(tf.reshape(self.output, [-1]) - tf.reshape(self.label, [-1]))) self.optimizer = tf.train.AdamOptimizer(1e-4).minimize(self.loss) def getData(self):
d = ts.get_tick_data('', date='2017-10-16')
sequence = np.array([row.price - 57.0 for row in d.itertuples()], dtype=np.float32)
return sequence
def train(self):
sequence = self.getData()
print(sequence)
with tf.Session() as sess:
sess.run(tf.global_variables_initializer()) for i in range(500):
for j in range(0,4500,10):
feed_input=sequence[j:j+10].reshape(-1,1,10)
feed_label=sequence[j+10:j+20].reshape(-1,1,10)
_, loss_ = sess.run([self.optimizer, self.loss], feed_dict={self.input: feed_input, self.label: feed_label})
print(i,',',loss_)
file = open('data/predict.csv', 'w')
with file:
for j in range(0, 4500, 10):
feed_input = sequence[j:j + 10].reshape(-1, 1, 10)
feed_label = sequence[j + 10:j + 20].reshape(-1, 1, 10)
predict = sess.run([self.output], feed_dict={self.input: feed_input, self.label: feed_label})
for i in range(10):
file.write("%d,%.4f,%.4f\n" % (j + i, np.array(feed_label).reshape(-1)[i], np.array(predict).reshape(-1)[i])) def restore(self):
pass
def save(self):
pass model=TPPM()
model.train()

  运行结果:

  结构比较简单,训练次数也不多,可以看到结果还是比较令人失望的,不过勉强好像是有那么点意思。

  先说__init__:先定义了几个超参数,比较好理解。接下来是输入和标签的占位符。

self.lstm = tf.nn.rnn_cell.BasicLSTMCell(self.lstm_size)
self.initial_state = self.lstm.zero_state(1, tf.float32)
self.output, self.final_state = tf.nn.dynamic_rnn(self.lstm, self.input, initial_state=self.initial_state, dtype=tf.float32)

  以上代码定义LSTM层,这里要注意两点:

  1)第三行的dynamic_rnn里的第二个参数,至少是3维的。第一维是batch_size,表示一个批次处理多少组数据。第二维是time_step,表示序列长度,因为做的是序列预测嘛,每次的输入不是上一个点,而是上一段时间,time_step就表示取得这一段时间内有多少个点。第三及之后的维度是具体描述这个点是什么状况,看具体问题。我的代码里是把相邻的10个时刻里的价格作为一个点,time_step为1,表示我每次输入的序列只由一个点组成,但这个维度还是要有的,batch_size根据feed的情况具体计算,我为了简单,batch_size这里其实也是1。

  2)用这个BasicLSTMCell的时候,lstm_size要和input的shape对应起来,具体是什么关系现在还不是很清楚,我这里因为描述部分只由一维所以只要lstm_size=input_size就可以了。

  getData:使用tushare获取股票数据。

  train就是训练,注意feed的数据和模型定义时的数据shape对应上就可以了。

  现在有两个比较大的问题,对信心比较有影响:

  1)具体效果好不好其实现在也不是完全确定,因为之前做天池的口碑商家那个比赛的时候直接就输出近期内的平均值就能得到一个不错的结果。相比于这里来说,我倒看不出有什么明显的优势,单从截图部分来看,还不如平均数呢。

  2)既然循环神经网络是历史输入会对之后造成影响,那么每次把全部数据训练完成后重新回到数据的开始部分进行下一轮训练时,相当于数据来了个突变,这会不会产生什么不好的影响呢。

------------------------------------------------------------

  如果用这个程序来指导投机行为,结果会如何呢?我试了一下,假设我初始有1000元,每次预测完接下来的10个时刻的价格后取其中最高价与输入的最后一个时刻价格比较,如果高就进行一次买入卖出行为:

cnt=1000.0
with file:
for j in range(0, 4500, 10):
feed_input = sequence[j:j + 10].reshape(-1, 1, 10)
feed_label = sequence[j + 10:j + 20].reshape(-1, 1, 10)
predict = sess.run([self.output], feed_dict={self.input: feed_input, self.label: feed_label})
max=0
for i in range(10):
if (np.array(predict).reshape(-1)[i]>np.array(predict).reshape(-1)[max]):
max=i
file.write("%d,%.4f,%.4f\n" % (j + i, np.array(feed_label).reshape(-1)[i], np.array(predict).reshape(-1)[i]))
if (np.array(predict).reshape(-1)[max]>np.array(feed_input).reshape(-1)[9]):
cnt=cnt/(np.array(feed_input).reshape(-1)[9]+57.0)*(np.array(feed_label).reshape(-1)[max]+57.0)
print(cnt)

模拟了一天的操作后,赚了3块钱:

TensorFlow-LSTM序列预测的更多相关文章

  1. 使用TensorFlow的递归神经网络(LSTM)进行序列预测

    本篇文章介绍使用TensorFlow的递归神经网络(LSTM)进行序列预测.作者在网上找到的使用LSTM模型的案例都是解决自然语言处理的问题,而没有一个是来预测连续值的. 所以呢,这里是基于历史观察数 ...

  2. TensorFlow-Bitcoin-Robot:一个基于 TensorFlow LSTM 模型的 Bitcoin 价格预测机器人

    简介 TensorFlow-Bitcoin-Robot:一个基于 TensorFlow LSTM 模型的 Bitcoin 价格预测机器人. 文章包括一下几个部分: 1.为什么要尝试做这个项目? 2.为 ...

  3. TensorFlow-Bitcoin-Robot:一个基于 TensorFlow LSTM 模型的 Bitcoin 价格预测机器人。

    简介 TensorFlow-Bitcoin-Robot:一个基于 TensorFlow LSTM 模型的 Bitcoin 价格预测机器人. 文章包括一下几个部分: 1.为什么要尝试做这个项目? 2.为 ...

  4. TensorFlow LSTM 注意力机制图解

    TensorFlow LSTM Attention 机制图解 深度学习的最新趋势是注意力机制.在接受采访时,现任OpenAI研究主管的Ilya Sutskever提到,注意力机制是最令人兴奋的进步之一 ...

  5. 时间序列深度学习:状态 LSTM 模型预测太阳黑子

    目录 时间序列深度学习:状态 LSTM 模型预测太阳黑子 教程概览 商业应用 长短期记忆(LSTM)模型 太阳黑子数据集 构建 LSTM 模型预测太阳黑子 1 若干相关包 2 数据 3 探索性数据分析 ...

  6. TensorFlow实现时间序列预测

    常常会碰到各种各样时间序列预测问题,如商场人流量的预测.商品价格的预测.股价的预测,等等.TensorFlow新引入了一个TensorFlow Time Series库(以下简称为TFTS),它可以帮 ...

  7. Tensorflow LSTM实现

    Tensorflow[LSTM]   0.背景 通过对<tensorflow machine learning cookbook>第9章第3节"implementing_lstm ...

  8. Mol Cell Proteomics. | Prediction of LC-MS/MS properties of peptides from sequence by deep learning (通过深度学习技术根据肽段序列预测其LC-MS/MS谱特征) (解读人:梅占龙)

    通过深度学习技术根据肽段序列预测其LC-MS/MS谱特征 解读人:梅占龙  质谱平台 文献名:Prediction of LC-MS/MS properties of peptides from se ...

  9. kaggle之数字序列预测

    数字序列预测 Github地址 Kaggle地址 # -*- coding: UTF-8 -*- %matplotlib inline import pandas as pd import strin ...

随机推荐

  1. HDU_5724_状态压缩的sg函数

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5724 题目大意:n行20列的棋盘,对于每行,如果当前棋子右边没棋子,那可以直接放到右边,如果有就跳过放 ...

  2. redis与其可视化工具在win7上的安装

    步骤 1.下载安装Redis服务. 2.调用执行文件创建服务器以及测试缓存. 3.使用可视化工具redis-desktop-manager管理查询缓存. 1.下载安装Redis服务. 下载地址:htt ...

  3. luogu P4719 【模板】动态 DP 矩阵乘法 + LCT

    方法二:LCT+矩阵乘法 上文中,我们用线段树来维护重链上的各种矩阵转移. 第二种方法是将树链剖分替换为动态树. 我们知道,矩阵乘法 $\begin{bmatrix} F_{u,0} & F_ ...

  4. kvm迁移

    一.迁移简介 迁移:      系统的迁移是指把源主机上的操作系统和应用程序移动到目的主机,并且能够在目的主机上正常运行.在没有虚拟机的时代,物理机之间的迁移依靠的是系统备份和恢复技术.在源主机上实时 ...

  5. eas之常用源码整理

    //查看是否有相关权限 boolean hasAllotPermission=         PermissionFactory.getRemoteInstance().hasFunctionPer ...

  6. Centos7从3.10升级内核到4.9后无法启动解决办法:mpt[23]sas驱动问题

    Centos7升级内核后无法启动解决办法:mpt[23]sas驱动问题 前言 这个问题存在有一段时间了,之前做的centos7的ISO,在进行内核的升级以后就存在这个问题: 系统盘在板载sata口上是 ...

  7. NOIP2013 DAY2 T3火车运输

    传送门 题目描述 A 国有 n 座城市,编号从 1 到 n,城市之间有 m 条双向道路.每一条道路对车辆都有重量限制,简称限重.现在有 q 辆货车在运输货物, 司机们想知道每辆车在不超过车辆限重的情况 ...

  8. [luogu4290 HAOI2008]玩具取名(DP)

    传送门 Solution 裸区间DP Code #include <map> #include <cmath> #include <cstdio> #include ...

  9. [luogu3244 SHOI2016] 黑暗前的幻想乡(容斥原理+矩阵树定理)

    传送门 Description 给出 n 个点和 n−1 种颜色,每种颜色有若干条边.求这张图多少棵每种颜色的边都出现过的生成树,答案对 109+7 取模. Input 第一行包含一个正整数 N(N& ...

  10. JAVA关键技术

    通用技术方面 MVC 1)概念 MVC是一个架构模式,它分离了表现与交互.它被分为三个核心部件:模型-model.视图-view.控制器-controller 2)工作原理 所有的终端用户请求被发送到 ...