Keras 密集层输入中的意外重塑:揭开谜底
在 Keras 中,密集层是神经网络常用的构建块。但是,用户可能会遇到意外行为,即在应用图层操作之前输入未展平。
在提供的代码片段中:
input1 = layers.Input((2,3)) output = layers.Dense(4)(input1)
而不是使用以下方式展平输入张量 input1维度 (2,3) 中,我们令人惊讶地观察到维度为 (?, 2, 4) 的输出张量输出。这与文档中关于秩大于 2 的输入应该被展平的说法相矛盾。
然而,检查当前的 Keras 实现,揭示了不同的行为:Dense 层实际上应用于输入张量的最后一个轴。这意味着在给定的示例中,input1 的每个 2D 行都独立地通过密集连接层。因此,输出保留第一个维度,并将指定数量的单位 (4) 添加到最后一个维度。
与文档的这种背离具有重大影响:
示例:
model = Sequential() model.add(Dense(10, input_shape=(20, 5))) model.summary()
尽管密集连接层有 10 个单元,但生成的模型摘要仅显示 60 个可训练参数。这是因为每个单元以相同的权重连接到每行的 5 个元素。
视觉插图:
[图像:在Keras 中具有二维或更多维度的输入]
总之,Keras 中的 Dense 层独立应用于输入张量的最后一个轴,导致在某些场景下输出不平坦。此行为对模型设计和参数共享具有影响。
以上是为什么 Keras 密集层输入会意外重塑?的详细内容。更多信息请关注PHP中文网其他相关文章!