python固有函數(shù) python的基礎(chǔ)函數(shù)

Python中的函數(shù)是什么,什么是主調(diào)函數(shù)和被調(diào)函數(shù),二者之間關(guān)系是什么?

主調(diào)函數(shù)是本身固有的數(shù),被調(diào)函數(shù)是通過其他數(shù)計算出來的

創(chuàng)新互聯(lián)專注于企業(yè)營銷型網(wǎng)站建設(shè)、網(wǎng)站重做改版、景泰網(wǎng)站定制設(shè)計、自適應(yīng)品牌網(wǎng)站建設(shè)、H5響應(yīng)式網(wǎng)站、購物商城網(wǎng)站建設(shè)、集團公司官網(wǎng)建設(shè)、外貿(mào)網(wǎng)站制作、高端網(wǎng)站制作、響應(yīng)式網(wǎng)頁設(shè)計等建站業(yè)務(wù),價格優(yōu)惠性價比高,為景泰等各大城市提供網(wǎng)站開發(fā)制作服務(wù)。

主調(diào)函數(shù) 調(diào)用別的函數(shù)實現(xiàn)功能

例如 A是主調(diào)函數(shù) B是被調(diào)函數(shù)

void A()

{

B();

}

OpenCV Python 系列教程4 - OpenCV 圖像處理(上)

學(xué)習目標:

OpenCV 中有 150 多種色彩空間轉(zhuǎn)化的方法,這里只討論兩種:

HSV的色相范圍為[0,179],飽和度范圍為[0,255],值范圍為[0,255]。不同的軟件使用不同的規(guī)模。如果要比較 OpenCV 值和它們,你需要標準化這些范圍。

HSV 和 HLV 解釋

運行結(jié)果:該段程序的作用是檢測藍色目標,同理可以檢測其他顏色的目標

結(jié)果中存在一定的噪音,之后的章節(jié)將會去掉它

這是物體跟蹤中最簡單的方法。一旦你學(xué)會了等高線的函數(shù),你可以做很多事情,比如找到這個物體的質(zhì)心,用它來跟蹤這個物體,僅僅通過在相機前移動你的手來畫圖表,還有很多其他有趣的事情。

菜鳥教程 在線 HSV- BGR 轉(zhuǎn)換

比如要找出綠色的 HSV 值,可以使用上面的程序,得到的值取一個上下界。如上面的取下界 [H-10, 100, 100],上界 [H+10, 255, 255]

或者使用其他工具如 GIMP

學(xué)習目標:

對圖像進行閾值處理,算是一種最簡單的圖像分割方法,基于圖像與背景之間的灰度差異,此項分割是基于像素級的分割

threshold(src, thresh, maxval, type[, dst]) - retval, dst

計算圖像小區(qū)域的閾值。所以我們對同一幅圖像的不同區(qū)域得到不同的閾值,這給我們在不同光照下的圖像提供了更好的結(jié)果。

三個特殊的輸入?yún)?shù)和一個輸出參數(shù)

adaptiveThreshold(src, maxValue, adaptiveMethod, thresholdType, blockSize, C[, dst]) - dst

opencv-threshold-python

OpenCV 圖片集

本節(jié)原文

學(xué)習目標:

OpenCV 提供兩種變換函數(shù): cv2.warpAffine 和 cv2.warpPerspective

cv2.resize() 完成縮放

文檔說明

運行結(jié)果

說明 : cv2.INTER_LINEAR 方法比 cv2.INTER_CUBIC 還慢,好像與官方文檔說的不一致? 有待驗證。

速度比較: INTER_CUBIC INTER_NEAREST INTER_LINEAR INTER_AREA INTER_LANCZOS4

改變圖像的位置,創(chuàng)建一個 np.float32 類型的變換矩陣,

warpAffine(src, M, dsize[, dst[, flags[, borderMode[, borderValue]]]]) - dst

運行結(jié)果:

旋轉(zhuǎn)角度( )是通過一個變換矩陣變換的:

OpenCV 提供的是可調(diào)旋轉(zhuǎn)中心的縮放旋轉(zhuǎn),這樣你可以在任何你喜歡的位置旋轉(zhuǎn)。修正后的變換矩陣為

這里

OpenCV 提供了 cv2.getRotationMatrix2D 控制

cv2.getRotationMatrix2D(center, angle, scale) → retval

運行結(jié)果

cv2.getAffineTransform(src, dst) → retval

函數(shù)關(guān)系:

\begin{bmatrix} x'_i \ y'_i \end{bmatrix}\begin{bmatrix} x'_i \ y'_i \end{bmatrix} =

其中

運行結(jié)果:圖上的點便于觀察,兩圖中的紅點是相互對應(yīng)的

透視變換需要一個 3x3 變換矩陣。轉(zhuǎn)換之后直線仍然保持筆直,要找到這個變換矩陣,需要輸入圖像上的 4 個點和輸出圖像上的對應(yīng)點。在這 4 個點中,有 3 個不應(yīng)該共線。通過 cv2.getPerspectiveTransform 計算得到變換矩陣,得到的矩陣 cv2.warpPerspective 變換得到最終結(jié)果。

本節(jié)原文

平滑處理(smoothing)也稱模糊處理(bluring),是一種簡單且使用頻率很高的圖像處理方法。平滑處理的用途:常見是用來 減少圖像上的噪點或失真 。在涉及到降低圖像分辨率時,平滑處理是很好用的方法。

圖像濾波:盡量保留圖像細節(jié)特征的條件下對目標圖像的噪聲進行抑制,其處理效果的好壞將直接影響到后續(xù)圖像處理和分析的有效性和可靠性。

消除圖像中的噪聲成分叫做圖像的平滑化或濾波操作。信號或圖像的能量大部分集中在幅度譜的低頻和中頻段,在高頻段,有用的信息會被噪聲淹沒。因此一個能降低高頻成分幅度的濾波器就能夠減弱噪聲的影響。

濾波的目的:抽出對象的特征作為圖像識別的特征模式;為適應(yīng)圖像處理的要求,消除圖像數(shù)字化時混入的噪聲。

濾波處理的要求:不能損壞圖像的輪廓及邊緣等重要信息;圖像清晰視覺效果好。

平滑濾波是低頻增強的空間濾波技術(shù),目的:模糊和消除噪音。

空間域的平滑濾波一般采用簡單平均法,即求鄰近像元點的平均亮度值。鄰域的大小與平滑的效果直接相關(guān),鄰域越大平滑效果越好,但是鄰域過大,平滑也會使邊緣信息的損失的越大,從而使輸出圖像變得模糊。因此需要選擇合適的鄰域。

濾波器:一個包含加權(quán)系數(shù)的窗口,利用濾波器平滑處理圖像時,把這個窗口放在圖像上,透過這個窗口來看我們得到的圖像。

線性濾波器:用于剔除輸入信號中不想要的頻率或者從許多頻率中選擇一個想要的頻率。

低通濾波器、高通濾波器、帶通濾波器、帶阻濾波器、全通濾波器、陷波濾波器

boxFilter(src, ddepth, ksize[, dst[, anchor[, normalize[, borderType]]]]) - dst

均值濾波是方框濾波歸一化后的特殊情況。歸一化就是要把處理的量縮放到一個范圍內(nèi)如 (0,1),以便統(tǒng)一處理和直觀量化。非歸一化的方框濾波用于計算每個像素鄰近內(nèi)的積分特性,比如密集光流算法中用到的圖像倒數(shù)的協(xié)方差矩陣。

運行結(jié)果:

均值濾波是典型的線性濾波算法,主要方法為鄰域平均法,即用一片圖像區(qū)域的各個像素的均值來代替原圖像中的各個像素值。一般需要在圖像上對目標像素給出一個模板(內(nèi)核),該模板包括了其周圍的臨近像素(比如以目標像素為中心的周圍8(3x3-1)個像素,構(gòu)成一個濾波模板,即 去掉目標像素本身 )。再用模板中的全體像素的平均值來代替原來像素值。即對待處理的當前像素點(x,y),選擇一個模板,該模板由其近鄰的若干像素組成,求模板中所有像素的均值,再把該均值賦予當前像素點(x,y),作為處理后圖像在該點上的灰度個g(x,y),即個g(x,y)=1/m ∑f(x,y) ,其中m為該模板中包含當前像素在內(nèi)的像素總個數(shù)。

均值濾波本身存在著固有的缺陷,即它不能很好地保護圖像細節(jié),在圖像去噪的同時也破壞了圖像的細節(jié)部分,從而使圖像變得模糊,不能很好地去除噪聲點。

cv2.blur(src, ksize[, dst[, anchor[, borderType]]]) → dst

結(jié)果:

