Emi*_*dov 9 python machine-learning deep-learning keras
我试图理解 Keras 中 ANN 架构的概念。任何神经网络中输入神经元的数量应等于特征/属性/列的数量。因此,在矩阵为 (20000,100) 的情况下,我的输入形状应该有 100 个神经元。在Keras页面的示例中,我看到了一段代码:
model = Sequential([Dense(32, input_shape=(784,)),
Run Code Online (Sandbox Code Playgroud)
,这几乎意味着输入形状有 784 列,输出空间的维数为 32,这意味着第二层的输入为 32。我的理解是,发生如此显着的下降是因为某些单元不是由于激活函数而被激活。我的理解正确吗?
同时,另一段代码显示输入神经元的数量高于特征的数量:
model = Sequential()
model.add(Dense(64, activation='relu', input_dim=20))
model.add(Dropout(0.5))
model.add(Dense(64, activation='relu'))
model.add(Dropout(0.5))
model.add(Dense(10, activation='softmax'))
Run Code Online (Sandbox Code Playgroud)
这个例子我不清楚。单元的大小怎么可能大于输入维度的数量?
密集层中神经元的总数是机器学习和数据科学界尚未达成共识的一个话题。有许多启发式方法用于定义这一点,我建议您参阅交叉验证上的这篇文章,其中提供了更多详细信息:https://stats.stackexchange.com/questions/181/how-to-choose-the-number-前馈神经网络中的隐藏层和节点。
总之,您指定的两种方法之间的隐藏单元数量很可能源自重复实验和试错以达到最佳精度。
然而,对于更多的背景,正如我提到的,这个问题的答案是通过实验。输入神经元的 784 最有可能来自 MNIST 数据集,这些图像的大小为 28 x 28 = 784。我见过神经网络的实现,其中隐藏层有 32 个神经元就很好。将每一层视为维度变换。即使降到 32 维,也并不一定意味着它会失去准确性。此外,如果您尝试将点映射到可能更容易分类的新空间,从较低维度空间到较高维度空间也是很常见的。
最后,在 Keras 中,该数字指定当前层有多少个神经元。在底层,它计算出权重矩阵以满足从前一层到当前层的前向传播。在这种情况下,它将是 785 x 32,并有 1 个额外的神经元作为偏置单元。
神经网络基本上是矩阵乘法,您在第一部分中讨论的下降不是由于激活函数造成的,它只是由于矩阵乘法的性质而发生:
这里的计算是:输入*权重=输出
所以 -> [BATCHSIZE, 784] * [784, 32] = [BATCHSIZE, 32] -> 输出维度
通过这个逻辑,我们可以轻松地解释如何让输入形状 << 单位大小,它将给出以下计算:
-> [BATCHSIZE, 20] * [20, 64] = [BATCHSIZE, 64] -> 输出维度
希望对您有帮助!
了解更多 :
https://en.wikipedia.org/wiki/Matrix_multiplication
| 归档时间: |
|
| 查看次数: |
19080 次 |
| 最近记录: |