walk like i talk 2019-05-13 19:32 采纳率: 0%
浏览 2099
已结题

LSTM模型预测股票,为什么预测结果为水平直线?

import numpy as np
import tensorflow as tf
import matplotlib as mpl
import pandas as pd
from matplotlib import pyplot as plt 

HIDDEN_SIZE =128
NUM_LAYERS=2

TIMESTEPS=10
TRAINING_STEPS=10000
BATCH_SIZE=60

def generate_data(seq):
    x=[]
    y=[]

    for i in range(len(seq)-TIMESTEPS):
        x.append([seq[i:i+TIMESTEPS]])
        y.append([seq[i+TIMESTEPS]])
    return np.array(x,dtype=np.float32),np.array(y,dtype=np.float32)

def lstm_model(x,y,is_training):
    lstm_cell=tf.nn.rnn_cell.BasicLSTMCell
    cell=tf.nn.rnn_cell.MultiRNNCell([lstm_cell(HIDDEN_SIZE) for _ in range(NUM_LAYERS)])
    '''
    cell=tf.nn.rnn_cell.MultiRNNCell(
        [tf.nn.rnn_cell.DropoutWrapper(lstm_cell(HIDDEN_SIZE)) 
        for _ in range(NUM_LAYERS)])
    '''

    outputs,_=tf.nn.dynamic_rnn(cell,x,dtype=tf.float32)

    output=outputs[:,-1,:]

    predictions=tf.contrib.layers.fully_connected(output,1,activation_fn=tf.nn.relu)

    if not is_training:
        return predictions,None,None

    loss=tf.losses.mean_squared_error(labels=y,predictions=predictions)

    train_op=tf.contrib.layers.optimize_loss(loss,tf.train.get_global_step(),optimizer="Adam",learning_rate=0.01)

    return predictions,loss,train_op

def train(sess,train_x,train_y):
    ds=tf.data.Dataset.from_tensor_slices((train_x,train_y))
    ds=ds.repeat().shuffle(1000).batch(BATCH_SIZE)
    x,y=ds.make_one_shot_iterator().get_next()

    with tf.variable_scope("model"):
        predictions,loss,train_op=lstm_model(x,y,True)

    sess.run(tf.global_variables_initializer())
    for i in range(TRAINING_STEPS):
        _,l=sess.run([train_op,loss])
        if i%100==0:
            print("train step:"+str(i)+", loss:"+str(l))

def run_eval(sess,test_X,test_y):
    ds=tf.data.Dataset.from_tensor_slices((test_X,test_y))
    ds=ds.batch(1)
    x,y=ds.make_one_shot_iterator().get_next()

    with tf.variable_scope("model",reuse=True):
        prediction,_,_=lstm_model(x,[0.0],False)

    predictions=[]
    labels=[]
    for i in range(200):
        p,l=sess.run([prediction,y])
        predictions.append(p)
        labels.append(l)

    predictions=np.array(predictions).squeeze()
    labels=np.array(labels).squeeze()
    rmse=np.sqrt(((predictions-labels)**2).mean(axis=0))
    print("Mean Square Error is %f" % rmse)

    plt.figure()
    plt.plot(predictions,label='predictions')
    plt.plot(labels,label='real')
    plt.legend()
    plt.show()


f=open('IBM.csv')
df=pd.read_csv(f)
seq=df.iloc[:,1].values
train_data=seq[2:504]
test_data=seq[505:750]
train_x,train_y=generate_data(train_data)
test_x,test_y=generate_data(test_data)

with tf.Session() as sess:
    train(sess,train_x,train_y)

    run_eval(sess,test_x,test_y)


图片说明

  • 写回答

1条回答 默认 最新

  • threenewbee 2019-05-13 20:53
    关注

    这个模型是你自己写的?整个都不对,建议你从github上下载一个例子先入门下

    评论

报告相同问题?

悬赏问题

  • ¥15 求解 yolo算法问题
  • ¥15 虚拟机打包apk出现错误
  • ¥30 最小化遗憾贪心算法上界
  • ¥15 用visual studi code完成html页面
  • ¥15 聚类分析或者python进行数据分析
  • ¥15 逻辑谓词和消解原理的运用
  • ¥15 三菱伺服电机按启动按钮有使能但不动作
  • ¥15 js,页面2返回页面1时定位进入的设备
  • ¥50 导入文件到网吧的电脑并且在重启之后不会被恢复
  • ¥15 (希望可以解决问题)ma和mb文件无法正常打开,打开后是空白,但是有正常内存占用,但可以在打开Maya应用程序后打开场景ma和mb格式。