首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >批次大小与输入层神经元数量的关系

批次大小与输入层神经元数量的关系
EN

Data Science用户
提问于 2018-08-08 17:36:25
回答 2查看 8.1K关注 0票数 5

关于LSTM神经网络,我无法理解批次大小、输入层中的神经元数量与输入中的“变量”或“列”数之间的关系。(假设有一种关系,尽管看到了相反的例子,我还是不明白为什么没有关系)

为了清晰起见,我将使用一个示例来描述我的查询。

让我们假设数据集包含三列输入和一列输出。因此,它将类似于输入变量1输入变量2输入变量3输出变量1

据我所知,LSTM网络的输入层必须有3个神经元对应于每个输入变量。它不能少或多。尽管我看到过像这个答案这样的例子(这似乎描述得很好,但不幸的是,我无法理解)。

现在,让我们说,我们有50行以上的4列。

这对我来说基本上意味着我们有50个样本。如果批次大小是5,那么我们有多少输入神经元?输入层中的神经元数目是否与批次大小无关?我理解批次大小的方法是,在更新权重之前,神经网络将看到的样本数。假设输入层中只有三个神经元,那么我们将传递第一行输入变量,然后是第二行输入变量,并在更新权重之前重复到第五行。这和仅仅通过第五行有什么不同呢?

EN

回答 2

Data Science用户

发布于 2018-08-09 03:11:41

总的来说,我认为你已经理解了这两个概念。我会尽量更详细地讨论这两个问题。

输入层尺寸

在神经网络(NN)中,输入层的大小总是等于数据中变量的数量(或我们在机器学习中通常称之为特征)。

批量

这是指网络在更新其权重之前将看到多少个数据样本。

通常,当进行梯度下降(即训练神经网络的算法)时,网络将输入所有样本,以计算损失和更新权重。然而,尤其是在深度神经网络(DNNs)中,由于数据集的大小太大,即使网络有足够的内存,梯度的计算也是不可行的。我们所做的是一次传递几个样本(称为批处理),并对它们进行模型训练。然后又通过另一批,以此类推。每次迭代时输入到模型的样本数称为批处理大小。

两个

之间的

关系

理论上,如果您有许多特性(以千计),您就不能使用足够大的批处理大小,而您拥有的功能越多,可以使用的批处理大小就越少。然而,在实践中,我发现这两者实际上是无关的!在深度神经网络中,批次大小主要取决于模型的大小。一种简单(但不总是准确)的估计这种大小的方法是通过模型中可训练参数的数量来估计。更多的参数,意味着更多的模型内存(和更长的梯度计算),导致一个较小的批处理大小。在具有多层的DNN中,只有一小部分参数是输入层的参数。因此,特性的数量在批处理大小的选择中起着次要作用。

示例

在您的示例中,您说您有50行4列,其中3个是输入变量。

输入层的神经元数为3,与输入变量(或特征)的数目相匹配。这是我们无法改变的,即使我们想改变!

批次大小是我们可以改变的。假设我们使用5的批次大小。

第一次迭代:

在第一次迭代中,NN将被赋予前5行数据。对于每一列,前三列将传递到网络的第一层,该层将计算一个输出。在生成所有5个输出后,将它们与第4列的前5行进行比较,以计算损失。使用此损失,网络将计算渐变并执行更新。同样,这个损失对应于前5个样本,而不仅仅是第5个样本。

第二次迭代:

行6-10将传递给网络,网络将执行与第一步相同的过程。

第10次迭代: 45-50行将传递给网络。这标志着神经网络已经看过每一个数据样本一次。在机器学习的背景下,我们称之为时代。此时,数据被洗牌,第二个时代的第一次迭代开始了。

注:

在大多数框架中,每个批中的样本都是由网络并行处理的,而不是顺序处理的。这对结果没有影响,我只想指出这一点。

票数 7
EN

Data Science用户

发布于 2019-10-15 17:50:26

我不同意@吉布提2011关于“输入层的神经元数将为3,以匹配输入变量(或特征)的数目,这一点我们不能改变,即使我们想改变!”神经元的数量,也称为单位或节点,是一个完全自由的参数,由你来指定。它不需要匹配功能的数量。不过,它决定了这一层输出的尺寸。

查看这里的示例https://keras.io/layers/core/,其中第一层

代码语言:javascript
复制
model.add(Dense(32, input_shape=(16,)))

这里32是神经元的数目,16是特征的数目。另一个隐藏层

代码语言:javascript
复制
model.add(Dense(32))

其中,32也是神经元的数目,在角点中,您不需要指定第一个隐藏层(p.s )之后的输入维数(来自前一层的输出)。输入层不是真实层,而是张量)。

还请查看此示例https://machinelearningmastery.com/tutorial-first-neural-network-python-keras/,其中作者提到:

我们可以通过添加每一层来将其拼凑在一起:

  • 该模型期望有8个变量的数据行( input_dim=8参数)
  • 第一隐藏层有12个节点,并使用relu激活函数。
  • 第二隐藏层有8个节点,并使用relu激活函数。
  • 输出层具有一个节点,并使用sigmoid激活函数。
代码语言:javascript
复制
# define the keras model
model = Sequential()
model.add(Dense(12, input_dim=8, activation='relu'))
model.add(Dense(8, activation='relu'))
model.add(Dense(1, activation='sigmoid'))
票数 1
EN
页面原文内容由Data Science提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://datascience.stackexchange.com/questions/36651

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档