J'ai une image RVB de forme (256,256,3)
et j'ai un masque de poids de forme (256,256)
. Comment puis-je effectuer la multiplication par élément entre eux avec Keras? (toutes les chaînes partagent le même masque)
Vous avez besoin d'un Reshape
pour que les deux tenseurs aient le même nombre de dimensions, et d'un Multiply
couche
mask = Reshape((256,256,1))(mask)
out = Multiply()([image,mask])
Si vous avez des formes variables, vous pouvez utiliser un seul calque Lambda
comme ceci:
import keras.backend as K
def multiply(x):
image,mask = x
mask = K.expand_dims(mask, axis=-1) #could be K.stack([mask]*3, axis=-1) too
return mask*image
out = Lambda(multiply)([image,mask])
Comme alternative, vous pouvez le faire en utilisant une couche Lambda
(comme dans la réponse de @ DanielMöller, vous devez ajouter un troisième axe au masque):
from keras import backend as K
out = Lambda(lambda x: x[0] * K.expand_dims(x[1], axis=-1))([image, mask])