如何使用keras在输入要素子集中共享权重

时间:2018-10-31 17:33:09

标签: python keras neural-network

在此神经网络中,有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是输出classA的证据。特征f2f5是输出classB的证据。特征f3f6是输出classC的证据。

是否可以通过在同等重要的功能之间共享参数来减少网络中的参数数量?

1 个答案:

答案 0 :(得分:0)

相当于在密集层之前对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)