高斯濾波:線性濾波,可以消除高斯噪聲,廣泛應(yīng)用于圖像處理的減噪過程。高斯濾波就是對整幅圖像進行加權(quán)平均的過程,每一個像素點的值,都由其本身和鄰域內(nèi)的其他像素值經(jīng)過 加權(quán)平均 后得到。高斯濾波的具體操作是:用一個模板(或稱卷積、掩模)掃描圖像中的每一個像素,用模板確定的鄰域內(nèi)像素的加權(quán)平均灰度值去替代模板中心像素點的值。

高斯濾波有用但是效率不高。

高斯模糊技術(shù)生成的圖像,其視覺效果就像是經(jīng)過一個半透明屏幕在觀察圖像,這與鏡頭焦外成像效果散景以及普通照明陰影中的效果都明顯不同。高斯平滑也用于計算機視覺算法中的預(yù)先處理階段,以增強圖像在不同比例大小下的圖像效果(參見尺度空間表示以及尺度空間實現(xiàn))。從數(shù)學(xué)的角度來看,圖像的高斯模糊過程就是圖像與正態(tài)分布做卷積。由于正態(tài)分布又叫作高斯分布,所以這項技術(shù)就叫作高斯模糊。

高斯濾波器是一類根據(jù)高斯函數(shù)的形狀來選擇權(quán)值的線性平滑濾波器。 高斯平滑濾波器對于抑制服從正態(tài)分布的噪聲非常有效。

一維零均值高斯函數(shù)為: 高斯分布參數(shù) 決定了高斯函數(shù)的寬度。

高斯噪聲的產(chǎn)生

GaussianBlur(src, ksize, sigmaX[, dst[, sigmaY[, borderType]]]) - dst

線性濾波容易構(gòu)造,并且易于從頻率響應(yīng)的角度來進行分析。

許多情況,使用近鄰像素的非線性濾波會得到更好的結(jié)果。比如在噪聲是散粒噪聲而不是高斯噪聲,即圖像偶爾會出現(xiàn)很大值的時候,用高斯濾波器進行圖像模糊時,噪聲像素不會被消除,而是轉(zhuǎn)化為更為柔和但仍然可見的散粒。

中值濾波(Median filter)是一種典型的非線性濾波技術(shù),基本思想是用像素點鄰域灰度值的中值來代替該像素點的灰度值,該方法在去除脈沖噪聲、椒鹽噪聲『椒鹽噪聲又稱脈沖噪聲,它隨機改變一些像素值,是由圖像傳感器,傳輸信道,解碼處理等產(chǎn)生的黑白相間的亮暗點噪聲。椒鹽噪聲往往由圖像切割引起?!坏耐瑫r又能保留圖像邊緣細節(jié),

中值濾波是基于排序統(tǒng)計理論的一種能有效抑制噪聲的非線性信號處理技術(shù),其基本原理是把數(shù)字圖像或數(shù)字序列中一點的值用該點的一個鄰域中各點值的中值代替,讓周圍的像素值接近的真實值,從而消除孤立的噪聲點,對于 斑點噪聲(speckle noise)和椒鹽噪聲(salt-and-pepper noise) 來說尤其有用,因為它不依賴于鄰域內(nèi)那些與典型值差別很大的值。中值濾波器在處理連續(xù)圖像窗函數(shù)時與線性濾波器的工作方式類似,但濾波過程卻不再是加權(quán)運算。

中值濾波在一定的條件下可以克服常見線性濾波器如最小均方濾波、方框濾波器、均值濾波等帶來的圖像細節(jié)模糊,而且對濾除脈沖干擾及圖像掃描噪聲非常有效,也常用于保護邊緣信息, 保存邊緣的特性使它在不希望出現(xiàn)邊緣模糊的場合也很有用,是非常經(jīng)典的平滑噪聲處理方法。

與均值濾波比較:

說明:中值濾波在一定條件下,可以克服線性濾波器(如均值濾波等)所帶來的圖像細節(jié)模糊,而且對濾除脈沖干擾即圖像掃描噪聲最為有效。在實際運算過程中并不需要圖像的統(tǒng)計特性,也給計算帶來不少方便。 但是對一些細節(jié)多,特別是線、尖頂?shù)燃毠?jié)多的圖像不宜采用中值濾波。

雙邊濾波(Bilateral filter)是一種非線性的濾波方法,是結(jié)合 圖像的空間鄰近度和像素值相似度 的一種折衷處理,同時考慮空域信息和灰度相似性,達到保邊去噪的目的。具有簡單、非迭代、局部的特點。

