【问题标题】:How to apply l2 normalization to a layer in keras?如何将 l2 归一化应用于 keras 中的图层?
【发布时间】:2020-04-23 01:20:34
【问题描述】:

我正在尝试使用 l2 归一化对我的神经网络中的一个层进行归一化。我想将特定层中的每个节点/元素除以其 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】:

    按照你提到的例子做。没关系。

    模型中的每个操作都需要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)
    

    【讨论】:

    • 感谢您的回答,很抱歉没有尽快接受。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-04-19
    • 1970-01-01
    • 2016-07-22
    • 1970-01-01
    • 2015-11-23
    • 2020-04-09
    相关资源
    最近更新 更多