Keras 密集层输出形状难题
在 Keras 中,密集层早已被记录在应用点积之前压平其输入内核。然而,最近的行为表明情况并非如此。
问题:
如下面的测试代码所示,密集层的输出维护输入张量的最后一个轴:
input1 = layers.Input((2,3)) output = layers.Dense(4)(input1) print(output)
输出:
<tf.Tensor 'dense_2/add:0' shape=(?, 2, 4) dtype=float32>
答案:
与文档相反,Dense 层不会展平输入。相反,它沿着最后一个轴独立地应用其操作。因此,给定形状为 (n_dim1, n_dim2, ..., n_dimk) 的输入,输出形状变为 (n_dim1, n_dim2, ..., m),其中 m 是密集层中的单元数。
含义:
此行为使得 TimeDistributed(Dense(...)) 和 Dense(...) 在功能上等效。此外,由于权重在最后一个轴上共享,因此具有输入形状 (n_dim1, n_dim2, ..., n_dimk) 的密集层只有 m * n_dimk m (每单位的偏差参数)可训练参数。
视觉插图:
[将密集层应用于多维输入的神经网络图像]
此插图描述了如何独立应用密集层的操作沿着输入张量的最后一个轴。
以上是Keras 密集层何时压平输入?的详细内容。更多信息请关注PHP中文网其他相关文章!