最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

探秘TensorFlow 和 NumPy 的 Broadcasting 機制

 更新時間:2020年03月13日 09:05:34   作者:文哥的學(xué)習(xí)日記  
這篇文章主要介紹了探秘TensorFlow 和 NumPy 的 Broadcasting 機制,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧

在使用Tensorflow的過程中,我們經(jīng)常遇到數(shù)組形狀不同的情況,但有時候發(fā)現(xiàn)二者還能進(jìn)行加減乘除的運算,在這背后,其實是Tensorflow的broadcast即廣播機制幫了大忙。而Tensorflow中的廣播機制其實是效仿的numpy中的廣播機制。本篇,我們就來一同研究下numpy和Tensorflow中的廣播機制。

1、numpy廣播原理

1.1 數(shù)組和標(biāo)量計算時的廣播

標(biāo)量和數(shù)組合并時就會發(fā)生簡單的廣播,標(biāo)量會和數(shù)組中的每一個元素進(jìn)行計算。

舉個例子:

arr = np.arange(5)
arr * 4

得到的輸出為:

array([ 0,  4,  8, 12, 16])

這個是很好理解的,我們重點來研究數(shù)組之間的廣播

1.2 數(shù)組之間計算時的廣播

用書中的話來介紹廣播的規(guī)則:兩個數(shù)組之間廣播的規(guī)則:如果兩個數(shù)組的后緣維度(即從末尾開始算起的維度)的軸長度相等或其中一方的長度為1,則認(rèn)為他們是廣播兼容的,廣播會在缺失和(或)長度為1的維度上進(jìn)行。

上面的規(guī)則挺拗口的,我們舉幾個例子吧:

二維的情況

假設(shè)有一個二維數(shù)組,我們想要減去它在0軸和1軸的均值,這時的廣播是什么樣的呢。

我們先來看減去0軸均值的情況:

arr = np.arange(12).reshape(4,3)
arr-arr.mean(0)

輸出的結(jié)果為:

array([[-4.5, -4.5, -4.5],
       [-1.5, -1.5, -1.5],
       [ 1.5,  1.5,  1.5],
       [ 4.5,  4.5,  4.5]])

0軸的平均值為[4.5,5.5,6.5],形狀為(3,),而原數(shù)組形狀為(4,3),在進(jìn)行廣播時,從后往前比較兩個數(shù)組的形狀,首先是3=3,滿足條件而繼續(xù)比較,這時候發(fā)現(xiàn)其中一個數(shù)組的形狀數(shù)組遍歷完成,因此會在缺失軸即0軸上進(jìn)行廣播。

可以理解成將均值數(shù)組在0軸上復(fù)制4份,變成形狀(4,3)的數(shù)組,再與原數(shù)組進(jìn)行計算。

書中的圖形象的表示了這個過程(數(shù)據(jù)不一樣請忽略):

我們再來看一下減去1軸平均值的情況,即每行都減去該行的平均值:

arr - arr.mean(1)

此時報錯了:

我們再來念叨一遍我們的廣播規(guī)則,均值數(shù)組的形狀為(4,),而原數(shù)組形狀為(4,3),按照比較規(guī)則,4 != 3,因此不符合廣播的條件,因此報錯。

正確的做法是什么呢,因為原數(shù)組在0軸上的形狀為4,我們的均值數(shù)組必須要先有一個值能夠跟3比較同時滿足我們的廣播規(guī)則,這個值不用多想,就是1。因此我們需要先將均值數(shù)組變成(4,1)的形狀,再去進(jìn)行運算:

arr-arr.mean(1).reshape((4,1))

得到正確的結(jié)果:

array([[-1., 0., 1.],
    [-1., 0., 1.],
    [-1., 0., 1.],
    [-1., 0., 1.]])

三維的情況

理解了二維的情況,我們也就能很快的理解三維數(shù)組的情況。

首先看下圖:

