首页 >后端开发 >Python教程 >为什么 Keras 密集层输入会意外重塑?

为什么 Keras 密集层输入会意外重塑?

Barbara Streisand
Barbara Streisand原创
2024-10-21 07:57:30348浏览

Why Does the Keras Dense Layer Input Reshape Unexpectedly?

Keras 密集层输入中的意外重塑:揭开谜底

在 Keras 中,密集层是神经网络常用的构建块。但是,用户可能会遇到意外行为,即在应用图层操作之前输入未展平。

在提供的代码片段中:

input1 = layers.Input((2,3))
output = layers.Dense(4)(input1)

而不是使用以下方式展平输入张量 input1维度 (2,3) 中,我们令人惊讶地观察到维度为 (?, 2, 4) 的输出张量输出。这与文档中关于秩大于 2 的输入应该被展平的说法相矛盾。

然而,检查当前的 Keras 实现,揭示了不同的行为:Dense 层实际上应用于输入张量的最后一个轴。这意味着在给定的示例中,input1 的每个 2D 行都独立地通过密集连接层。因此,输出保留第一个维度,并将指定数量的单位 (4) 添加到最后一个维度。

与文档的这种背离具有重大影响:

  • 等效操作多维输入上的 TimeDistributed(Dense(...)) 和 Dense(...)。
  • Dense 层中各个单元共享权重矩阵。

示例:

model = Sequential()
model.add(Dense(10, input_shape=(20, 5)))

model.summary()

尽管密集连接层有 10 个单元,但生成的模型摘要仅显示 60 个可训练参数。这是因为每个单元以相同的权重连接到每行的 5 个元素。

视觉插图:

[图像:在Keras 中具有二维或更多维度的输入]

总之,Keras 中的 Dense 层独立应用于输入张量的最后一个轴,导致在某些场景下输出不平坦。此行为对模型设计和参数共享具有影响。

以上是为什么 Keras 密集层输入会意外重塑?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn