web-dev-qa-db-ja.com

Kerasによる要素ごとの乗算

図形(256,256,3)のRGBイメージと、図形(256,256)のウェイトマスクがあります。 Kerasでそれらの間の要素ごとの乗算を実行するにはどうすればよいですか? (すべてのチャンネルが同じマスクを共有します)

6
Mark.F

両方のテンソルの次元数が同じになるようにReshapeMultiplyレイヤーが必要です

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

別の方法として、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])
3
today