Python 价格预测的训练模型

Python 价格预测的训练模型,python,tensorflow,keras,lstm,Python,Tensorflow,Keras,Lstm,我正在尝试制作股票预测器,我知道我将创建的模型不会很好,但无论如何。首先,我将在下面添加formate X和Y的代码。X包含10天的股票价格,Y包含答案(接下来几天的价格) 将yf财务导入为yf 将numpy作为np导入 作为pd进口熊猫 导入json 从系统导入退出 从keras.models导入顺序 从keras.layers导入LSTM 从keras.layers导入退出 从keras.layers导入稠密 将open('/content/drive/MyDrive/tickers.jso

我正在尝试制作股票预测器,我知道我将创建的模型不会很好,但无论如何。首先,我将在下面添加formate X和Y的代码。X包含10天的股票价格,Y包含答案(接下来几天的价格)

将yf财务导入为yf
将numpy作为np导入
作为pd进口熊猫
导入json
从系统导入退出
从keras.models导入顺序
从keras.layers导入LSTM
从keras.layers导入退出
从keras.layers导入稠密
将open('/content/drive/MyDrive/tickers.json','r',encoding='utf-8')作为f:
tickers_list=eval(json.loads(f.read())['tickers'][:100]#tickers列表
X=[]
Y=[]
对于ticker\u列表中的ticker:
stock=yf.下载(股票代码,'1990-01-01','2019-12-31'['Adj Close'])。数值
对于范围内的i(len(库存)):
尝试:
股票[i+11]
除:
持续
追加(股票[i:i+10])
Y.追加([股票[i+11]])
X=np.阵列(X)#10天的价格
Y=np.数组(Y)#第二天的价格
之后,我编写了创建模型的代码

X\u train=np.展开尺寸(X,1)
模型=顺序()
add(LSTM(units=64,return\u sequences=True,input\u shape=(10,1)))
模型。添加(辍学(0.2))
model.add(LSTM(单位=64,返回序列=True))
模型。添加(辍学(0.2))
model.add(LSTM(单位=64,返回序列=True))
模型。添加(辍学(0.2))
模型添加(LSTM(单位=64))
模型。添加(辍学(0.2))
模型。添加(密度(单位=1))
compile(优化器='adam',loss='mean_squared_error')
打印(model.summary())
模型拟合(X系列,Y系列,历次=100,批量=32)
但当我运行上面的代码时,出现了错误

Input 0 is incompatible with layer sequential_17: expected shape=(None, None, 1), found shape=[None, 1, 10]
如何修复它? 谢谢你

注意 如果您有任何可以让我的研究更好的建议,请写信给我。

更改此行:

X_train = np.expand_dims(X, 2) # 2 instead of 1

我建议您使用此函数创建时间序列数据集。您的操作,包括错误处理,似乎不太理想。此函数来自Tensorflow官方文档的旧版本。除此之外,你似乎在一个接一个地连接一组时间序列,这是没有意义的

def univariate_data(dataset, start_index, end_index, history_size,
                    target_size, single_step=False):
    data, labels = [], []
    start_index = start_index + history_size
    if end_index is None:
        end_index = len(dataset) - target_size
    for i in range(start_index, end_index):
        indices = np.arange(i-history_size, i)
        data.append(np.reshape(dataset[indices], (history_size, 1)))
        if single_step:
            labels.append(dataset[i + target_size])
        else:
            labels.append(dataset[i:i + target_size])
    return np.array(data), np.array(labels)
然后,你甚至不会面对你所面临的问题。除此之外,请注意,您不需要打印
model.summary()
,调用此方法会自动打印它。下面是我提供的函数的完整工作示例:

import yfinance as yf
import numpy as np
import tensorflow as tf

stock = yf.download('aapl','1990-01-01','2019-12-31')['Adj Close'].values

def univariate_data(dataset, start_index, end_index, history_size,
                    target_size, single_step=False):
    data, labels = [], []
    start_index = start_index + history_size
    if end_index is None:
        end_index = len(dataset) - target_size
    for i in range(start_index, end_index):
        indices = np.arange(i-history_size, i)
        data.append(np.reshape(dataset[indices], (history_size, 1)))
        if single_step:
            labels.append(dataset[i + target_size])
        else:
            labels.append(dataset[i:i + target_size])
    return np.array(data), np.array(labels)

X, y = univariate_data(stock, 0, len(stock) - 1, 10, 1, True)

model = tf.keras.Sequential()
model.add(tf.keras.layers.LSTM(units=8,return_sequences=True,
                               input_shape=(10, 1)))
model.add(tf.keras.layers.Dropout(0.2))
model.add(tf.keras.layers.LSTM(units=8,return_sequences=True))
model.add(tf.keras.layers.Dropout(0.2))
model.add(tf.keras.layers.LSTM(units=8,return_sequences=True))
model.add(tf.keras.layers.Dropout(0.2))
model.add(tf.keras.layers.LSTM(units=8))
model.add(tf.keras.layers.Dropout(0.2))
model.add(tf.keras.layers.Dense(units=1))
model.compile(optimizer='adam',loss='mean_squared_error')

model.summary()

history = model.fit(X, y, steps_per_epoch=1)

X_train.shape
的输出是什么?X_train.shape的输出是(474299,1,10)谢谢你,你有什么建议可以改进我的模型吗?在第一个历元损失为nan后。如果损失为nan,请检查数据集中是否有nan,并将其删除。我将在30分钟内不接受您的答案,我将等待建议。你的回答解决了我的问题。@b杜切特,你怎么看。从技术上讲,我的模型是否可行?尝试减少LSTM层的数量(从一层开始)。4层可能不稳定谢谢你这么多怎么预测?aapl=np.array(列表(yf.download('aapl','2020-11-25','2020-12-10')['Adj-Close'].values))aapl=np.expand_-dims(aapl,1)模型。predict(aapl)给我输入的层顺序0与层不兼容:预期ndim=3,发现ndim=2。收到完整形状:[无,1]如果生成测试数据,则必须将其作为wellTW传递到函数中。我很确定您将一个接一个地连接多个时间序列,这没有意义。您在做什么?我知道我的模型不适合它的任务。
7547/7547 [==============================] - 12s 2ms/sample - loss: 286.5788