雙邊濾波器的好處是可以做邊緣保存(edge preserving),一般過去用的維納濾波或者高斯濾波去降噪,都會較明顯地模糊邊緣,對于高頻細節(jié)的保護效果并不明顯。雙邊濾波器顧名思義比高斯濾波多了一個高斯方差 sigma-d ,它是基于空間分布的高斯濾波函數(shù),所以在邊緣附近,離的較遠的像素不會太多影響到邊緣上的像素值,這樣就保證了邊緣附近像素值的保存。 但是由于保存了過多的高頻信息,對于彩色圖像里的高頻噪聲,雙邊濾波器不能夠干凈的濾掉,只能夠?qū)τ诘皖l信息進行較好的濾波。

運行結(jié)果

學(xué)習目標:

形態(tài)變換是基于圖像形狀的一些簡單操作。它通常在二進制圖像上執(zhí)行。

膨脹與腐蝕實現(xiàn)的功能

侵蝕的基本思想就像土壤侵蝕一樣,它會侵蝕前景物體的邊界(總是試圖保持前景為白色)。那它是做什么的?內(nèi)核在圖像中滑動(如在2D卷積中)。只有當內(nèi)核下的所有像素都是 1 時,原始圖像中的像素( 1 或 0 )才會被視為 1 ,否則它將被侵蝕(變?yōu)榱悖?/p>

erode(src, kernel[, dst[, anchor[, iterations[, borderType[, borderValue]]]]]) - dst

與腐蝕的操作相反。如果內(nèi)核下的至少一個像素為“1”,則像素元素為“1”。因此它增加了圖像中的白色區(qū)域或前景對象的大小增加。通常,在去除噪音的情況下,侵蝕之后是擴張。因為,侵蝕會消除白噪聲,但它也會縮小我們的物體。所以我們擴大它。由于噪音消失了,它們不會再回來,但我們的物體區(qū)域會增加。它也可用于連接對象的破碎部分

13個最常用的Python深度學(xué)習庫介紹

13個最常用的Python深度學(xué)習庫介紹

如果你對深度學(xué)習和卷積神經(jīng)網(wǎng)絡(luò)感興趣,但是并不知道從哪里開始,也不知道使用哪種庫,那么這里就為你提供了許多幫助。

在這篇文章里,我詳細解讀了9個我最喜歡的Python深度學(xué)習庫。

這個名單并不詳盡,它只是我在計算機視覺的職業(yè)生涯中使用并在某個時間段發(fā)現(xiàn)特別有用的一個庫的列表。

這其中的一些庫我比別人用的多很多,尤其是Keras、mxnet和sklearn-theano。

其他的一些我是間接的使用,比如Theano和TensorFlow(庫包括Keras、deepy和Blocks等)。

另外的我只是在一些特別的任務(wù)中用過(比如nolearn和他們的Deep Belief Network implementation)。

這篇文章的目的是向你介紹這些庫。我建議你認真了解這里的每一個庫,然后在某個具體工作情境中你就可以確定一個最適用的庫。

我想再次重申,這份名單并不詳盡。此外,由于我是計算機視覺研究人員并長期活躍在這個領(lǐng)域,對卷積神經(jīng)網(wǎng)絡(luò)(細胞神經(jīng)網(wǎng)絡(luò))方面的庫會關(guān)注更多。

我把這個深度學(xué)習庫的列表分為三個部分。

第一部分是比較流行的庫,你可能已經(jīng)很熟悉了。對于這些庫,我提供了一個通俗的、高層次的概述。然后,針對每個庫我詳細解說了我的喜歡之處和不喜歡之處,并列舉了一些適當?shù)膽?yīng)用案例。

第二部分進入到我個人最喜歡的深度學(xué)習庫,也是我日常工作中使用最多的,包括:Keras、mxnet和sklearn-theano等。

最后,我對第一部分中不經(jīng)常使用的庫做了一個“福利”板塊,你或許還會從中發(fā)現(xiàn)有用的或者是在第二板塊中我還沒有嘗試過但看起來很有趣的庫。

接下來就讓我們繼續(xù)探索。

針對初學(xué)者:

Caffe

提到“深度學(xué)習庫”就不可能不說到Caffe。事實上,自從你打開這個頁面學(xué)習深度學(xué)習庫,我就敢打保票你肯定聽說Caffe。

那么,究竟Caffe是什么呢?

Caffe是由Berkeley Vision and Learning Center(BVLC)建立的深度學(xué)習框架。它是模塊化的,速度極快。而且被應(yīng)用于學(xué)術(shù)界和產(chǎn)業(yè)界的start-of-the-art應(yīng)用程序中。

