美文网首页
TensorFlow三大操作之Broadcasting

TensorFlow三大操作之Broadcasting

作者: 酵母小木 | 来源:发表于2020-02-02 16:36 被阅读0次

    【时间:2020年2月1日】今天是二月的第一天,是时候振作起来了!今天好好学习吧!

    【史悟】今日在看《汉书》的高祖纪和电视剧《楚汉传奇》,心中有一个疑问:“为何乱世出英雄,时势造英雄?”也许英雄不是生出来的,而是训练出来的,至少在中国是这样的!

    【世语】“You know, ters aint bad people. They 're just uneducated, unsophisticated, untraveled, immoral, and uncivilized. Plus stupid”
    “你知道他们不是坏人。他们只是没受过教育。不谙事故。没出过远门。不道德。不文明。外加愚蠢。”——蒂姆·高特罗

    Broadcasting的核心操作如下:

    • 小维度对齐,维度自动补齐
    • 维度大小不同且维度为1,则维度扩张
    //维度变化,数据拷贝扩充
    Feature maps: [4, 32, 32, 3]
    Bias: [3] --> [1, 1, 1, 32] --> [4, 32, 32, 3]
    //最终的结果是每一个元素都进行相同的数据操作
    

    • tf.broadcast_to():数据张量维度扩张手段,就是对某一个维度重复N次,但并不拷贝数据
    • tf.tile():对某一个维度重复N多次,并且真实得拷贝数据N次
    //自动维度扩张
    In [53]: x = tf.random.normal([4, 32, 32, 3])
    
    In [54]: (x + tf.random.normal([3])).shape
    Out[54]: TensorShape([4, 32, 32, 3])
    
    In [55]: (x + tf.random.normal([32, 32, 1])).shape
    Out[55]: TensorShape([4, 32, 32, 3])
    
    In [56]: (x + tf.random.normal([4, 1, 1, 1])).shape
    Out[56]: TensorShape([4, 32, 32, 3])
    
    //显式维度扩张
    In [58]: b = tf.broadcast_to(tf.random.normal([4, 1, 1, 1]), [4, 32, 32, 3])
    
    In [59]: b.shape
    Out[59]: TensorShape([4, 32, 32, 3])
    
    //Braodcast VS Tile
    In [61]: a = tf.ones([3, 4])
    
    In [62]: a1 = tf.broadcast_to(a, [2, 3, 4])
    
    In [63]: a1
    Out[63]: <tf.Tensor: id=158, shape=(2, 3, 4), dtype=float32, numpy=
    array([[[1., 1., 1., 1.],
            [1., 1., 1., 1.],
            [1., 1., 1., 1.]],
    
           [[1., 1., 1., 1.],
            [1., 1., 1., 1.],
            [1., 1., 1., 1.]]], dtype=float32)>
    -------------------------------------------------------------
    In [64]: a2 = tf.expand_dims(a, axis = 0)
    //先扩张维度
    In [65]: a2
    Out[65]: <tf.Tensor: id=160, shape=(1, 3, 4), dtype=float32, numpy=
    array([[[1., 1., 1., 1.],
            [1., 1., 1., 1.],
            [1., 1., 1., 1.]]], dtype=float32)>
    //后拷贝数据
    In [66]: a2 = tf.tile(a2, [2, 1, 1])
    
    In [67]: a2
    Out[67]: <tf.Tensor: id=162, shape=(2, 3, 4), dtype=float32, numpy=
    array([[[1., 1., 1., 1.],
            [1., 1., 1., 1.],
            [1., 1., 1., 1.]],
    
           [[1., 1., 1., 1.],
            [1., 1., 1., 1.],
            [1., 1., 1., 1.]]], dtype=float32)>
    

    参考资料

    相关文章

      网友评论

          本文标题:TensorFlow三大操作之Broadcasting

          本文链接:https://www.haomeiwen.com/subject/iidxxhtx.html