gpt4 book ai didi

python - 如何使用 keras 和 tensorflow 改进预测

转载 作者:行者123 更新时间:2023-12-01 08:47:07 25 4
gpt4 key购买 nike

我正在使用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

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

但是,LSTM 并没有给出好的结果,它通常最终会卡在某个值附近(例如 40 (40.0123123, 40.123123,41.09090...),我不明白为什么或如何改进它。架构是:

def get_model(self, layers, activation='tanh'):
model = Sequential()
# Shape = (Samples, Timesteps, Features)
model.add(LSTM(units=128, input_shape=(layers[1], layers[2]),
return_sequences=True, activation=activation))

model.add(LSTM(64, return_sequences=True, activation=activation))

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

opt = optimizers.Adagrad(lr=0.001, decay=self.decay_lr)
model.compile(optimizer=opt, loss='mean_squared_error', metrics=['accuracy'])
model.summary()
return model

我目前的训练批量大小为 200,每次拟合都会以 1.5 的速度增加。每次拟合由 50 个 epoch 组成,我使用至少 20 个 epoch 的 keras Earlystopping 回调。

我尝试过添加更多层、更多单元、减少层、单元、增加和减少学习率等,但每次它都会陷入一个值。这有什么原因吗?

此外,您知道可以应用于此问题的任何良好实践吗?

干杯

最佳答案

您是否尝试过保留验证集,看看训练集上的模型性能与验证集的跟踪情况如何?这通常是我发现自己过度拟合的原因。

执行此操作的简单函数 ( 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")

另外,你们有足够的 sample 吗?如果您真的非常确定自己在预处理和超参数调整方面已经做了尽可能多的工作...生成一些合成数据或进行一些数据增强有时会对我有所帮助。

关于python - 如何使用 keras 和 tensorflow 改进预测,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53265281/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com