java版本lstm_使用LSTM的时间序列预测

我正在使用Jason Brownlee's tutorial(mirror)在某些syslog /网络日志数据上应用LSTM网络 . 他是大师!

我有过去1年每天的系统日志数据(特定事件),所以我使用LSTM网络进行时间序列分析 . 我正在使用Keras深度学习库中的LSTM .

我认为 -

关于Batch_size

一批数据是来自训练数据集的固定大小的行数,用于定义在更新网络权重之前要处理的模式数 . 基于 batch_size ,模型从数据中随机抽取样本进行分析 . 对于时间序列,这是不可取的,因此batch_size应始终为1 .

关于设置随机值的值

默认情况下,一个纪元内的样本在暴露给网络之前进行混洗 . 这对于LSTM来说是不合需要的,因为我们希望网络在整个观察序列中学习时 Build 状态 . 我们可以通过将“shuffle”设置为“False”来禁用样本的混洗 .

Scenario1 - 使用以上两条规则/指南 - 我使用不同数量的神经元,纪元大小和不同层进行了多次试验,并从基线模型(持久性模型)获得了更好的结果 .

Scenario2- 没有使用上述指南/规则 - 我运行了几个不同数量的神经元,时期大小和不同层次的试验,并获得了比方案1更好的结果 .

Query - 将shuffle设置为True,将Batch_size值设置为1以表示时间序列 . 这是规则还是准则?

在阅读教程时似乎逻辑上不应该改变时间序列的数据,因为我们不想改变数据序列,但对于我的数据,如果我让数据被洗牌,结果会更好 . 最后我想,重要的是我如何通过我的跑步得到更好的预测 . 我认为我应该尝试将“理论”放在具体证据上,例如指标,肘部,RMSE等 .

请开心 .

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Java中实现LSTM(长短期记忆)模型进行时间序列预测可以使用深度学习库如TensorFlow或Keras。以下是一个使用Keras库实现LSTM时间序列预测的简单示例代码: ```java import org.tensorflow.Graph; import org.tensorflow.Session; import org.tensorflow.Tensor; import org.tensorflow.TensorFlow; import org.tensorflow.op.Ops; import org.tensorflow.op.core.Placeholder; import org.tensorflow.op.core.Variable; import org.tensorflow.op.math.Add; import org.tensorflow.op.math.MatMul; import org.tensorflow.op.nn.ReLU; import java.nio.FloatBuffer; public class LSTMPrediction { public static void main(String[] args) { try (Graph graph = new Graph()) { Ops ops = Ops.create(graph); // 输入数据的占位符 Placeholder<Float> input = ops.placeholder(Float.class, Placeholder.shape(Shape.make(-1, 1))); // LSTM模型参数 Variable<Float> weights = ops.variable(ops.constant(new float[][]{{0.1f}, {0.2f}})); Variable<Float> biases = ops.variable(ops.constant(new float[]{0.3f})); // LSTM层的计算 MatMul<Float> matmul = ops.math.matmul(input, weights); Add<Float> add = ops.math.add(matmul, biases); ReLU<Float> relu = ops.nn.relu(add); // 创建一个会话执行图 try (Session session = new Session(graph)) { // 初始化所有变量 session.runner().addTarget(ops.init()).run(); // 准备输入数据 float[] inputData = {0.1f, 0.2f, 0.3f}; FloatBuffer inputBuffer = FloatBuffer.wrap(inputData); // 运行图并获取输出结果 Tensor<Float> inputTensor = Tensor.create(Shape.make(1, inputData.length), inputBuffer); Tensor<Float> outputTensor = session.runner().feed(input.asOutput(), inputTensor).fetch(relu.asOutput()).run().get(0); // 处理输出结果 float[] outputData = new float[outputTensor.numElements()]; outputTensor.copyTo(outputData); System.out.println("预测结果:"); for (float output : outputData) { System.out.println(output); } } } catch (Exception e) { e.printStackTrace(); } } } ``` 上述代码使用TensorFlow Java API来实现LSTM模型。在代码中,定义了一个LSTM层的计算图,并使用会话执行图以获取输出结果。在这个示例中,输入数据为长度为3的一维数组,输出为经过LSTM层处理后的结果。 请注意,这只是一个简单的示例代码,实际应用中可能需要更复杂的模型和数据处理。你可以根据自己的需求修改和扩展代码。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值