如何将 l2 归一化应用于 keras 中的图层?
How to apply l2 normalization to a layer in keras?
我正在尝试使用 l2 归一化来归一化我的神经网络中的一个层。我想将特定层中的每个 node/element 除以其 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
按照你说的例子去做。没关系。
模型中的每个操作都需要一个 Layer
,后端操作也不例外,这就是 Lambda
层的原因。 (Keras 需要层来发挥其魔力)。
import keras.backend as K
autoencoder.add(Lambda(lambda x: K.l2_normalize(x,axis=1)))
如果您打算稍后获得编码器的输出用于其他事情,我建议您创建 encoder
和 decoder
作为单独的模型:
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)
我正在尝试使用 l2 归一化来归一化我的神经网络中的一个层。我想将特定层中的每个 node/element 除以其 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
按照你说的例子去做。没关系。
模型中的每个操作都需要一个 Layer
,后端操作也不例外,这就是 Lambda
层的原因。 (Keras 需要层来发挥其魔力)。
import keras.backend as K
autoencoder.add(Lambda(lambda x: K.l2_normalize(x,axis=1)))
如果您打算稍后获得编码器的输出用于其他事情,我建议您创建 encoder
和 decoder
作为单独的模型:
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)