Par exemple, c'est trivial mais y a-t-il une couche pour cela ? N'est-ce pas vraiment une convolution ... il y a une "couche dense" (poids) par point de données.

In [266]: X = np.random.randn(10, 3); W = np.random.randn(10, 3, 4); (X[:, :, None] * W).sum(axis=1).shape
Out[266]: (10, 4)
0
mathtick 17 févr. 2020 à 21:01

1 réponse

Meilleure réponse

Créez votre propre calque :

Attention : ne fonctionne qu'avec une taille de lot fixe, vous devez définir batch_shape ou batch_input_shape dans vos modèles!!!!

class SampleDense(Layer):
    def __init__(self, units, **kwargs):
        self.units = units
        super(SampleDense, self).__init__(**kwargs)

    def build(self, input_shape):
        weight_shape = input_shape + (self.units,)

        self.kernel = self.add_weight(name='kernel', 
                                      shape=weight_shape,
                                      initializer='uniform',
                                      trainable=True)
        self.built = True

    def call(self, inputs):
        inputs = K.expand_dims(inputs, axis=-1)
        outputs = inputs * self.kernel
        outputs = K.sum(outputs, axis=-2)

        return outputs

    def compute_output_shape(self, input_shape):
        return input_shape[:-1] + (self.units,)
1
Daniel Möller 17 févr. 2020 à 18:24