事實上,如果你去翻閱最新的深度學(xué)習出版物(也提供源代碼),你就很可能會在它們相關(guān)的GitHub庫中找到Caffe模型。

雖然Caffe本身并不是一個Python庫,但它提供綁定到Python上的編程語言。我們通常在新領(lǐng)域開拓網(wǎng)絡(luò)的時候使用這些綁定。

我把Caffe放在這個列表的原因是它幾乎被應(yīng)用在各個方面。你可以在一個空白文檔里定義你的模型架構(gòu)和解決方案,建立一個JSON文件類型的.prototxt配置文件。Caffe二進制文件提取這些.prototxt文件并培訓(xùn)你的網(wǎng)絡(luò)。Caffe完成培訓(xùn)之后,你可以把你的網(wǎng)絡(luò)和經(jīng)過分類的新圖像通過Caffe二進制文件,更好的就直接通過Python或MATLAB的API。

雖然我很喜歡Caffe的性能(它每天可以在K40 GPU上處理60萬張圖片),但相比之下我更喜歡Keras和mxnet。

主要的原因是,在.prototxt文件內(nèi)部構(gòu)建架構(gòu)可能會變得相當乏味和無聊。更重要的是, Caffe不能用編程方式調(diào)整超參數(shù)!由于這兩個原因,在基于Python的API中我傾向于對允許我實現(xiàn)終端到終端聯(lián)播網(wǎng)的庫傾斜(包括交叉驗證和調(diào)整超參數(shù))。

Theano

在最開始我想說Theano是美麗的。如果沒有Theano,我們根本不會達到現(xiàn)有的深度學(xué)習庫的數(shù)量(特別是在Python)。同樣的,如果沒有numpy,我們就不會有SciPy、scikit-learn和 scikit-image,,同樣可以說是關(guān)于Theano和深度學(xué)習更高級別的抽象。

非常核心的是,Theano是一個Python庫,用來定義、優(yōu)化和評估涉及多維數(shù)組的數(shù)學(xué)表達式。 Theano通過與numpy的緊密集成,透明地使用GPU來完成這些工作。

雖然可以利用Theano建立深度學(xué)習網(wǎng)絡(luò),但我傾向于認為Theano是神經(jīng)網(wǎng)絡(luò)的基石,同樣的numpy是作為科學(xué)計算的基石。事實上,大多數(shù)我在文章中提到的庫都是圍繞著Theano,使自己變得更加便利。

不要誤會我的意思,我愛Theano,我只是不喜歡用Theano編寫代碼。

在Theano建設(shè)卷積神經(jīng)網(wǎng)絡(luò)就像只用本機Python中的numpy寫一個定制的支持向量機(SVM),當然這個對比并不是很完美。

你可以做到嗎?

當然可以。

它值得花費您的時間和精力嗎?

嗯,也許吧。這取決于你是否想擺脫低級別或你的應(yīng)用是否需要。

就個人而言,我寧愿使用像Keras這樣的庫,它把Theano包裝成更有人性化的API,同樣的方式,scikit-learn使機器學(xué)習算法工作變得更加容易。

TensorFlow

與Theano類似,TensorFlow是使用數(shù)據(jù)流圖進行數(shù)值計算的開源庫(這是所有神經(jīng)網(wǎng)絡(luò)固有的特征)。最初由谷歌的機器智能研究機構(gòu)內(nèi)的Google Brain Team研究人員開發(fā),此后庫一直開源,并提供給公眾。

相比于Theano ,TensorFlow的主要優(yōu)點是分布式計算,特別是在多GPU的環(huán)境中(雖然這是Theano正在攻克的項目)。

除了用TensorFlow而不是Theano替換Keras后端,對于TensorFlow庫我并沒有太多的經(jīng)驗。然而在接下來的幾個月里,我希望這有所改變。

Lasagne

Lasagne是Theano中用于構(gòu)建和訓(xùn)練網(wǎng)絡(luò)的輕量級庫。這里的關(guān)鍵詞是輕量級的,也就意味著它不是一個像Keras一樣圍繞著Theano的重包裝的庫。雖然這會導(dǎo)致你的代碼更加繁瑣,但它會把你從各種限制中解脫出來,同時還可以讓您根據(jù)Theano進行模塊化的構(gòu)建。

簡而言之:Lasagne的功能是Theano的低級編程和Keras的高級抽象之間的一個折中。

我最喜歡的:

Keras

如果我必須選出一個最喜歡的深度學(xué)習Python庫,我將很難在Keras和mxnet中做出抉擇——但最后,我想我會選Keras。

說真的,Keras的好處我說都說不完。

Keras是一個最低限度的、模塊化的神經(jīng)網(wǎng)絡(luò)庫,可以使用Theano或TensorFlow作為后端。Keras最主要的用戶體驗是,從構(gòu)思到產(chǎn)生結(jié)果將會是一個非常迅速的過程。

在Keras中架構(gòu)網(wǎng)絡(luò)設(shè)計是十分輕松自然的。它包括一些state-of-the-art中針對優(yōu)化(Adam,RMSProp)、標準化(BatchNorm)和激活層(PReLU,ELU,LeakyReLU)最新的算法。

Keras也非常注重卷積神經(jīng)網(wǎng)絡(luò),這也是我十分需要的。無論它是有意還是無意的,我覺得從計算機視覺的角度來看這是非常有價值的。

更重要的是,你既可以輕松地構(gòu)建基于序列的網(wǎng)絡(luò)(其中輸入線性流經(jīng)網(wǎng)絡(luò))又可以創(chuàng)建基于圖形的網(wǎng)絡(luò)(輸入可以“跳過”某些層直接和后面對接)。這使得創(chuàng)建像GoogLeNet和SqueezeNet這樣復(fù)雜的網(wǎng)絡(luò)結(jié)構(gòu)變得容易得多。

我認為Keras唯一的問題是它不支持多GPU環(huán)境中并行地訓(xùn)練網(wǎng)絡(luò)。這可能會也可能不會成為你的大忌。

如果我想盡快地訓(xùn)練網(wǎng)絡(luò),那么我可能會使用mxnet。但是如果我需要調(diào)整超參數(shù),我就會用Keras設(shè)置四個獨立的實驗(分別在我的Titan X GPUs上運行)并評估結(jié)果。

mxnet

我第二喜歡的深度學(xué)習Python庫無疑就是mxnet(重點也是訓(xùn)練圖像分類網(wǎng)絡(luò))。雖然在mxnet中站立一個網(wǎng)絡(luò)可能需要較多的代碼,但它會提供給你驚人數(shù)量的語言綁定(C ++、Python、R、JavaScript等)。

Mxnet庫真正出色的是分布式計算,它支持在多個CPU / GPU機訓(xùn)練你的網(wǎng)絡(luò),甚至可以在AWS、Azure以及YARN集群。

它確實需要更多的代碼來設(shè)立一個實驗并在mxnet上運行(與Keras相比),但如果你需要跨多個GPU或系統(tǒng)分配訓(xùn)練,我推薦mxnet。

sklearn-theano

有時候你并不需要終端到終端的培養(yǎng)一個卷積神經(jīng)網(wǎng)絡(luò)。相反,你需要把CNN看作一個特征提取器。當你沒有足夠的數(shù)據(jù)來從頭培養(yǎng)一個完整的CNN時它就會變得特別有用。僅僅需要把你的輸入圖像放入流行的預(yù)先訓(xùn)練架構(gòu),如OverFeat、AlexNet、VGGNet或GoogLeNet,然后從FC層提取特征(或任何您要使用的層)。

總之,這就是sklearn-theano的功能所在。你不能用它從頭到尾的訓(xùn)練一個模型,但它的神奇之處就是可以把網(wǎng)絡(luò)作為特征提取器。當需要評估一個特定的問題是否適合使用深度學(xué)習來解決時,我傾向于使用這個庫作為我的第一手判斷。

nolearn

我在PyImageSearch博客上用過幾次nolearn,主要是在我的MacBook Pro上進行一些初步的GPU實驗和在Amazon EC2 GPU實例中進行深度學(xué)習。

Keras把 Theano和TensorFlow包裝成了更具人性化的API,而nolearn也為Lasagne做了相同的事。此外,nolearn中所有的代碼都是與scikit-learn兼容的,這對我來說絕對是個超級的福利。

我個人不使用nolearn做卷積神經(jīng)網(wǎng)絡(luò)(CNNs),但你當然也可以用(我更喜歡用Keras和mxnet來做CNNs)。我主要用nolearn來制作Deep Belief Networks (DBNs)。

DIGITS

