【发布时间】:2018-12-19 10:59:46
【问题描述】:
我有一个形状为(256,256,3) 的RGB 图像,我有一个形状为(256,256) 的权重蒙版。如何使用 Keras 执行它们之间的元素乘法? (所有通道共用同一个掩码)
【问题讨论】:
标签: keras computer-vision conv-neural-network mask
我有一个形状为(256,256,3) 的RGB 图像,我有一个形状为(256,256) 的权重蒙版。如何使用 Keras 执行它们之间的元素乘法? (所有通道共用同一个掩码)
【问题讨论】:
标签: keras computer-vision conv-neural-network mask
您需要一个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])
【讨论】:
Multiply 层的文档中,它明确表示“它将张量列表作为输入,所有相同形状,并返回单个张量(也具有相同形状)。”而在这里我们将形状相乘(255,255,3) 和(255,255,1)(甚至(255,255))。因此,要么文档不完整,没有提到广播,要么在某些情况下这不起作用......
作为替代方案,您可以使用Lambda 层执行此操作(如在@DanielMöller 的回答中,您需要向蒙版添加第三个轴):
from keras import backend as K
out = Lambda(lambda x: x[0] * K.expand_dims(x[1], axis=-1))([image, mask])
【讨论】: