• 【599】keras.layers 里面 Multiply、multiply & Add、add 的区别


      再看 Attention U-Net 源码的时候,注意到了有 keras.layers 里面有 Multiply 和 multiply 两个方法

      它们可以实现相同的效果,但是语法稍有不同

    # 按照图层的模式处理
    Multiply()([m1, m2])
    
    # 相当于一个函数操作
    multiply([m1, m2])
    

      另外可以实现 broadcast 操作,但是第 0 维必须为相同的数字,可以设想为样本数量是不变的,第 1 维可以有差别

      举例 

    from keras.layers import Multiply, multiply, Add, add
    
    import numpy as np 
    
    a = np.arange(25).reshape(5, 1, 5)
    a 
    
    [out]
    
    array([[[ 0,  1,  2,  3,  4]],
    
           [[ 5,  6,  7,  8,  9]],
    
           [[10, 11, 12, 13, 14]],
    
           [[15, 16, 17, 18, 19]],
    
           [[20, 21, 22, 23, 24]]])
    
    b = np.arange(50, 150).reshape(5, 4, 5)
    b 
    
    [out]
    
    array([[[ 50,  51,  52,  53,  54],
            [ 55,  56,  57,  58,  59],
            [ 60,  61,  62,  63,  64],
            [ 65,  66,  67,  68,  69]],
    
           [[ 70,  71,  72,  73,  74],
            [ 75,  76,  77,  78,  79],
            [ 80,  81,  82,  83,  84],
            [ 85,  86,  87,  88,  89]],
    
           [[ 90,  91,  92,  93,  94],
            [ 95,  96,  97,  98,  99],
            [100, 101, 102, 103, 104],
            [105, 106, 107, 108, 109]],
    
           [[110, 111, 112, 113, 114],
            [115, 116, 117, 118, 119],
            [120, 121, 122, 123, 124],
            [125, 126, 127, 128, 129]],
    
           [[130, 131, 132, 133, 134],
            [135, 136, 137, 138, 139],
            [140, 141, 142, 143, 144],
            [145, 146, 147, 148, 149]]])
    
    Multiply()([a, b]) 
    # Multiply()([b, a]) 
    # 一样的效果
    # multiply([a, b]) 
    # multiply([b, a]) 
    
    [out]
    
    <tf.Tensor: shape=(5, 4, 5), dtype=int64, numpy=
    array([[[   0,   51,  104,  159,  216],
            [   0,   56,  114,  174,  236],
            [   0,   61,  124,  189,  256],
            [   0,   66,  134,  204,  276]],
    
           [[ 350,  426,  504,  584,  666],
            [ 375,  456,  539,  624,  711],
            [ 400,  486,  574,  664,  756],
            [ 425,  516,  609,  704,  801]],
    
           [[ 900, 1001, 1104, 1209, 1316],
            [ 950, 1056, 1164, 1274, 1386],
            [1000, 1111, 1224, 1339, 1456],
            [1050, 1166, 1284, 1404, 1526]],
    
           [[1650, 1776, 1904, 2034, 2166],
            [1725, 1856, 1989, 2124, 2261],
            [1800, 1936, 2074, 2214, 2356],
            [1875, 2016, 2159, 2304, 2451]],
    
           [[2600, 2751, 2904, 3059, 3216],
            [2700, 2856, 3014, 3174, 3336],
            [2800, 2961, 3124, 3289, 3456],
            [2900, 3066, 3234, 3404, 3576]]])>
    
    Add()([a, b]) 
    # Add()([b, a]) 
    # 一样的效果
    # add([a, b]) 
    # add([b, a]) 
    
    [out]
    
    <tf.Tensor: shape=(5, 4, 5), dtype=int64, numpy=
    array([[[ 50,  52,  54,  56,  58],
            [ 55,  57,  59,  61,  63],
            [ 60,  62,  64,  66,  68],
            [ 65,  67,  69,  71,  73]],
    
           [[ 75,  77,  79,  81,  83],
            [ 80,  82,  84,  86,  88],
            [ 85,  87,  89,  91,  93],
            [ 90,  92,  94,  96,  98]],
    
           [[100, 102, 104, 106, 108],
            [105, 107, 109, 111, 113],
            [110, 112, 114, 116, 118],
            [115, 117, 119, 121, 123]],
    
           [[125, 127, 129, 131, 133],
            [130, 132, 134, 136, 138],
            [135, 137, 139, 141, 143],
            [140, 142, 144, 146, 148]],
    
           [[150, 152, 154, 156, 158],
            [155, 157, 159, 161, 163],
            [160, 162, 164, 166, 168],
            [165, 167, 169, 171, 173]]])>
    

      对于 Attention U-Net 实现图如下:

    • 第一个输入:相当于 20*20 的图像有 256 层

    • 第二个输入:相当于 20*20 的图像有 1 层,每个像素值对应一个权重值

    • 相乘的话,需要第二个输入乘以第一个输入的每一层
  • 相关阅读:
    Android上的远程调试
    使用Chrome DevTools的Timeline和Profiles提高Web应用程序的性能
    用Chrome开发者工具做JavaScript性能分析
    查看html元素绑定的事件与方法的利器
    Chrome的JS调试工具
    作为Web开发人员,我为什么喜欢Google Chrome浏览器
    构造方法
    方法的带参
    OOP类和对象
    循环结构进阶
  • 原文地址:https://www.cnblogs.com/alex-bn-lee/p/14978762.html
Copyright © 2020-2023  润新知