我一直认为,单样本数据的predict_generator()可以像您从生成器中馈入一个或多个值,并且可以预测1(或您指定的许多时间步长)一样。然后,如果输入错误,它将在下一个输入中进行预测,就好像它是从正确的值开始的。因此,我希望我的预测能跟上我相对较好的图表,但会有所延迟。我希望这是有道理的。无论如何,我只是在分析亚马逊股票的收盘价。我的代码在下面,图形输出也是如此。红色是可以预测的,蓝色是实际的。
data = pd.read_csv("D:\\School\\Spring_2019\\GraduateProject\\Stock Data\\AMZN.csv",header=0,usecols=['Date','Close'],index_col='Date',parse_dates=True)
# Data Scaling
scaler = MinMaxScaler()
data_s = scaler.fit_transform(data)
data_s
# Data Splitting into Train, Test, and Validation
trainLen = int(0.5*len(data_s))
train = data_s[0:trainLen,:]
valLen = int(0.25*len(data_s))
validation = data_s[trainLen:(trainLen+valLen),:]
test = data_s[trainLen+valLen:,:]
# Generators
trainGen = TimeseriesGenerator(data=train,targets=train,
length=1,sampling_rate=1,batch_size=2)
valGen = TimeseriesGenerator(data=validation,targets=validation,
length=1,sampling_rate=1,batch_size=2)
testGen = TimeseriesGenerator(data=test,targets=test,
length=1,sampling_rate=1,batch_size=2)
# Network Design
AMZN = Sequential()
AMZN.add(LSTM(256,input_shape=(1,1)))
AMZN.add(Dense(1,activation='sigmoid'))
# Model Compiler
AMZN.compile(loss='mean_squared_error',optimizer='adam',metrics=['accuracy'])
# Model Fitting
epochSteps = int(trainLen/2)
epochSteps_v = int(valLen/2)
AMZN.fit_generator(trainGen,steps_per_epoch = epochSteps,epochs=5,verbose=1,
validation_data=valGen,validation_steps=epochSteps_v)
predicted = AMZN.predict_generator(testGen,verbose=1)
很明显,我还没有缩小数据。让我知道你有什么想法。我假设Keras生成器将numpy数组重塑为3D。我本来没想到它会起作用,因为我从未重塑过。是否对预测的实际作用以及为什么它似乎能够检测到市场的下行趋势有任何想法,但始终都高于或低于实际值?
编辑:我也得到了这个奇怪的结果,如果仅更改历元,我将得到以下结果;
当我将历元更改为10时,会发生这种情况。5似乎可以工作,但由于某些原因10和20却不能。