神经网络需要什么输入来进行预测?

时间:2018-03-02 12:29:57

标签: python tensorflow neural-network keras

我有非常初学者问题。我已经安装了一个预测股票价格的模型。神经网络需要做什么输入才能做出预测?如果我的批量大小为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()

1 个答案:

答案 0 :(得分:0)

像马克西米利安在他的评论中写道,你的网络用于预测的输入应该与训练期间输入的形状相同。在这种情况下,我们无法确定这是什么,因为您的代码中没有进行任何培训;看起来你正在加载一个已经训练过的模型:

model = load_model("20180302_0340e500b30_s452.h5")

但是,以下行中变量的命名表明您始终在t时间使用一个数据点(单个值?),以便预测t+1时的下一个值:< / p>

X_train = training_set[0:len(training_set)-1]
y_train = training_set[1:len(training_set)]

如果在训练期间确实使用了这种代码,那么您还应该使用类似的预测设置:为某个时间点t提供一个数字作为输入,获取下一个时间步的预测{ {1}}作为输出。

  

如果我的批量大小为30,我是否需要提供29种最新已知价格?

在培训期间使用批次更为常见,在进行预测时,批量大小为1更为常见,但如果您有大量新输入,则可以同时对整批批次进行预测你想做出预测。

无论哪种方式,本引文中您的问题的答案都是。批量大小是指您拥有/想要的输入输出对的数量(其中输入可以是许多元素的向量,我怀疑在您的情况下恰好只有一个元素)。如果您的批量大小为30,则表示您提供30个不同的输入值,对应30个不同的时间步长t+1作为输入,并为30个不同的匹配时间步长获得30个不同的输出[t0, t1, ..., t29]一下子。