DIGITS并不是一個真正的深度學(xué)習庫(雖然它是用Python寫的)。DIGITS(深度學(xué)習GPU培訓(xùn)系統(tǒng))實際上是用于培訓(xùn)Caffe深度學(xué)習模式的web應(yīng)用程序(雖然我認為你可以破解源代碼然后使用Caffe以外其他的后端進行工作,但這聽起來就像一場噩夢)。

如果你曾經(jīng)用過Caffe,那么你就會知道通過它的終端來定義.prototxt文件、生成圖像數(shù)據(jù)、運行網(wǎng)絡(luò)并監(jiān)管你的網(wǎng)絡(luò)訓(xùn)練是相當繁瑣的。 DIGITS旨在通過讓你在瀏覽器中執(zhí)行這些任務(wù)來解決這個問題。

此外,DIGITS的用戶界面非常出色,它可以為你提供有價值的統(tǒng)計數(shù)據(jù)和圖表作為你的模型訓(xùn)練。另外,你可以通過各種輸入輕松地可視化網(wǎng)絡(luò)中的激活層。最后,如果您想測試一個特定的圖像,您可以把圖片上傳到你的DIGITS服務(wù)器或進入圖片的URL,然后你的Caffe模型將會自動分類圖像并把結(jié)果顯示在瀏覽器中。干凈利落!

Blocks

說實話,雖然我一直想嘗試,但截至目前我的確從來沒用過Blocks(這也是我把它包括在這個列表里的原因)。就像許多個在這個列表中的其他庫一樣,Blocks建立在Theano之上,呈現(xiàn)出一個用戶友好型的API。

deepy

如果讓你猜deepy是圍繞哪個庫建立的,你會猜什么?

沒錯,就是Theano。

我記得在前一段時間用過deepy(做了初始提交),但在接下里的大概6-8個月我都沒有碰它了。我打算在接下來的博客文章里再嘗試一下。

pylearn2

雖然我從沒有主動地使用pylearn2,但由于歷史原因,我覺得很有必要把它包括在這個列表里。 Pylearn2不僅僅是一般的機器學(xué)習庫(地位類似于scikit-learn),也包含了深度學(xué)習算法的實現(xiàn)。

對于pylearn2我最大的擔憂就是(在撰寫本文時),它沒有一個活躍的開發(fā)者。正因為如此,相比于像Keras和mxnet這樣的有積極維護的庫,推薦pylearn2我還有些猶豫。

Deeplearning4j

這本應(yīng)是一個基于Python的列表,但我想我會把Deeplearning4j包括在這里,主要是出于對他們所做事跡的無比崇敬——Deeplearning4j為JVM建立了一個開源的、分布式的深度學(xué)習庫。

如果您在企業(yè)工作,你可能會有一個塞滿了用過的Hadoop和MapReduce服務(wù)器的儲存器。也許這些你還在用,也許早就不用了。

你怎樣才能把這些相同的服務(wù)器應(yīng)用到深度學(xué)習里?

事實證明是可以的——你只需要Deeplearning4j。

總計

以上就是本文關(guān)于13個最常用的Python深度學(xué)習庫介紹的全部內(nèi)容

Python和lisp在函數(shù)式編程上有哪些異同

Python內(nèi)在的函數(shù)式功能

自Python 1.0起,Python就已具有了以上所列中的絕大多數(shù)特點。但是就象Python所具有的大多數(shù)特性一樣,這些特點出現(xiàn)在了一種混合了各種特性的語言 中。?和Python的OOP(面向?qū)ο缶幊蹋?特性非常象,你想用多少就用多少,剩下的都可以不管(直到你隨后需要用到它們?yōu)橹梗T赑ython 2.0中,加入了列表解析(list comprehensions)這個非常好用的”語法糖“。 盡管列表解析沒有添加什么新功能,但它讓很多舊功能看起來好了不少。

Python中函數(shù)式編程的基本要素包括functionsmap()、reduce()、filter()和lambda算子(operator)。 在Python 1.x中,apply()函數(shù)也可以非常方便地拿來將一個函數(shù)的列表返回值直接用于另外一個函數(shù)。Python 2.0為此提供了一個改進后的語法??赡苡悬c讓人驚奇,使用如此之少的函數(shù)(以及基本的算子)幾乎就足以寫出任何Python程序了;更加特別的是,幾乎 用不著什么執(zhí)行流程控制語句。

所有(if,elif,else,assert,try,except,finally,for,break,continue,while,def)這 些都都能通過僅僅使用函數(shù)式編程中的函數(shù)和算子就能以函數(shù)式編程的風格處理好。盡管真正地在程序中完全排除使用所有流程控制命令可能只在想?yún)?加”Python混亂編程“大賽(可將Python代碼寫得跟Lisp代碼非常象)時才有意義,但這對理解函數(shù)式編程如何通過函數(shù)和遞歸表達流程控制很有 價值。

