我正在使用Jason Brownlee's tutorial(mirror)在某些系统日志/网络日志数据上应用LSTM网络。他是大师!
我有过去1年每天的系统日志数据(特定事件),所以我使用LSTM网络进行时间序列分析。我正在使用Keras深度学习库中的LSTM。
据我了解 -
一批数据是训练中固定大小的行数 数据集,用于定义在更新之前要处理的模式数 网络的权重。基于 batch_size 模型 从数据中随机抽取样本进行分析。对于时间序列 这是不可取的,因此batch_size应始终为1。
默认情况下,epoch中的样本在暴露给网络之前会进行混洗。这对于LSTM来说是不合需要的 因为我们希望网络在学习过程中建立状态 观察的顺序。我们可以禁用洗牌 通过将“shuffle”设置为“False”来进行采样。
Scenario1 - 使用以上两个规则/指南 - 我运行了几个具有不同神经元数量,时期大小和不同层次的试验,并从基线模型(持久性模型)获得了更好的结果。
Scenario2 - 没有使用上述指南/规则 - 我运行了几个不同数量的神经元,时期大小和不同层次的试验,并获得了比情景1更好的结果。
查询 - 为时间序列设置shuffle为True,将Batch_size值设置为1。这是规则还是准则?
阅读教程似乎是合乎逻辑的,因为我们不想改变数据序列,所以时间序列的数据不应该被洗牌,但对于我的数据,如果我让数据被洗牌,结果会更好。 最后我想,重要的是我如何通过我的跑步得到更好的预测。 我认为我应该尝试将“理论”放在具体证据上,例如指标,肘部,RMSE等。
请开心。
答案 0 :(得分:0)
这在很大程度上取决于数据的大小,也取决于变量的数量,根据我的经验减少批量大小会产生更好的结果,因为更新更频繁,但在庞大的数据集中,它非常昂贵。而且你必须玩这种权衡(训练时间与结果)。
关于你的洗牌可能是你的数据与过去没有相关的情况,如果是这样的话,洗牌数据有助于网络学习并能够推广(如按标签排序)检查原因7以下37 reasons your neural network not working
批量大小越难以概括(原因11)。当数据明显依赖于过去时,您可以将Keras中的LSTM声明为有状态,这意味着:“根据Keras API,”在一个批次中为样本计算的状态将被重新用作下一批样本的初始状态“。希望这会有所帮助。