1

我使用Bike Sharing dataset来预测一天中的租赁数量,并给出了输入。我将使用2011年的数据进行培训,并使用2012年的数据进行验证。我成功地建立了一个线性回归模型,但现在我正试图找出如何使用递归神经网络来预测时间序列。使用递归神经网络的时间序列预测

数据集有10个属性(例如月,工作日或不工作日,温度,湿度,风速),所有数字,尽管属性是日(星期日:0,星期一:1等)。

我认为有一天可能会取决于前几天(我不需要全部10个属性),所以我想过使用RNN。我不太了解,但我读了一些东西,也this。我想到这样的结构。

我将有10 input neurons,a hidden layer1 output neuron。我不知道如何决定隐藏层有多少神经元。

我想我需要一个矩阵输入层连接到隐藏层,一基体,以隐藏层连接到输出层,和一个矩阵来隐藏层中的相邻时间步t-1t连接,到t,到t+1。这是总共3个矩阵。

在一个教程中,激活函数是sigmoid,尽管我不确定,如果我使用sigmoid函数,我只会得到0和1之间的输出。应该如何使用激活函数?我的计划是重复这一n时间:

  • 对于每个训练数据:
    • 正向传播
      • 传播输入到隐含层,将它添加到以前隐藏层的传播到当前的隐藏层。并将其传递给激活函数。
      • 传播隐藏层输出。
      • 查找错误和它的衍生物,其存储在一个列表
    • 返回传播
      • 查找列表当前层和错误
      • 查找当前隐层误差
      • 商店更新权重
    • 通过multiplyi更新权重(矩阵)学习率。

这是做了正确的方法是什么?我需要真正的数值作为输出,而不是0-1之间的数字。

+1

您是否考虑过使用现成的RNN包,如凯拉斯在Python?这可以让你的任务更轻松。 –

回答

1

这似乎是正确的做法,如果你只是想学习基础知识。如果你想建立一个实际使用的神经网络,这是一个非常糟糕的方法,正如Marcin的评论所说,几乎每个构建神经网络用于实际应用的人都可以通过使用可用的神经网络模拟包来做到这一点。让我一一回答你的问题...

  1. 我不知道如何决定隐藏层有多少神经元。

没有黄金法则为您的神经网络选择正确的架构。人们从经验中建立了许多经验规则,通过尝试各种组合并比较输出来决定正确数量的神经元。一个好的起点是(你的输入加输出神经元的3/2倍,即(10 + 1)*(3/2)...所以你可以从隐藏层中的15/16神经元开始,然后继续根据您的输出减少数量。)

  1. 应该使用什么作为激活功能?

同样,没有“正确的”功能。它完全取决于什么适合您的数据。此外,还有许多类型的S形函数,如双曲正切,逻辑运算,RBF等等。一个好的起点将是逻辑函数,但是只有通过反复试验才能找到正确的函数。

  1. 这是正确的方法吗?我需要真正的数值作为输出,而不是0-1之间的数字。

所有激活功能(包括分配到输出神经元的)会给你输出为0到1,你将不得不使用乘数将其转换为实际值,或有某种编码与多个输出神经元。手动编码将会很复杂。

要考虑的另一方面是你的训练迭代。做'n'次并没有帮助。您需要通过反复试验找到最佳的训练迭代,以避免不合适和过度拟合。

正确的做法是在Python或R中使用软件包,这将允许您快速训练具有大量定制的神经网络,您可以在其中训练和测试具有不同激活函数的多个网络(甚至不同的训练算法)和网络架构,没有太多的麻烦。通过一些试验和错误,你最终会找到能够给你想要的输出的网络。

+0

我的意思是,我大概可以使用一个随时可用的软件包,但这只是一项任务,我想彻底学习。我可以实现这个,并将结果与​​软件包的结果进行比较。 我可以尝试实现,并通过更改* n *,*隐藏层*,*激活函数*和* alpha *的维度,我可以尝试优化结果。正如我所说,事情就是输出值。在数据集中,输出的avg为3405.如果从隐藏层传播到输出时不使用sigmoid函数,该怎么办?我可以用隐藏层乘以权重吗?初始神经网络权重呢? – nope

+0

如果你不使用sigmoid函数,那么数学上你的多层网络可以通过乘以所有的权重并最终使其成为一个线性方程来简化为单层网络......结果模型将与回归模型,这种模式会失败的神经网络点... ... - 你当然可以这样做,以比较你的训练网络如何执行回归模型......但隐藏层完全没有意义...... – Gaurav