色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

Python的矩陣傳播機(jī)制

Linux愛(ài)好者 ? 來(lái)源:SimpleAI ? 作者:Beyond ? 2021-09-30 16:53 ? 次閱讀

一、Python的矩陣傳播機(jī)制(Broadcasting)

我們知道在深度學(xué)習(xí)中經(jīng)常要操作各種矩陣(matrix)。

回想一下,我們?cè)诓僮鲾?shù)組(list)的時(shí)候,經(jīng)常習(xí)慣于用**for循環(huán)(for-loop)**來(lái)對(duì)數(shù)組的每一個(gè)元素進(jìn)行操作。例如:

my_list = [1,2,3,4]

new_list = []

for each in my_list:

new_list.append(each*2)

print(new_list) # 輸出 [2,3,4,5]

如果是矩陣呢:

my_matrix = [[1,2,3,4],

[5,6,7,8]]

new_matrix = [[],[]]

for i in range(2):

for j in range(4):

new_matrix[i].append(my_matrix[i][j]*2)

print(new_matrix)# 輸出 [[2, 4, 6, 8], [10, 12, 14, 16]]

實(shí)際上,上面的做法是十分的低效的!數(shù)據(jù)量小的話還不明顯,如果數(shù)據(jù)量大了,尤其是深度學(xué)習(xí)中我們處理的矩陣往往巨大,那用for循環(huán)去跑一個(gè)矩陣,可能要你幾個(gè)小時(shí)甚至幾天。

Python考慮到了這一點(diǎn),這也是本文主要想介紹的**“Python的broadcasting”即傳播機(jī)制**。

先說(shuō)一句,python中定義矩陣、處理矩陣,我們一般都用numpy這個(gè)庫(kù)。

二、下面展示什么是python的傳播機(jī)制

import numpy as np# 先定義一個(gè)3×3矩陣 A:

A = np.array(

[[1,2,3],

[4,5,6],

[7,8,9]])

print(“A:

”,A)

print(“

A*2:

”,A*2) # 直接用A乘以2print(“

A+10:

”,A+10) # 直接用A加上10

運(yùn)行結(jié)果:

A:

[[1 2 3]

[4 5 6]

[7 8 9]]

A*2:

[[ 2 4 6]

[ 8 10 12]

[14 16 18]]

A+10:

[[11 12 13]

[14 15 16]

[17 18 19]]

接著,再看看矩陣×(+)矩陣:

#定義一個(gè)3×1矩陣(此時(shí)也可叫向量了)

B = np.array([[10],

[100],

[1000]])

print(“

B:

”,B)

print(“

A+B:

”,A+B)

print(“

A*B:

”,A*B)

運(yùn)行結(jié)果:

B:

[[ 10]

[ 100]

[1000]]

A+B:

[[ 11 12 13]

[ 104 105 106]

[1007 1008 1009]]

A*B:

[[ 10 20 30]

[ 400 500 600]

[7000 8000 9000]]

可見(jiàn),雖然A和B的形狀不一樣,一個(gè)是3×3,一個(gè)是3×1,但是我們?cè)趐ython中可以直接相加、相乘,相減相除也可以。

也許看到這,大家都對(duì)broadcasting有感覺(jué)了。

用一個(gè)圖來(lái)示意一下:

所謂“傳播”,就是把一個(gè)數(shù)或者一個(gè)向量進(jìn)行“復(fù)制”,從而作用到矩陣的每一個(gè)元素上。

有了這種機(jī)制,那進(jìn)行向量和矩陣的運(yùn)算,就太方便了!理解了傳播機(jī)制,就可以隨心所欲地對(duì)矩陣進(jìn)行各種便捷的操作了。

利用numpy的內(nèi)置函數(shù)對(duì)矩陣進(jìn)行操作:

numpy內(nèi)置了很多的數(shù)學(xué)函數(shù),例如np.log(),np.abs(),np.maximum()等等上百種。直接把矩陣丟進(jìn)去,就可以算出新矩陣!示例:

print(np.log(A))

輸出把A矩陣每一個(gè)元素求log后得到的新矩陣:

array([[0. , 0.69314718, 1.09861229],

[1.38629436, 1.60943791, 1.79175947],

[1.94591015, 2.07944154, 2.19722458]])

再比如深度學(xué)習(xí)中常用的ReLU激活函數(shù),就是y=max(0,x),

也可以對(duì)矩陣直接運(yùn)算:

X = np.array([[1,-2,3,-4], [-9,4,5,6]])Y = np.maximum(0,X)print(Y)

得到:

[[1 0 3 0] [0 4 5 6]]

更多的numpy數(shù)學(xué)函數(shù),可以參見(jiàn)文檔:https://docs.scipy.org/doc/numpy-1.13.0/reference/routines.math.html

