由于网络结构的需要,需要增添一个归一化以及尺度变换操作:
类似于:
![](https://i-blog.csdnimg.cn/blog_migrate/1d9195b94325bc763c9c5bf48375f3d7.png)
这项操作不涉及到权重等参数的变化,只是简单地对上一层的输出进行l2归一化以及尺度变化,因此可以不需要使用复杂的继承层类来实现,但对于涉及参数变化的处理,还是需要类似于activation等layer来构造。这里目前只介绍使用Lambda来构造自己的层操作。
Lambda层
有些类似于python中的lambda函数一样,构造一个处理函数即可。
官方例子:
可以看到实现的是一个平方操作。
下面实现上述l2归一化以及尺度变换操作:
假设上一层是全连接层:
x_fc = Dense(1024, activation='relu', name='fc1024')(x_fc)
对这层对输出进行处理:
# l2 norm and scale
def _l2norm_scale(inputs, scale_value):
scale_a = K.cast_to_floatx(scale_value)
l2_norm = K.l2_normalize(inputs)
return scale_a * l2_norm
x_newfc = Lambda(_l2norm_scale, name='l2norm_scale')(x_newfc)
上述就完成了整个操作过程