为什么keras层中的L2规范化会扩展DIM?

2024-05-13 19:08:20 发布

您现在位置:Python中文网/ 问答频道 /正文

我想使用FaceNet体系结构的最后一层,它包含最后3层:

Dropout (Dropout) (None, 1792)
Bottleneck (Dense) (None, 128)
Bottleneck_BatchNorm (BatchNorm (None, 128)

我想添加一个额外的L2规范化层,如下所示:

norm = FRmodel.outputs
norm = Lambda(lambda x: K.l2_normalize(x, axis=1)), name="Normalization")(norm)

现在最后一层看起来是这样的:

Dropout (Dropout) (None, 1792)
Bottleneck (Dense) (None, 128)
Bottleneck_BatchNorm (BatchNorm (None, 128)
Normalization (Lambda) (1, None, 128)

我的问题是为什么二语规范化的维度从(None, 128)变为(1, None, 128)?因此,我无法训练我的模型,因为输出不适合。如果我尝试在不添加规范化的情况下训练模型,那么一切都很好


Tags: lambda模型nonenorm体系结构规范化outputsdropout
1条回答
网友
1楼 · 发布于 2024-05-13 19:08:20

这是因为Keras模型的outputs属性返回一个输出张量列表(即使您的模型只有一个输出层)。因此,您创建的Lambda层将应用于该列表,而不是其中的单输出张量。要解决此问题,请提取该列表的第一个元素,然后在其上应用Lambda层:

norm = FRmodel.outputs[0]
norm = Lambda(...)(norm)

相关问题 更多 >