図形(256,256,3)
のRGBイメージと、図形(256,256)
のウェイトマスクがあります。 Kerasでそれらの間の要素ごとの乗算を実行するにはどうすればよいですか? (すべてのチャンネルが同じマスクを共有します)
両方のテンソルの次元数が同じになるようにReshape
とMultiply
レイヤーが必要です
mask = Reshape((256,256,1))(mask)
out = Multiply()([image,mask])
可変形状がある場合は、次のように単一のLambda
レイヤーを使用できます。
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])
別の方法として、Lambda
レイヤーを使用してこれを行うことができます(@DanielMöllerの答えのように、3番目の軸をマスクに追加する必要があります)。
from keras import backend as K
out = Lambda(lambda x: x[0] * K.expand_dims(x[1], axis=-1))([image, mask])