Python Keras批量在线培训预测而非学习

Python Keras批量在线培训预测而非学习,python,machine-learning,keras,lstm,Python,Machine Learning,Keras,Lstm,我一直在做一个兼职项目,试图和Keras一起学习机器学习,我想我被困在这里了 我的目的是预测拥有31个站点的公共共享系统的自行车可用性。目前,我只训练我的模型预测一个站点的可用性。我想通过批量培训进行在线预测。我想开始给它一些自行车,例如,00:00,有N个给定的时间步长加上一年中的某一天和工作日 输入数据如下: 一年中的某一天,编码为整数,1-JAN为0,2-JAN为1 以5'间隔编码为整数的时间与以前相同,00:00为0,00:05为1 工作日,再次编码为int 然后对这3列进行规范化,

我一直在做一个兼职项目,试图和Keras一起学习机器学习,我想我被困在这里了

我的目的是预测拥有31个站点的公共共享系统的自行车可用性。目前,我只训练我的模型预测一个站点的可用性。我想通过批量培训进行在线预测。我想开始给它一些自行车,例如,
00:00
,有N个给定的时间步长加上一年中的某一天和工作日

输入数据如下:

  • 一年中的某一天,编码为整数,1-JAN为0,2-JAN为1
  • 以5'间隔编码为整数的时间与以前相同,00:00为0,00:05为1
  • 工作日,再次编码为int
然后对这3列进行规范化,然后我添加引用自行车的列,它们是一个热编码,如果站点有20辆自行车,编码的数组长度将为21。接下来的教程或多或少地将数据转换为一个有监督的问题

现在,我将数据集分为训练样本(65%)和测试样本(35%)。然后将神经网络定义为:

model = Sequential()
model.add(LSTM(lstm_neurons, batch_input_shape=(1000, 5, 24), stateful=False))
model.add(Dense(max_cases, activation='softmax'))
model.compile(loss='categorical_crossentropy', optimizer='adam', metrics = ['accuracy', 'mse', 'mae'])

符合模型

for i in range(epochs):
    model.fit(train_x, train_y, epochs=1, batch_size=new_batch_size, verbose=2, shuffle=False)
    model.reset_states()

    w = model.get_weights()

精确的情节看起来不错,但损失一个做奇怪的事情

一旦培训结束,我预测值,我将从无状态更改为有状态,并修改批大小

model = Sequential()
model.add(LSTM(lstm_neurons, batch_input_shape=(1, 5, 24), stateful=True))
model.add(Dense(max_cases, activation='softmax'))
model.compile(loss='categorical_crossentropy', optimizer='adam', metrics = ['accuracy', 'mse', 'mae'])
model.set_weights(w)

现在,我使用以前得到的测试值进行预测

for i in range(0, len(test_x)):

    auxx = test_x[i].reshape((batch_size, test_x[i].shape[0], test_x[i].shape[1])) # (...,n_in,4)

    yhat = model.predict(auxx, batch_size = batch_size)
这就是结果,我将它放大一点,以便更仔细地观察,而不是拥挤的情节。它看起来一点也不坏,它有一些错误,但总的来说,预测看起来足够好了

在此之后,我创建了一组数据来进行在线预测和预测

for i in range(0,290):

    # ...

    predicted_bikes =  model.predict(data_to_feed, batch_size = 1)

   # ...
结果就是这条,一条连续的线


正如我在前面的图中所看到的,预测值像一个间隔一样移动到实际值,这使我认为神经网络已经学会重复先前的值。这就是为什么我在这里得到了一条直线。

你尝试过验证培训吗?是的,不幸的是结果是相同的。请你澄清一下(1)
batch\u input\u shape=(1000,5,24)的每个维度是什么意思?(2)使LSTM状态化用于在线预测的基本原理是什么?【批量大小、时间步长、功能】功能有3个(一年中的一天、一周、一次)和21个自行车(一个热编码)