根據(jù)廣播原則分析:arr1的shape為(3,4,2),arr2的shape為(4,2),它們的后緣軸長度都為(4,2),所以可以在0軸進(jìn)行廣播。因此,arr2在0軸上復(fù)制三份,shape變?yōu)?3,4,2),再進(jìn)行計算。

不只是0軸,1軸和2軸也都可以進(jìn)行廣播。但形狀必須滿足一定的條件。舉個例子來說,我們arr1的shape為(8,5,3),想要在0軸上廣播的話,arr2的shape是(1,5,3)或者(5,3),想要在1軸上進(jìn)行廣播的話,arr2的shape是(8,1,3),想要在2軸上廣播的話,arr2的shape必須是(8,5,1)。

我們來寫幾個例子吧:

arr2 = np.arange(24).reshape((2,3,4))
arr3_0 = np.arange(12).reshape((3,4))
print("0軸廣播")
print(arr2 - arr3_0)

arr3_1 = np.arange(8).reshape((2,1,4))
print("1軸廣播")
print(arr2 - arr3_1)

arr3_2 = np.arange(6).reshape((2,3,1))
print("2軸廣播")
print(arr2 - arr3_2)

輸出為:

0軸廣播
[[[ 0  0  0  0]
  [ 0  0  0  0]
  [ 0  0  0  0]]

 [[12 12 12 12]
  [12 12 12 12]
  [12 12 12 12]]]
1軸廣播
[[[ 0  0  0  0]
  [ 4  4  4  4]
  [ 8  8  8  8]]

 [[ 8  8  8  8]
  [12 12 12 12]
  [16 16 16 16]]]
2軸廣播
[[[ 0  1  2  3]
  [ 3  4  5  6]
  [ 6  7  8  9]]

 [[ 9 10 11 12]
  [12 13 14 15]
  [15 16
 17 18]]]

如果我們想在兩個軸上進(jìn)行廣播,那arr2的shape要滿足什么條件呢?

arr1.shape 廣播軸 arr2.shape
(8,5,3) 0,1 (3,),(1,3),(1,1,3)
(8,5,3) 0,2 (5,1),(1,5,1)
(8,5,3) 1,2 (8,1,1)

具體的例子就不給出啦,嘻嘻。

2、Tensorflow 廣播舉例

Tensorflow中的廣播機制和numpy是一樣的,因此我們給出一些簡單的舉例:

二維的情況

sess = tf.Session()
a = tf.Variable(tf.random_normal((2,3),0,0.1))
b = tf.Variable(tf.random_normal((2,1),0,0.1))
c = a - b
sess.run(tf.global_variables_initializer())
sess.run(c)

輸出為:

array([[-0.1419442 ,  0.14135399,  0.22752595],
       [ 0.1382471 ,  0.28228047,  0.13102233]], dtype=float32)

三維的情況

sess = tf.Session()
a = tf.Variable(tf.random_normal((2,3,4),0,0.1))
b = tf.Variable(tf.random_normal((2,1,4),0,0.1))
c = a - b
sess.run(tf.global_variables_initializer())
sess.run(c)

輸出為:

array([[[-0.0154749 , -0.02047186, -0.01022427, -0.08932371],
        [-0.12693939, -0.08069084, -0.15459496,  0.09405404],
        [ 0.09730847,  0.06936138,  0.04050628,  0.15374713]],

       [[-0.02691782, -0.26384184,  0.05825682, -0.07617196],
        [-0.02653179, -0.01997554, -0.06522765,  0.03028341],
        [-0.07577246,  0.03199019,  0.0321    , -0.12571403]]], dtype=float32)

錯誤示例

sess = tf.Session()
a = tf.Variable(tf.random_normal((2,3,4),0,0.1))
b = tf.Variable(tf.random_normal((2,4),0,0.1))
c = a - b
sess.run(tf.global_variables_initializer())
sess.run(c)

輸出為:

ValueError: Dimensions must be equal, but are 3 and 2 for 'sub_2' (op: 'Sub') with input shapes: [2,3,4], [2,4].

