【问题标题】:How to share weights among subset of input features with keras如何使用 keras 在输入特征子集之间共享权重
【发布时间】:2019-05-27 01:47:43
【问题描述】:

在这个神经网络中,有 9 个输入特征:

  f1,f2,f3,f4,f5,f6,f7,f8,f9

我希望某些输入特征(但不是全部)在输入层和第一个隐藏层之间具有相同的权重。所有剩余的层将没有任何共享权重。

  f1,f2,f3 should share the same weights
  f4,f5,f6 should share the same weights
  f7 should not share weights with other features
  f8 should not share weights with other features
  f9 should not share weights with other features

我很确定我需要一维卷积,但不是在整个层上。我可能错过了它,但还没有看到这个用例记录在案。任何想法如何在 Keras 中做到这一点?

重新表述这个问题,在一组特征之间表达同等重要性的正确方法是什么?

特征(f1f2f3)在预测输出类时具有同等重要性。在预测输出类时,特征(f4f5f6)也同样重要。

共有三种可能的预测类别。特征f1f4 是输出类A 的证据。特征f2f5 是输出classB 的证据。特征f3f6 是输出classC 的证据。

有没有办法通过在等重要特征之间共享参数来减少网络中的参数数量?

【问题讨论】:

    标签: python keras neural-network


    【解决方案1】:

    相当于在密集层之前对f1+f2+f3f4+f5+f6 求和。

    要求和的层建议:

    from keras.layers import Lambda
    import keras.backend as K
    
    def sumFeatures(x):
        f1_3 = x[:,:3]
        f4_6 = x[:,3:6]
    
        return K.concatenate(
            [
                K.sum(f1_3, axis=-1, keepdims=True),
                K.sum(f4_6, axis=-1, keepdims=True),
                x[:,6:]
            ], axis=-1)
    

    顺序模型:

    model.add(Lambda(sumFeatures))
    

    功能模型:

    outputTensor = Lambda(sumFeatures)(inputTensor)
    

    【讨论】:

    • 感谢您的及时回复。也许我需要改写我的问题。特征 (1,2,3) 是不同输出类别的独立证据,不应合并为单个特征。对于特征 (4,5,6) 也是如此。但它们具有同等重要性。表达同等重要性的正确方式是什么?
    • 同样重要的是什么,损失函数?如果您使用标准损失函数,则所有特征都具有同等重要性。
    • 特征 (f1,f2,f3) 对于预测的输出类别具有同等重要性。特征 (f4,f5,f6) 对于预测的输出类别具有同等重要性。有 3 种可能的输出类别。特征 f1 和 f4 是输出类 A 的证据。特征 f2 和 f5 是输出类 B 的证据。特征 f3 和 f6 是输出类 C 的证据。
    猜你喜欢
    • 2019-12-06
    • 1970-01-01
    • 2019-08-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-03-23
    相关资源
    最近更新 更多