剔除流程控制語句

剔除練習首先要考慮的第一件事是,實際上,Python會對布爾表達式求值進行“短路”處理。這就為我們提供了一個if/elif/else分支語句的表達式版(假設(shè)每個分支只調(diào)用一個函數(shù),不是這種情況時也很容易組織成重新安排成這種情況)。 這里給出怎么做:

對Python中的條件調(diào)用進行短路處理

Python

# Normal statement-based flow control

if cond1:?? func1()

elif cond2: func2()

else:???????? func3()

# Equivalent "short circuit" expression

(cond1 and func1()) or (cond2 and func2()) or (func3())

# Example "short circuit" expression

x = 3

def pr(s): return s

(x==1 and pr('one')) or (x==2 and pr('two')) or (pr('other'))

'other'

x = 2

(x==1 and pr('one')) or (x==2 and pr('two')) or (pr('other'))

'two'

我們的表達式版本的條件調(diào)用看上去可能不算什么,更象是個小把戲;然而,如果我們注意到lambda算子必須返回一個表達式,這就更值得關(guān)注了。既然如我 們所示,表達式能夠通過短路包含一個條件判斷,那么,lambda表達式就是個完全通用的表達條件判斷返回值的手段了。我們來一個例子:

Python中短路的Lambda

Python

pr = lambda s:s

namenum = lambda x: (x==1 and pr("one")) \

....??????????????????or (x==2 and pr("two")) \

....??????????????????or (pr("other"))

namenum(1)

'one'

namenum(2)

'two'

namenum(3)

'other'

將函數(shù)作為具有首要地位的對象

前面的例子已經(jīng)表明了Python中函數(shù)具有首要地位,但有點委婉。當我們用lambda操作創(chuàng)建一個函數(shù)對象時, 我們所得到的東西是完全通用的。就其本質(zhì)而言,我們可以將我們的對象同名字”pr”和”namenum”綁定到一起, 以完全相同的方式,我們也也完全可以將數(shù)字23或者字符串”spam” 同這些名字綁定到一起。但是,就象我們可以無需將其綁定到任何名字之上就能直接使用數(shù)字23(也就是說,它可以用作函數(shù)的參數(shù))一樣,我們也可以直接使用 我們使用lambda創(chuàng)建的函數(shù)對象,而無需將其綁定到任何名字之上。在Python中,函數(shù)就是另外一種我們能夠就像某種處理的值。

我們對具有首要地位的對象做的比較多的事情就是,將它們作為參數(shù)傳遞給函數(shù)式編程固有的函數(shù)map()、reduce()和filter()。這三個函數(shù)接受的第一個參數(shù)都是一個函數(shù)對象。

map()針對指定給它的一個或多個列表中每一項對應(yīng)的內(nèi)容,執(zhí)行一次作為參數(shù)傳遞給它的那個函數(shù) ,最后返回一個結(jié)果列表。

reduce()針對每個后繼項以及最后結(jié)果的累積結(jié)果,執(zhí)行一次作為參數(shù)傳遞給它的那個函數(shù);例如,reduce(lambda n,m:n*m, range(1,10))是求”10的階乘”的意思(換言之,將每一項和前面所得的乘積進行相乘)

filter()使用那個作為參數(shù)傳遞給它的函數(shù),對一個列表中的所有項進行”求值“,返回一個由所有能夠通過那個函數(shù)測試的項組成的經(jīng)過遴選后的列表。

我們經(jīng)常也會把函數(shù)對象傳遞給我們自己定義的函數(shù),不過一般情況下這些自定義的函數(shù)就是前文提及的內(nèi)建函數(shù)的某種形式的組合。

通過組合使用這三種函數(shù)式編程內(nèi)建的函數(shù), 能夠?qū)崿F(xiàn)范圍驚人的“執(zhí)行流程”操作(全都不用語句,僅僅使用表達式實現(xiàn))。

網(wǎng)站名稱:python固有函數(shù) python的基礎(chǔ)函數(shù)
文章來源:http://muchs.cn/article6/hgipog.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供App設(shè)計域名注冊、網(wǎng)站建設(shè)、外貿(mào)建站、網(wǎng)頁設(shè)計公司品牌網(wǎng)站建設(shè)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

手機網(wǎng)站建設(shè)