我是机器学习和 lstm 的新手。我指的是这个链接LSTM 用于多变量输入部分的编码器-解码器 LSTM 模型的多步预测。
这是我重塑训练和测试集后的数据集描述。
print(dataset.shape)
print(train_x.shape, train_y.shape)
print((test.shape)
(2192, 15)
(1806, 14, 14) (1806, 7, 1)
(364, 15)
在上面我有n_input=14, n_out=7
。
这是我的 lstm 模型描述:
def build_model(train, n_input):
# prepare data
train_x, train_y = to_supervised(train, n_input)
# define parameters
verbose, epochs, batch_size = 2, 100, 16
n_timesteps, n_features, n_outputs = train_x.shape[1], train_x.shape[2], train_y.shape[1]
# reshape output into [samples, timesteps, features]
train_y = train_y.reshape((train_y.shape[0], train_y.shape[1], 1))
# define model
model = Sequential()
model.add(LSTM(200, activation='relu', input_shape=(n_timesteps, n_features)))
model.add(RepeatVector(n_outputs))
model.add(LSTM(200, activation='relu', return_sequences=True))
model.add(TimeDistributed(Dense(100, activation='relu')))
model.add(TimeDistributed(Dense(1)))
model.compile(loss='mse', optimizer='adam')
# fit network
model.fit(train_x, train_y, epochs=epochs, batch_size=batch_size, verbose=verbose)
return model
在评估模型时,我得到的输出为:
Epoch 98/100
- 8s - loss: 64.6554
Epoch 99/100
- 7s - loss: 64.4012
Epoch 100/100
- 7s - loss: 63.9625
根据我的理解:(如有不对请指正)
Here my model accuracy is 63.9625
(通过查看最后一个纪元 100)。此外,这也不稳定,因为 epoch 99 和 epoch 100 之间存在差距。
以下是我的问题:
上面定义的纪元和批量大小与获得模型准确度有何关系?它的增量和减量如何影响模型精度?
我上面定义的 epoch、batch、n_input 对模型是否正确?
如何提高模型精度?上面的数据集大小对于这个模型来说是否足够好?
我无法链接所有这些参数,请帮助我了解如何通过上述因素实现更高的准确性。
具有非常大的纪元大小不一定会提高您的准确性。Epoch 大小可以将准确度提高到一定的限度,超过这个限度你就会开始过度拟合你的模型。非常低的值也会导致欠拟合。看到这个。所以看看 epoch 99 和 epoch 100 之间的巨大差异,你已经可以看出你对模型过度拟合了。根据经验,当您注意到准确度停止增加时,这就是理想的 epoch 数,通常应该在 1 到 10 之间。100 似乎已经太多了。
批量大小不会影响您的准确性。这仅用于根据 GPU 中的内存来控制速度或性能。如果你有巨大的内存,你可以有一个巨大的批量大小,所以训练会更快。
您可以做些什么来提高准确性: 1. 增加用于训练的数据集。2. 尝试改用卷积网络。从这个 youtube 频道或简而言之,在卷积网络上找到更多信息,CNN 可以帮助您确定在训练模型时要关注哪些特征。3. 尝试其他算法。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句