Keras批量培训在线预测不学习

时间:2018-05-07 09:43:44

标签: python machine-learning keras lstm

我一直在努力学习与Keras一起学习机器学习的辅助项目,我想我被困在这里。

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

输入数据是:

  • 一年中的某一天,编码为整数,1-JAN为0,2-JAN为1 ...
  • 5'以与之前相同的方式编码为int的间隔,00:00为0,00:05为1 ...
  • 工作日,再次编码为int

然后将这3列标准化,然后我添加引用自行车的列,它们是一个热编码,如果该站有20个自行车,则编码阵列将具有长度21.然后将数据转换为监督问题或多或少地跟随https://documentation.magnolia-cms.com/display/DOCS56/Upgrading+to+Magnolia+5.6.x#UpgradingtoMagnolia5.6.x-Vaadin8andcustommodules教程。

现在我将数据集分为训练(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'])

this

安装模型

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()

enter image description here

准确性情节看起来不错,但损失很奇怪。

培训结束后,我预测值,我从无状态变为有状态并修改批量大小

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)

Stats

我现在预测使用我之前获得的测试值

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)

这是结果,我正在缩放它以进行仔细观察而不是拥挤的情节。它看起来并不坏,它有一些错误,但整体预测看起来还不错。

New model after training

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

for i in range(0,290):

    # ...

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

   # ...

结果是这一个,一条连续的线。

Train plot zoomed

正如我在之前的情节中看到的那样,预测值会像以后的间隔一样移动到实际值,这使我认为神经网络已经学会重复先前的值。这就是为什么我在这里有一条直线。

0 个答案:

没有答案