如何利用keras和tens改进预测

2024-04-16 07:48:49 发布

您现在位置:Python中文网/ 问答频道 /正文

我使用tensorflow和keras对一些历史数据进行回归。数据类型如下:

id,timestamp,ratio "santalucia","2018-07-04T16:55:59.020000",21.8 "santalucia","2018-07-04T16:50:58.043000",22.2 "santalucia","2018-07-04T16:45:56.912000",21.9 "santalucia","2018-07-04T16:40:56.572000",22.5 "santalucia","2018-07-04T16:35:56.133000",22.5 "santalucia","2018-07-04T16:30:55.767000",22.5

我把它重新表述为一个时间序列问题(25个时间步),这样我就可以预测(做一个回归)序列的下一个值(方差不应该太高)。我还使用sklearn.preprocessing MinMaxScaler将数据缩放到范围(-1,1)或(0,1),这取决于我使用LSTM还是Dense(分别)。 我正在使用两种不同的体系结构进行培训:

密度如下:

def get_model(self, layers, activation='relu'):
    model = Sequential()
    # Input arrays of shape (*, layers[1])
    # Output = arrays of shape (*, layers[1] * 16)
    model.add(Dense(units=int(64), input_shape=(layers[1],), activation=activation))
    model.add(Dense(units=int(64), activation=activation))
    # model.add(Dropout(0.2))

    model.add(Dense(units=layers[3], activation='linear'))
    # activation=activation))

    # opt = optimizers.Adagrad(lr=self.learning_rate, epsilon=None, decay=self.decay_lr)
    opt = optimizers.rmsprop(lr=0.001)
    model.compile(optimizer=opt, loss=self.loss_fn, metrics=['mae'])
    model.summary()
    return model

这或多或少提供了很好的结果(与tensorflows的预测房价教程中的架构相同)。在

但是,LSTM并没有给出好的结果,它通常会停留在一个值(例如,40.0123123,40.123123,41.09090…)附近,我不知道为什么或如何改进它。体系结构是:

^{pr2}$

我目前的训练批量为200,每批增加1.5倍。每次拟合都由50个纪元组成,我使用的keras earlystup回调至少有20个epoch。在

我尝试过添加更多的层,更多的单元,减少层,单元,增加和减少学习速率,等等,但是每次它都是围绕着一个值。有什么原因吗?在

另外,你知道有什么好的做法可以应用于这个问题吗?在

干杯


Tags: selfaddmodellayers时间序列activationkeras
1条回答
网友
1楼 · 发布于 2024-04-16 07:48:49

你有没有试过抑制一个验证集,看看这个验证集的模型性能在训练集上的跟踪效果如何?这就是我经常发现自己太不合身的原因。在

一个简单的函数(adapted from here)可以帮助您完成此操作:

hist = model.fit_generator(...)
def gen_graph(history, title):
    plt.plot(history.history['categorical_accuracy'])
    plt.plot(history.history['val_categorical_accuracy'])
    plt.title(title)
gen_graph(hist, "Accuracy, training vs. validation scores")

还有,你们有足够的样品吗?如果你真的,真的确定你已经尽你所能在预处理方面,在超参数调整方面。。。生成一些合成数据或进行一些数据扩充偶尔对我有帮助。在

相关问题 更多 >