【问题标题】:Element-wise multiplication with Keras使用 Keras 进行元素乘法
【发布时间】:2018-12-19 10:59:46
【问题描述】:

我有一个形状为(256,256,3) 的RGB 图像,我有一个形状为(256,256) 的权重蒙版。如何使用 Keras 执行它们之间的元素乘法? (所有通道共用同一个掩码)

【问题讨论】:

    标签: keras computer-vision conv-neural-network mask


    【解决方案1】:

    您需要一个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])
    

    【讨论】:

    • 我认为不需要重塑。它会被广播,对吧?
    • 有时是这样,我不太确定,所以为了安全起见:p
    • 也在输入答案,你们真快:)
    • 我想会播出的。有时并非如此。广播有规则。无论如何,在这种情况下,safety 的价格可能会降低性能:p
    • 这是否保证始终适用于所有后端?在Multiply 层的文档中,它明确表示“它将张量列表作为输入,所有相同形状,并返回单个张量(也具有相同形状)。”而在这里我们将形状相乘(255,255,3)(255,255,1)(甚至(255,255))。因此,要么文档不完整,没有提到广播,要么在某些情况下这不起作用......
    【解决方案2】:

    作为替代方案,您可以使用Lambda 层执行此操作(如在@DanielMöller 的回答中,您需要向蒙版添加第三个轴):

    from keras import backend as K
    
    out = Lambda(lambda x: x[0] * K.expand_dims(x[1], axis=-1))([image, mask])
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-05-29
      • 2015-09-01
      • 1970-01-01
      • 1970-01-01
      • 2021-12-28
      • 1970-01-01
      • 1970-01-01
      • 2019-11-23
      相关资源
      最近更新 更多