到此這篇關(guān)于探秘TensorFlow 和 NumPy 的 Broadcasting 機制的文章就介紹到這了,更多相關(guān)TensorFlow 和NumPy 的Broadcasting 內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Python實現(xiàn)加密接口測試方法步驟詳解

    Python實現(xiàn)加密接口測試方法步驟詳解

    這篇文章主要介紹了Python實現(xiàn)加密接口測試方法步驟詳解,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-06-06
  • 基于Python的自媒體小助手---登錄頁面的實現(xiàn)代碼

    基于Python的自媒體小助手---登錄頁面的實現(xiàn)代碼

    這篇文章主要介紹了基于Python的自媒體小助手---登錄頁面的實現(xiàn)代碼,本文通過實例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-06-06
  • Python fileinput模塊使用介紹

    Python fileinput模塊使用介紹

    這篇文章主要介紹了Python fileinput模塊使用方法,需要的朋友可以參考下
    2014-11-11
  • Python比較set的規(guī)則及簡單例子

    Python比較set的規(guī)則及簡單例子

    在Python中,集合可以通過比較運算符進(jìn)行比較,檢查子集、超集、相等性等關(guān)系,文中通過代碼介紹的非常詳細(xì),對大家學(xué)習(xí)或者使用python具有一定的參考借鑒價值,需要的朋友可以參考下
    2024-11-11
  • python中defaultdict用法實例詳解

    python中defaultdict用法實例詳解

    python中的dict是一個重要的數(shù)據(jù)類型,知道如何使用這個數(shù)據(jù)類型很簡單,但是這個類型使用過程中容易進(jìn)入一些誤區(qū),下面這篇文章主要給大家介紹了關(guān)于python中defaultdict用法的相關(guān)資料,需要的朋友可以參考下
    2022-09-09
  • wxPython的安裝與使用教程

    wxPython的安裝與使用教程

    wxPython是Python語言的一套優(yōu)秀的GUI圖形庫。wxPython可以很方便的創(chuàng)建完整的、功能鍵全的GUI用戶界面。這篇文章給大家介紹了wxPython的安裝與使用,感興趣的朋友一起看看吧
    2018-08-08
  • Python 文件操作的詳解及實例

    Python 文件操作的詳解及實例

    這篇文章主要介紹了Python 文件操作的詳解及實例的相關(guān)資料,希望通過本文大家能夠理解掌握Python 文件操作的知識,需要的朋友可以參考下
    2017-09-09
  • 完美解決jupyter由于無法import新包的問題

    完美解決jupyter由于無法import新包的問題

    這篇文章主要介紹了完美解決jupyter由于無法import新包的問題,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-05-05
  • Python?ndarray?數(shù)組的變形詳情

    Python?ndarray?數(shù)組的變形詳情

    這篇文章主要介紹了Python?ndarray數(shù)組的變形詳情,文章圍繞主題展開詳細(xì)的內(nèi)容介紹,具有一定的參考價值,需要的小伙伴可以參考一下
    2022-09-09
  • 淺談keras中的目標(biāo)函數(shù)和優(yōu)化函數(shù)MSE用法

    淺談keras中的目標(biāo)函數(shù)和優(yōu)化函數(shù)MSE用法

    這篇文章主要介紹了淺談keras中的目標(biāo)函數(shù)和優(yōu)化函數(shù)MSE用法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-06-06

最新評論

清镇市| 和田市| 凤凰县| 揭西县| 格尔木市| 麻栗坡县| 正宁县| 海门市| 林芝县| 石屏县| 沈阳市| 邯郸县| 平遥县| 怀宁县| 遂昌县| 资溪县| 汉阴县| 柳河县| 崇信县| 三门峡市| 郁南县| 西林县| 汽车| 厦门市| 泌阳县| 丹东市| 沁源县| 黄山市| 新昌县| 桃源县| 华池县| 贡嘎县| 枣阳市| 时尚| 永城市| 德保县| 上杭县| 如东县| 湖口县| 怀化市| 五台县|