我想使用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)
?因此,我无法训练我的模型,因为输出不适合。如果我尝试在不添加规范化的情况下训练模型,那么一切都很好
这是因为Keras模型的
outputs
属性返回一个输出张量列表(即使您的模型只有一个输出层)。因此,您创建的Lambda
层将应用于该列表,而不是其中的单输出张量。要解决此问题,请提取该列表的第一个元素,然后在其上应用Lambda
层:相关问题 更多 >
编程相关推荐