我有一个非常初学的问题。我已经安装了一个预测股票价格的模型。神经网络需要做什么输入才能做出预测?如果我的批量大小为30,我是否需要以29种最后已知价格提供?顺便说一句,这是我的代码:
# First step, import libraries.
import numpy as np
import pandas as pd
from matplotlib import pyplot as plt
import h5py
random_seed = 452
# Neural network configuration
num_epochs = 500
num_batch_size = 30
lstm_activation_function = "sigmoid"
df = pd.read_csv("data_dl.csv")
df["date"] = pd.to_datetime(df["Timestamp"],unit="s").dt.date
group = df.groupby("date")
Real_Price = group["Close"].mean()
Real_Price = Real_Price[len(Real_Price)-29:]
# Data preprocess
training_set = Real_Price.values
training_set = np.reshape(training_set, (len(training_set), 1))
from sklearn.preprocessing import MinMaxScaler
sc = MinMaxScaler()
training_set = sc.fit_transform(training_set)
X_train = training_set[0:len(training_set)-1]
y_train = training_set[1:len(training_set)]
X_train = np.reshape(X_train, (len(X_train), 1, 1))
from keras.models import load_model
model = load_model("20180302_0340e500b30_s452.h5")
yhat = model.predict_on_batch(X_train)
fname_graph = "pr_e" + str(num_epochs) + "_b" + str(num_batch_size) + ".png"
plt.figure(figsize=(25,15), dpi=80, facecolor="w", edgecolor="k")
ax = plt.gca()
plt.plot(yhat, color = "red", label = "Price")
plt.title("Price", fontsize=40)
for tick in ax.xaxis.get_major_ticks():
tick.label1.set_fontsize(18)
for tick in ax.yaxis.get_major_ticks():
tick.label1.set_fontsize(18)
plt.xlabel("Time", fontsize=40)
plt.legend(loc=2, prop={"size": 25})
plt.savefig(fname_graph, bbox_inches="tight")
plt.show()
就像马克西米利安在他的评论中写道,你的网络用于预测的输入应该与训练期间输入的形状相同。在这种情况下,我们无法确定这是什么,因为您的代码中没有进行任何培训;看起来你正在加载一个已经训练过的模型:
model = load_model("20180302_0340e500b30_s452.h5")
但是,以下行中变量的命名表明您总是在时间t
使用一个数据点(单个值?),以便在t+1
时预测下一个值:
X_train = training_set[0:len(training_set)-1]
y_train = training_set[1:len(training_set)]
如果在训练期间确实使用了这种代码,那么您还应该使用类似的预测设置:为时间点t
提供一个数字作为输入,获得下一个时间步长t+1
作为输出的预测。
如果我的批量大小为30,我是否需要以29种最后已知价格提供?
在培训期间使用批次更常见,在进行预测时,批量大小为1更为常见,但如果您有大量新输入,则可以同时对整个批次进行预测。作出预测。
无论哪种方式,在这句话中你的问题的答案是否定的。批量大小是指您拥有/想要的输入输出对的数量(其中输入可以是许多元素的向量,我怀疑在您的情况下恰好只有一个元素)。如果您的批量大小为30,这意味着您可以同时提供30个不同的输入值,这些输入值对应于30个不同的时间步长[t0, t1, ..., t29]
作为输入,并且同时为30个不同的匹配时间步长[t0 + 1, t1 + 1, ..., t29 + 1]
获得30个不同的输出。