根据输入,我使用Bike Sharing dataset来预测一天的租金数量。我将使用2011年的数据来训练和2012年的数据进行验证。我成功建立了一个线性回归模型,但现在我试图找出如何使用递归神经网络预测时间序列。
数据集有10个属性(例如月份,工作日或不工作日,温度,湿度,风速),所有数字,但属性为日(星期日:0,星期一:1等)。
我假设有一天能够并且可能取决于前几天(并且我不需要所有10个属性),所以我想到了使用RNN。我不太了解,但我读了一些东西,还this。我想到这样的结构。
我将10 input neurons
,a hidden layer
和1 output neuron
。我不知道如何决定隐藏层有多少神经元。
我想我需要一个矩阵将输入层连接到隐藏层,一个矩阵将隐藏层连接到输出层,一个矩阵用于连接相邻时间步骤t-1
到{{1}的隐藏层},t
到t
。这总共有3个矩阵。
在一个教程中,激活函数是t+1
,虽然我不确定,如果我使用sigmoid函数,我只会在0和1之间输出。我应该使用什么作为激活函数?我的计划是重复sigmoid
次:
这是正确的方法吗?我想要实数数值作为输出,而不是0-1之间的数字。
答案 0 :(得分:1)
如果您只是想学习基础知识,这似乎是正确的方法。如果你想建立一个实际使用的神经网络,这是一个非常糟糕的方法,正如Marcin的评论所说的那样,几乎所有构建神经网络用于实际应用的人都是通过使用具有现成神经网络模拟的软件包来实现的。让我逐一回答你的问题......
为您的神经网络选择正确的架构没有黄金法则。人们已经根据经验建立了许多经验规则,并且通过尝试各种组合并比较输出来确定正确数量的神经元。一个很好的起点是(输入加输出神经元的3/2倍,即(10 + 1)*(3/2)...所以你可以从隐藏层中的15/16神经元开始,然后继续根据您的输出减少数量。)
同样,没有“正确”的功能。这完全取决于适合您的数据的内容。此外,有许多类型的sigmoid函数,如双曲正切,逻辑,RBF等。一个好的起点是逻辑函数,但同样你只能通过反复试验找到正确的函数。
所有激活函数(包括分配给输出神经元的函数)将为您提供0到1的输出,并且您必须使用乘数将其转换为实数值,或者使用多种输出神经元进行某种编码。手动编码会很复杂。
要考虑的另一个方面是你的训练迭代。这样做'n'并没有帮助。您需要通过反复试验找到最佳训练迭代,以避免不合适和过度拟合。
正确的方法是使用Python或R中的包,这将允许您快速训练具有大量自定义的神经网络,在那里您可以训练和测试具有不同激活功能的多个网络(甚至不同训练算法)和网络架构没有太多麻烦。通过一定量的反复试验,您最终会找到能够提供理想输出的网络。