在 Keras 中,密集层在其权重和输入张量之间执行点积。如文档中所述,默认行为是在输入张量的秩大于 2 时压平输入张量。但是,与本文档相反,密集层实际上应用于输入张量的最后一个轴。
让我们用一个例子来澄清。假设一个具有 m 个单位的密集层应用于形状为 (n_dim1, n_dim2, ..., n_dimk) 的输入张量。输出形状将为 (n_dim1, n_dim2, ..., m)。
此观察结果意味着 TimeDistributed(Dense(...)) 和 Dense(...) 在功能上是等效的。此外,应用具有共享权重的密集层会产生有趣的效果。考虑以下玩具网络:
<code class="python">model = Sequential() model.add(Dense(10, input_shape=(20, 5))) model.summary()</code>
下面的模型摘要仅显示 60 个可训练参数:
_________________________________________________________________ Layer (type) Output Shape Param # ================================================================= dense_1 (Dense) (None, 20, 10) 60 ================================================================= Total params: 60 Trainable params: 60 Non-trainable params: 0 _________________________________________________________________
发生这种情况是因为密集层中的每个单元都连接到每个单元的所有五个元素输入中具有相同权重的行。因此,仅需要 10 × 5 10(每单位偏差参数)= 60 个参数。
为了进一步说明此行为,请考虑以下视觉表示:
[密集层的图像Keras 中二维或多维输入上的应用]
在此图像中,Dense 层(以红色显示)应用于三维输入张量。输出张量也是三维的,输入张量中的每一列独立映射到输出张量中的一列。
以上是Keras 中的密集层会使输入张量变平吗?的详细内容。更多信息请关注PHP中文网其他相关文章!