【问题标题】:How to initialize biases in a Keras model?如何在 Keras 模型中初始化偏差?
【发布时间】:2017-04-04 03:21:10
【问题描述】:

我正在尝试在 Keras 中构建一个合成模型,我需要为权重和偏差分配值。分配权重很容易,我使用此处提供的说明:https://keras.io/initializations/。 但是,我找不到任何关于如何分配偏差的说明。有什么想法吗?

【问题讨论】:

    标签: python neural-network deep-learning keras


    【解决方案1】:

    你也可以像这样使用bias_initializer:

    model.add(Dense(64,
                    kernel_initializer='random_uniform',
                    bias_initializer='zeros')
    

    这是来自https://keras.io/initializers/

    【讨论】:

    • 我有numpy数组中的权重和bios可以使用kernel_initializer直接添加
    【解决方案2】:

    您可以在这里找到答案。 https://keras.io/layers/core/

    权重:设置为初始权重的 Numpy 数组列表。名单 应该有 2 个元素,形状 (input_dim, output_dim) 和 (output_dim,) 分别用于权重和偏差。

    添加新层时,您可以定义参数“权重”,这是一个包含初始 wb 并指定形状的列表。

    model.add(Dense(50, input_dim= X_train.shape[1], weights = [np.zeros([692, 50]), np.zeros(50)]))

    【讨论】:

    • 将所有权重初始化为零(或就此而言,初始化为所有神经元相同的任何值)是一个非常糟糕的主意。一个 random_normal(或 truncated_normal)初始化器应该根据所使用的激活函数使用一个偏差。
    • 我在这里同意@Peteris。您至少应该将内核权重初始化为零以外的值。
    【解决方案3】:

    可以通过kernel_initializerbias_initializer 关键字参数分别在layers.Dense() 中设置每一层的权重和偏差初始化。如果用户未定义,则应用默认设置kernel_initializer='glorot_uniform'bias_initializer='zeros'

    例如,如果您想将层的权重初始化为随机统一而不是 glorot 并将初始化偏置为 0.1 而不是 0,您可以如下定义给定层:

    from keras import layers, initializers
    
    layer = layers.Dense(64,
                         activation='relu',
                         kernel_initializer='random_uniform',
                         bias_initializer=initializers.Constant(0.1))(previous_layer)
    

    有关密集层关键字参数的详细信息,请参阅 layers/core/,有关预设和可自定义初始化选项的详细信息,请参阅 initializers/

    【讨论】:

      【解决方案4】:

      用小的正值(例如 0.1)初始化偏差

      由于我们使用的是 ReLU 神经元,因此最好使用稍微正的初始偏差来初始化它们以避免“死神经元”。

      【讨论】:

        猜你喜欢
        • 2020-03-28
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-06-22
        • 1970-01-01
        • 2018-06-08
        • 2013-03-01
        • 2021-03-30
        相关资源
        最近更新 更多