0

在给定输入的情况下,我正在使用Bike Sharing 数据集来预测一天内的租赁数量。我将使用 2011 年的数据进行训练,使用 2012 年的数据进行验证。我成功地建立了一个线性回归模型,但现在我试图弄清楚如何使用循环神经网络来预测时间序列。

数据集有 10 个属性(如月、工作日与否、温度、湿度、风速),虽然属性是天(星期日:0,星期一:1 等),但都是数字。

我假设有一天可以并且可能会取决于前几天(而且我不需要所有 10 个属性),所以我考虑使用 RNN。我知道的不多,但我读了一些东西,还有这个。我想到了这样的结构。

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

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

在一个教程中,激活函数是sigmoid,虽然我不确定,但如果我使用 sigmoid 函数,我只会得到 0 到 1 之间的输出。我应该使用什么作为激活函数?我的计划是重复n几次:

  • 对于每个训练数据:
    • 前向传播
      • 将输入传播到隐藏层,将其添加到先前隐藏层到当前隐藏层的传播。并将其传递给激活函数。
      • 将隐藏层传播到输出。
      • 查找错误及其导数,将其存储在列表中
    • 反向传播
      • 从列表中查找当前图层和错误
      • 查找当前隐藏层错误
      • 存储重量更新
    • 通过将权重(矩阵)乘以学习率来更新权重(矩阵)。

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

4

1 回答 1

1

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

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

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

  1. 我应该使用什么作为激活函数?

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

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

所有激活函数(包括分配给输出神经元的激活函数)将为您提供 0 到 1 的输出,您必须使用乘数将其转换为实际值,或者对多个输出神经元进行某种编码。手动编码会很复杂。

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

正确的方法是使用 Python 或 R 中的包,这将允许您快速训练具有大量自定义的神经网络,您可以在其中训练和测试具有不同激活函数(甚至不同训练算法)的多个网络和网络架构没有太多麻烦。通过一定程度的反复试验,您最终会找到能够为您提供理想输出的网络。

于 2016-05-13T10:00:15.583 回答