凯拉斯的密集层单位

时间:2019-05-24 21:36:31

标签: machine-learning keras

我试图了解Keras中的ANN架构概念。任何NN中输入神经元的数量应等于特征/属性/列的数量。因此,在矩阵为(20000,100)的情况下,我的输入形状应具有100个神经元。在Keras页面的示例中,我看到了一个代码:

model = Sequential([Dense(32, input_shape=(784,)),

,这几乎意味着输入形状具有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'))

我不清楚这个例子。单位大小大于输入尺寸的数量怎么可能?

2 个答案:

答案 0 :(得分:2)

神经网络从本质上讲是矩阵乘法,您在第一部分中谈到的下降不是由于激活函数引起的,而是因为矩阵乘法的性质而发生的:

这里的计算是:输入*权重=输出

so-> [BATCHSIZE,784] * [784,32] = [BATCHSIZE,32]->输出尺寸

借助这种逻辑,我们可以轻松地解释如何具有输入形状<<单位大小,它将给出计算结果:

-> [BATCHSIZE,20] * [20,64] = [BATCHSIZE,64]->输出尺寸

希望对您有帮助!

要了解更多信息:

https://en.wikipedia.org/wiki/Matrix_multiplication

答案 1 :(得分:0)

密集层中神经元的总数是一个尚未在机器学习和数据科学界内达成共识的话题。有很多启发式方法可用于定义此方法,我请您参考交叉验证的这篇文章,其中提供了更多详细信息:https://stats.stackexchange.com/questions/181/how-to-choose-the-number-of-hidden-layers-and-nodes-in-a-feedforward-neural-netw

总而言之,您指定的两种方法之间的隐藏单位数很可能源自重复的实验和反复试验以达到最佳精度。

但是,对于更多情况,我提到的答案是通过实验。用于输入神经元的784最有可能来自MNIST数据集,这些图像是28 x 28 = 784的图像。我已经看到了神经网络的实现,其中32层隐藏神经元是好的。将每一层都视为维度转换。即使缩小到32个维度,也不一定意味着它会失去准确性。同样,从低维空间过渡到高维空间,这很常见,如果您尝试将点映射到可能更易于分类的新空间。

最后,在Keras中,该数字指定当前层的神经元数量。在引擎盖下,它计算出权重矩阵,以满足从上一层到当前层的向前传播。那将是785 x 32,带有1个额外的神经元作为偏置单元。