web-dev-qa-db-fra.com

Multiplication par élément avec Keras

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)

6
Mark.F

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])
9
Daniel Möller

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])
3
today