使用 Keras 进行逐元素乘法
Element-wise multiplication with Keras
我有一个形状为 (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 的回答中,您需要向蒙版添加第三个轴):
from keras import backend as K
out = Lambda(lambda x: x[0] * K.expand_dims(x[1], axis=-1))([image, mask])
我有一个形状为 (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 的回答中,您需要向蒙版添加第三个轴):
from keras import backend as K
out = Lambda(lambda x: x[0] * K.expand_dims(x[1], axis=-1))([image, mask])