Je souhaite ajouter une valeur scalaire à la sortie d'une opération Conv2D de la manière suivante :

num_filters = 16
num_targets = 10
input_conv = layers.Conv2D(num_filters, (3, 3), activation='relu', padding='same')(input_img)
target_conv = layers.Conv1D(num_filters, num_targets, use_bias=False, activation='linear')(label)
# TODO: add output target_conv to input_conv along each of the filter dimensions
# this is like adding a scalar value for each of the filter dimensions

La sortie input_conv est de forme (None, 28, 28, 16) et la target_conv est de forme (None, 1, 16), où 28 x 28 correspond aux dimensions de l'image et 16 est le nombre de filtres. Pour chaque filtre (chacune des 16 dimensions), je souhaite ajouter la valeur target_conv correspondante en tant que scalaire. Imaginez donc que nous regardions simplement la sortie du premier filtre pour input_conv et target_conv, qui nous donne les formes (Aucun, 28, 28, 1) et (Aucun, 1, 1). Je veux ajouter la sortie de target_conv à la sortie de input_conv qui produirait toujours (Aucun, 28, 28, 1) pour le premier filtre, et cela se produirait alors pour chaque dimension de filtre à sortir (Aucun, 28, 28, 16).

Cependant, je ne sais pas comment mettre en œuvre cela?

1
Jane Sully 13 sept. 2020 à 22:00

1 réponse

Meilleure réponse

Tout ce que vous avez à faire est simplement d'ajouter une dimensionnalité à la sortie target_conv afin de l'avoir dans 4D. Cela vous permet de faire une simple somme entre les deux sorties

num_filters = 16

input_img = Input((28,28,1))
label = Input((10,1))
input_conv = Conv2D(num_filters, (3, 3), 
                    activation='relu', padding='same')(input_img) # (None,28,28,num_filters)
target_conv = Conv1D(num_filters, 10, 
                     use_bias=False, activation='linear')(label) # (None,1,num_filters)

target_conv = Reshape((1,1,num_filters))(target_conv) # (None,1,1,num_filters)
sum_filter = Add()([input_conv,target_conv]) # (None,28,28,num_filters)

m = Model([input_img,label], sum_filter)
m.summary()
2
Marco Cerliani 13 sept. 2020 à 20:25