如何将l2归一化应用于角膜中的一层?

问题描述 投票:0回答:1

我正在尝试使用12归一化对我的神经网络中的一层进行归一化。我想将特定层中的每个节点/元素除以其l2范数(平方元素之和的平方根),我的假设是keras的l2_normalize可以实现这一目标:https://www.tensorflow.org/api_docs/python/tf/keras/backend/l2_normalize?version=stable。但是,由于文档中没有示例,因此我不确定如何实际使用它。我发现了同时使用lambda函数的其他示例,例如Lambda(lambda x: K.l2_normalize(x,axis=1))(previous_layer)。但是,我不确定为什么需要这样做?希望能对如何使用keras.backend.l2_normalize以及为什么需要使用lambda函数提供帮助。谢谢!

这是我想被使用的方式:

autoencoder = Sequential()

# Encoder Layer
 autoencoder.add(Dense(encoded_dim, input_shape=(input_dim,), 
 activation='relu'))

# Normalization - Need help here!
# TODO: Add l2_normalize here 

# Decoder Layer
# TODO: Add final output layer here
tensorflow lambda keras neural-network normalization
1个回答
0
投票

做为您提到的示例。没关系。

模型中的每个操作都需要一个Layer,后端操作也不例外,这就是Lambda层的原因。 (Keras需要层次来发挥其魔力)。

import keras.backend as K

autoencoder.add(Lambda(lambda x: K.l2_normalize(x,axis=1)))

[如果您打算稍后再获取编码器的输出,我建议您将encoderdecoder创建为单独的模型:

encoder = Sequential()
#.... add encoder layers ....
#encoder.add(....)

decoder = Sequential()
#.... add decoder layers ....
#decoder.add(....)

最后将自动编码器创建为另一个模型,以进行培训:

from keras.layers import Input
from keras.models import Model

autoInput = Input(shape_of_the_encoder_input)
encodedData = encoder(autoInput)
decodedData = decoder(encodedData)

autoencoder = Model(autoInput, decodedData)
© www.soinside.com 2019 - 2024. All rights reserved.