三、定義自己的函數(shù)來(lái)處理矩陣

其實(shí)這才是我寫下本文的目的。。。前面扯了這么多,只是做個(gè)鋪墊(/ω\)

我昨天遇到個(gè)問(wèn)題,就是我要對(duì)ReLU函數(shù)求導(dǎo),易知,y=max(0,x)的導(dǎo)函數(shù)是:y’ = 0 if x《0y’ = 1 if x》0但是這個(gè)y’(x)numpy里面沒(méi)有定義,需要自己構(gòu)建。即,我需要將矩陣X中的小于0的元素變?yōu)?,大于0的元素變?yōu)?。搞了好久沒(méi)弄出來(lái),后來(lái)在StackOverflow上看到了解決辦法:

def relu_derivative(x):

x[x《0] = 0

x[x》0] = 1

return x

X = np.array([[1,-2,3,-4],

[-9,4,5,6]])

print(relu_derivative(X))

輸出:

[[1 0 1 0]

[0 1 1 1]]

**居然這么簡(jiǎn)潔就出來(lái)了!!!**ミ?Д?彡 (?Д?#)

這個(gè)函數(shù)relu_derivative中最難以理解的地方,就是**x[x》0]**了。于是我試了一下:

X = np.array([[1,-2,3,-4],

[-9,4,5,6]])

print(X[X》0])

print(X[X《0])

輸出:

[1 3 4 5 6]

[-2 -4 -9]

它直接把矩陣X中滿足條件的元素取了出來(lái)!原來(lái)python對(duì)矩陣還有這種操作!

震驚了我好久~

所以可以這么理解,X[X》0]相當(dāng)于一個(gè)“選擇器”,把滿足條件的元素選出來(lái),然后直接全部賦值。

用這種方法,我們便可以定義各種各樣我們需要的函數(shù),然后對(duì)矩陣整體進(jìn)行更新操作了!

四、綜上

可以看出,python以及numpy對(duì)矩陣的操作簡(jiǎn)直神乎其神,方便快捷又實(shí)惠。其實(shí)上面忘了寫一點(diǎn),那就是計(jì)算機(jī)進(jìn)行矩陣運(yùn)算的效率要遠(yuǎn)遠(yuǎn)高于用for-loop來(lái)運(yùn)算,

不信可以用跑一跑:

# vetorization vs for loop# define two arrays a, b:

a = np.random.rand(1000000)

b = np.random.rand(1000000)

# for loop version:

t1 = time.time()

c = 0

for i in range(1000000):

c += a[i]*b[i]

t2 = time.time()

print(c)

print(“for loop version:”+str(1000*(t2-t1))+“ms”)

time1 = 1000*(t2-t1)

# vectorization version:

t1 = time.time()

c = np.dot(a,b)

t2 = time.time()

print(c)

print(“vectorization version:”+str(1000*(t2-t1))+“ms”)

time2 = 1000*(t2-t1)

print(“vectorization is faster than for loop by ”+str(time1/time2)+“ times!”)

運(yùn)行結(jié)果:

249765.8415288075

for loop version:627.4442672729492ms

249765.84152880745

vectorization version:1.5032291412353516ms

vectorization is faster than for loop by 417.39762093576525 times!

可見(jiàn),用for方法和向量化方法,計(jì)算結(jié)果是一樣,但是后者比前者快了400多倍!

因此,在計(jì)算量很大的時(shí)候,我們要盡可能想辦法對(duì)數(shù)據(jù)進(jìn)行Vectorizing,即“向量化”,以便讓計(jì)算機(jī)進(jìn)行矩陣運(yùn)算。

責(zé)任編輯:haq

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • for
    for
    +關(guān)注

    關(guān)注

    0

    文章

    44

    瀏覽量

    15830
  • python
    +關(guān)注

    關(guān)注

    56

    文章

    4800

    瀏覽量

    84820
  • 深度學(xué)習(xí)
    +關(guān)注

    關(guān)注

    73

    文章

    5507

    瀏覽量

    121298

原文標(biāo)題:消滅 for 循環(huán)!Python 的矩陣傳播機(jī)制和矩陣運(yùn)算

文章出處:【微信號(hào):LinuxHub,微信公眾號(hào):Linux愛(ài)好者】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏

    評(píng)論

    相關(guān)推薦

    JCMsuite—單模光纖傳播模式

    在本教程項(xiàng)目中,我們計(jì)算了帶有摻雜二氧化硅芯的圓柱形光纖的基本傳播模式。 磁芯具有相對(duì)介電常數(shù)?core=2.113和直徑dcore=8.2μm。包層具有相對(duì)介電常數(shù)?cladding
    發(fā)表于 01-09 08:57

    通過(guò)微透鏡陣列的傳播

    使用最新發(fā)布的版本中引入的一個(gè)新的MLA組件來(lái)設(shè)置和模擬這樣的系統(tǒng),允許對(duì)微透鏡組件后面的近場(chǎng)以及遠(yuǎn)場(chǎng)和焦點(diǎn)區(qū)域的傳輸場(chǎng)進(jìn)行徹底的研究。 微透鏡陣列后光傳播的研究 本用例研究微透鏡陣列后傳播的光。給出并
    發(fā)表于 01-08 08:49

    通過(guò)微透鏡陣列的傳播

    使用最新發(fā)布的版本中引入的一個(gè)新的MLA組件來(lái)設(shè)置和模擬這樣的系統(tǒng),允許對(duì)微透鏡組件后面的近場(chǎng)以及遠(yuǎn)場(chǎng)和焦點(diǎn)區(qū)域的傳輸場(chǎng)進(jìn)行徹底的研究。 微透鏡陣列后光傳播的研究 本用例研究微透鏡陣列后傳播的光。給出并
    發(fā)表于 12-11 11:32

    【每天學(xué)點(diǎn)AI】前向傳播、損失函數(shù)、反向傳播

    在深度學(xué)習(xí)的領(lǐng)域中,前向傳播、反向傳播和損失函數(shù)是構(gòu)建和訓(xùn)練神經(jīng)網(wǎng)絡(luò)模型的三個(gè)核心概念。今天,小編將通過(guò)一個(gè)簡(jiǎn)單的實(shí)例,解釋這三個(gè)概念,并展示它們的作用。前向傳播:神經(jīng)網(wǎng)絡(luò)的“思考”過(guò)程前向
    的頭像 發(fā)表于 11-15 10:32 ?702次閱讀
    【每天學(xué)點(diǎn)AI】前向<b class='flag-5'>傳播</b>、損失函數(shù)、反向<b class='flag-5'>傳播</b>

    MATLAB(6)--特殊矩陣

    通用的特殊矩陣 zero函數(shù):產(chǎn)生全是0矩陣,即零矩陣。 ones函數(shù):產(chǎn)生全是1矩陣,即幺矩陣。 eyes函數(shù):產(chǎn)生對(duì)角線為1的
    發(fā)表于 09-06 10:24

    MATLAB中的矩陣索引

    對(duì)矩陣進(jìn)行索引是從矩陣中選擇或修改部分元素的一種方式。MATLAB 有幾種索引樣式,它們不僅功能強(qiáng)大、靈活,而且可讀性強(qiáng)、表現(xiàn)力強(qiáng)。矩陣是 MATLAB 用來(lái)組織和分析數(shù)據(jù)的一個(gè)核心組件,索引是以可理解的方式有效操作
    的頭像 發(fā)表于 09-05 09:28 ?492次閱讀
    MATLAB中的<b class='flag-5'>矩陣</b>索引

    pytorch和python的關(guān)系是什么

    在當(dāng)今的人工智能領(lǐng)域,Python已經(jīng)成為了最受歡迎的編程語(yǔ)言之一。Python的易學(xué)易用、豐富的庫(kù)和框架以及強(qiáng)大的社區(qū)支持,使其成為了數(shù)據(jù)科學(xué)、機(jī)器學(xué)習(xí)和深度學(xué)習(xí)等領(lǐng)域的首選語(yǔ)言。而在深度學(xué)習(xí)領(lǐng)域
    的頭像 發(fā)表于 08-01 15:27 ?2089次閱讀

    盛顯科技:混合矩陣和拼接處理器的區(qū)別

    在視頻顯示與控制系統(tǒng)集成項(xiàng)目中,拼接處理器與混合矩陣作為兩大關(guān)鍵組件,各自扮演著不可或缺的角色。盡管它們都是信號(hào)管理與分配的重要工具,但它們?cè)谶\(yùn)作機(jī)制與功能特性上展現(xiàn)出了顯著的不同。 運(yùn)作機(jī)制之別
    的頭像 發(fā)表于 07-25 11:43 ?416次閱讀
    盛顯科技:混合<b class='flag-5'>矩陣</b>和拼接處理器的區(qū)別

    opencv-python和opencv一樣嗎

    不一樣。OpenCV(Open Source Computer Vision Library)是一個(gè)開(kāi)源的計(jì)算機(jī)視覺(jué)和機(jī)器學(xué)習(xí)軟件庫(kù),它提供了大量的圖像和視頻處理功能。OpenCV-Python
    的頭像 發(fā)表于 07-16 10:38 ?1267次閱讀

    BP神經(jīng)網(wǎng)絡(luò)的學(xué)習(xí)機(jī)制

    BP神經(jīng)網(wǎng)絡(luò)(Backpropagation Neural Network),即反向傳播神經(jīng)網(wǎng)絡(luò),是一種基于梯度下降算法的多層前饋神經(jīng)網(wǎng)絡(luò),其學(xué)習(xí)機(jī)制的核心在于通過(guò)反向傳播算法
    的頭像 發(fā)表于 07-10 15:49 ?654次閱讀

    神經(jīng)網(wǎng)絡(luò)前向傳播和反向傳播區(qū)別

    神經(jīng)網(wǎng)絡(luò)是一種強(qiáng)大的機(jī)器學(xué)習(xí)模型,廣泛應(yīng)用于各種領(lǐng)域,如圖像識(shí)別、語(yǔ)音識(shí)別、自然語(yǔ)言處理等。神經(jīng)網(wǎng)絡(luò)的核心是前向傳播和反向傳播算法。本文將詳細(xì)介紹神經(jīng)網(wǎng)絡(luò)的前向傳播和反向傳播的區(qū)別,以
    的頭像 發(fā)表于 07-02 14:18 ?858次閱讀

    光學(xué)雨量計(jì)雨量傳感器的原理與工作機(jī)制

    來(lái)計(jì)算雨量。 光學(xué)雨量計(jì)雨量傳感器的原理與工作機(jī)制 光學(xué)雨量計(jì)的核心部分是一個(gè)發(fā)射器和一個(gè)接收器。發(fā)射器發(fā)射一束光束,該光束在空中傳播。當(dāng)光束遇到空氣中的雨滴時(shí),部分光線會(huì)被雨滴散射,并沿不同的方向傳播。 接收
    的頭像 發(fā)表于 04-26 13:55 ?751次閱讀
    光學(xué)雨量計(jì)雨量傳感器的原理與工作<b class='flag-5'>機(jī)制</b>

    頻率對(duì)地波傳播的影響

    地波無(wú)線電信號(hào)傳播非常適合白天在這些頻率上進(jìn)行相對(duì)較短距離的傳播。由于電離層中的D區(qū)引起這些頻率上的信號(hào)衰減,因此白天不可能進(jìn)行天波電離層傳播
    的頭像 發(fā)表于 02-09 02:34 ?1276次閱讀
    頻率對(duì)地波<b class='flag-5'>傳播</b>的影響

    電磁波的傳播需要考慮哪些因素?

    在《電磁波是如何傳輸?shù)模俊肺覀兘榻B了空間電磁波傳播的三種基本方式:地波傳播,天波傳播和視距傳播。隨著電磁波頻率的升高,視距傳播是目前最主要的
    的頭像 發(fā)表于 01-16 10:02 ?1900次閱讀
    電磁波的<b class='flag-5'>傳播</b>需要考慮哪些因素?

    協(xié)方差矩陣和相關(guān)系數(shù)矩陣的轉(zhuǎn)化

    協(xié)方差矩陣和相關(guān)系數(shù)矩陣是統(tǒng)計(jì)學(xué)中常用的概念,在多變量統(tǒng)計(jì)分析中起著至關(guān)重要的作用。 在進(jìn)行多變量統(tǒng)計(jì)分析時(shí),我們通常會(huì)涉及多個(gè)變量之間的關(guān)系和相互作用。協(xié)方差矩陣和相關(guān)系數(shù)矩陣就是用
    的頭像 發(fā)表于 01-12 11:02 ?2096次閱讀
    主站蜘蛛池模板: 善良的女房东味道2在线观看| 国产精品人妻无码免费A片导航| 暖暖日本手机免费完整版在线观看| 国产99视频精品一区| 曰批视频免费40分钟不要钱| 色偷偷男人的天堂a v| 猫咪最新破解版下载| 国内精品久久久久影院亚洲| 成人精品视频| 97国产精品人妻无码免费| 亚洲精品久久久久一区二区三 | 亚洲 欧美 清纯 校园 另类| 嗯啊插的好深啊使劲抽视频| 久久99AV无色码人妻蜜柚| 国产精品7777人妻精品冫| jealousvue成熟40岁| 在线亚洲97se| 夜夜躁日日躁狠狠| 亚洲AV综合99一二三四区| 双手绑在床头调教乳尖| 日本护士在线观看| 欧美人妖12p| 麻1豆传媒2021精品| 久久国产精品麻豆AV影视| 国产真实夫妇交换视频| 国产精品一区二区制服丝袜 | 国产成人精品综合久久久| 99在线在线视频观看| 99久久99久久精品| 九九黄色大片| 国产伦精品一区二区免费| 国产成人免费高清激情视频| 超碰在线 视频| 把腿张开再深点好爽宝贝动态图| bt天堂午夜国产精品| 99在线观看视频免费| 99热这里只有精品9| a级男女性高爱潮高清试看| 98色精品视频在线| a级销魂美女| www.伊人|