今天是新專欄《AI白身境》的第三篇,,所謂白身,,就是什么都不會(huì),還沒有進(jìn)入角色,。 上一篇給大家介紹了如何正確使用Linux,,如何利用shell,vim,,git這三大神器,。相信大家也掌握的差不多了,今天就和大家分享下對(duì)于python,,我們應(yīng)該如何掌握,,如何正確把它和深度學(xué)習(xí)完美的結(jié)合起來。 作者 | 湯興旺 言有三 編輯 | 湯興旺 言有三 01 基礎(chǔ)操作 人生苦短,,必須學(xué)好python,!python現(xiàn)在火的程度已經(jīng)不需要我多言了,,它為什么為火,我認(rèn)為有兩個(gè)原因,,第一是人工智能這個(gè)大背景,,第二是它真的太容易學(xué)了,沒有任何一門語言比它好上手,,接下來我將和大家分享下python的基礎(chǔ)操作,。另外請(qǐng)注意,我的所有操作都是基于python3,! 1.1 python核心內(nèi)容之函數(shù) 如果你想要學(xué)好python,,務(wù)必學(xué)好function,不然就相當(dāng)于沒學(xué)過python,。 1.1.1 函數(shù)定義 在python函數(shù)定義時(shí)有五個(gè)要點(diǎn),,分別是def、函數(shù)名,、函數(shù)體,、參數(shù)、返回值,、以及兩個(gè)英文版符號(hào):小括號(hào)(括號(hào)內(nèi)為參數(shù))和冒號(hào),。下面對(duì)這5點(diǎn)分別解釋下: def:函數(shù)關(guān)鍵字。必須要有,,系統(tǒng)看到它,,就知道下面是個(gè)函數(shù)了。 函數(shù)名:函數(shù)的名稱,。就是給函數(shù)起了個(gè)名字,,當(dāng)你調(diào)用函數(shù)時(shí),用函數(shù)名就可以直接調(diào)用了,。 函數(shù)體:函數(shù)中進(jìn)行的具體操作,。就是你這個(gè)函數(shù)想要實(shí)現(xiàn)的功能。 參數(shù):提供給函數(shù)體,。 返回值:當(dāng)函數(shù)執(zhí)行完畢后,,可以給調(diào)用者返回想要的數(shù)據(jù)。 下面通過一個(gè)具體的實(shí)例來說明下: def get_image(picture_path): img = cv2.imread("picture_path") return img 上面實(shí)例中,,get_image是這個(gè)函數(shù)的函數(shù)名,,這個(gè)函數(shù)的參數(shù)是picture_path,就是圖片的路徑,,這個(gè)參數(shù)會(huì)傳到函數(shù)體中。如果你的圖片路徑是d://01.jpg,,這時(shí)候函數(shù)體就會(huì)變成img = cv2.imread("d://01.jpg"),最后返回圖片,。 1.1.2 函數(shù)參數(shù) 相信你已經(jīng)知道函數(shù)應(yīng)該如何定義了,,接下來再說說函數(shù)中最難理解也是最重要的一點(diǎn),那就是函數(shù)參數(shù),。 首先我們說說位置參數(shù),。 def sum(x): z = x+x return z >>>sum(10) 20 這里的x可以認(rèn)為是一個(gè)位置參數(shù),顧名思義,,x先占一個(gè)位置,,當(dāng)給予它一個(gè)值時(shí),它會(huì)傳到函數(shù)體中,,注意像這種位置參數(shù),,務(wù)必要給予一個(gè)值,不然程序會(huì)報(bào)錯(cuò),。 接下來說說默認(rèn)參數(shù),。 def sum(x,y=12): z = x+y return z >>>sum(10) 22 >>>sum(10,13) 23 這個(gè)實(shí)例中,y = 12就是個(gè)默認(rèn)參數(shù),,當(dāng)該參數(shù)沒有傳入相應(yīng)的值時(shí),,該參數(shù)就使用默認(rèn)值。但有點(diǎn)需要注意:默認(rèn)參數(shù)必須在位置參數(shù)后面,,否則會(huì)報(bào)錯(cuò),。 哈哈,報(bào)錯(cuò)了,,千萬不要放這樣的錯(cuò)誤喲,,想避免這樣的錯(cuò)誤很簡單,就從你定義的順序從前往后寫就行,。 然后再說說可變參數(shù),。 在使用python函數(shù)時(shí),有時(shí)候我們不知道我們需要傳入多少個(gè)參數(shù),,于是就有了可變參數(shù)的這個(gè)概念,。為了更好的理解這個(gè)概念,先拋出一個(gè)問題:計(jì)算a+b+c+d+...的和,,因?yàn)椴恢烙袔讉€(gè)數(shù)字,,所以是個(gè)可變的問題。那么如何用python函數(shù)來解決這個(gè)問題呢,,如下: def sum(*numbers): sum = 0 for n in numbers: sum =sum +n*n return sum >>>sum(10,2,12,3,4) 我們?cè)趨?shù)前面加了一個(gè)*號(hào),。這樣這個(gè)參數(shù)就變成了可變參數(shù)。在調(diào)用該函數(shù)時(shí),,可以傳入任意個(gè)參數(shù),,包括0個(gè)參數(shù)。 最后說一下關(guān)鍵字參數(shù)。 什么是關(guān)鍵字參數(shù),,對(duì)于這個(gè)概念我們先看下面的代碼: def penson(name,age,**kw): print('name:',name,'age:',age,'other:',kw) >>>person('zhang san',24,city='changchun') name:zhang san age:24 other:{'city':'changchun'} 通過上面的例子你應(yīng)該明白了關(guān)鍵字參數(shù)是什么了吧,,實(shí)際上就是你傳入的參數(shù)比你之前定義的參數(shù)會(huì)多,注意位置參數(shù)必須要給它傳值,。 這就是python函數(shù)的一些基本的方法,,更復(fù)雜的函數(shù)實(shí)際上也就是上面的組合而已,只要多加練習(xí),,一定能夠很好的掌握它,。 1.2 python 縮進(jìn)規(guī)則 你可能已經(jīng)注意到上面我寫python函數(shù)時(shí)用到了許多縮進(jìn),你可能也會(huì)問自己為什么要采用縮進(jìn),,應(yīng)該如何縮進(jìn)這些問題,,下面請(qǐng)看我一一道來。 1.2.1 python縮進(jìn)的由來 我們?cè)诖髮W(xué)時(shí)可能都學(xué)過c語言,,在c中主要通過{}來區(qū)分代碼快,,但我們初學(xué)者往往忘記打{},而且花括號(hào)多了,,我們就暈了,。而python就不會(huì)出現(xiàn)這種問題,python中的縮進(jìn)可以理解為c中的{},。我們來看下下面這個(gè)例子: def SayHello(): print("hello world") SayHello() 你會(huì)發(fā)現(xiàn)此時(shí)不能輸出任何結(jié)果,,我們?cè)倏聪旅嬉欢未a def SayHello(): print("hello world") SayHello() 這樣就成功了,為什么會(huì)這樣呢,,下面我介紹一種畫框法,。如下圖所示相同顏色框在一起說明它們是屬于同一代碼塊。 這段代碼只是定義了一個(gè)函數(shù)并未執(zhí)行它,,正確的寫法如下: 以后大家可以用這種畫框法確定縮進(jìn)是否正確,。 02 矩陣庫——NumPy NumPy(Numerical Python) 是 Python語言的一個(gè)擴(kuò)展程序庫,支持高維數(shù)組與矩陣運(yùn)算,,提供了大量的數(shù)學(xué)函數(shù)庫,。 對(duì)于深度學(xué)習(xí)來說,高維數(shù)組我們用的很多,,因此要想學(xué)好深度學(xué)習(xí),,必須對(duì)NumPy了如指掌。 2.1 ndarray對(duì)象 在NumPy中我們用ndarray表示數(shù)組,,可以說它是整個(gè)庫的核心,。下面我們將從以下幾個(gè)方面來理解ndarray。 2.2 創(chuàng)建數(shù)組 要想對(duì)數(shù)組進(jìn)行運(yùn)算操作,,我們必須先創(chuàng)建個(gè)數(shù)組,。方法如下: import numpy as np#導(dǎo)入numpy這個(gè)包 a0 = np.array([1,2,3,4])#采用列表方式 a1 = np.array((1,2,3,4))#采用元組方式 對(duì)于多維數(shù)組的創(chuàng)建(注意中括號(hào)),,如下: import numpy as np a = np.array([[1,2,3],[2,3,4],[4,5,6]]) 上面我們創(chuàng)建的數(shù)組里面的元素都是我們指定的,那么如何自動(dòng)生成數(shù)組?又如何隨機(jī)的生成一個(gè)數(shù)組呢,?我們首先看第一個(gè)方法arange(),,如下: import numpy as np a = np.arange(0,1,0.1) 在上面這個(gè)數(shù)組中,arange()的第一個(gè)值代表開始值,,第二個(gè)值代表終值(不包括這個(gè)值),最后一個(gè)值代表步長(間隔),,如arange(1,10,1)代表一個(gè)從0-9,,步長為1的數(shù)組。這就是arange(),,經(jīng)常用的到,!我們?cè)倏吹诙€(gè)方法linspace(),如下: import numpy as np a = np.linspace(0,10,10) 對(duì)于linspace(),,它的前兩個(gè)值和arange()一樣,,代表開始值和終值,但有個(gè)區(qū)別是linspace()默認(rèn)包括終值,,如果你不想包括終值,,加上endpoint = False即可,對(duì)于第三個(gè)值它是指元素的個(gè)數(shù),,這個(gè)和arange不一樣,,一定不要混淆。 最后我們?cè)僬f下如何創(chuàng)建一個(gè)隨機(jī)數(shù)組,。 在NumPy中有一龐大的函數(shù)庫,,對(duì)于隨機(jī)數(shù)我們可以采用numpy.random模塊,該模塊中有大量和隨機(jī)數(shù)相關(guān)的函數(shù),。一些函數(shù)如下: 我們可以利用這些函數(shù)來創(chuàng)建你想要的隨機(jī)數(shù),,一些實(shí)例如下: import numpy as np a = np.random.rand(2,2) b = np.random.randn(2,2) c = np.random.randint(0,9,(2,2)) 創(chuàng)建隨機(jī)數(shù)是不是很簡單,其實(shí)對(duì)于數(shù)組的創(chuàng)建還有許多方法,如下面所示: np.zeros() :生成元素全是0的數(shù)組 np.ones():生成元素全是1的數(shù)組 np.zeros_like(a):生成形狀和a一樣且元素全是0的數(shù)組 np.ones_like(a):生成形狀和a一樣且元素全是1的數(shù)組 ... 相信通過上面的介紹你已經(jīng)掌握了如何創(chuàng)建一個(gè)數(shù)組了,,很好,!那么我們?cè)偎伎家粋€(gè)問題,若碰到一個(gè)元素很多的數(shù)組,,但卻不知道它的形狀等參數(shù),,這時(shí)該怎么辦呢?對(duì)于這個(gè)問題我們可以通過下面的一些方法來解決,。 獲取數(shù)組a的shape:a.shape 獲取數(shù)組a的元素類型:a.dtype 獲取數(shù)組a的維度:a.ndim .... 2.3 存取數(shù)組 當(dāng)一個(gè)數(shù)組創(chuàng)建好后,,我們有時(shí)候可能需要對(duì)一個(gè)數(shù)組中的一些具體元素進(jìn)行運(yùn)算,或者更改數(shù)組中一些元素的值,。進(jìn)行這些操作的前提是先能存取數(shù)組,,為了解決這個(gè)問題,,這里我們主要介紹切片法和整數(shù)列表來存取數(shù)組元素,這種方法其實(shí)也是最常見的,。 import numpy as np a = np.array([4,2,3,5,9,0,,6,8,7]) >>>[4,2,3,5,9,0,6,8,7] 對(duì)于上面這個(gè)數(shù)組,,如果我想要得到5這個(gè)元素該怎么辦呢?很簡單,,在ndarray中第一個(gè)元素的位置是0,,本例中5在第四個(gè)位置,所以a[3] = 5,。 我們還可以用切片獲取數(shù)組的一部分,,如a[3:5]表示獲取第四個(gè)位置和第五個(gè)位置的元素,a[3:5]=[5,9];a[::-1]表示從最后一個(gè)元素到第一個(gè)元素,該方法省略了開始下標(biāo)和結(jié)束下標(biāo),,這時(shí)候開始下標(biāo)就是對(duì)應(yīng)第一個(gè)元素,,結(jié)束下標(biāo)就對(duì)應(yīng)著最后一個(gè)數(shù),-1表示步長為1,,負(fù)號(hào)從后往前數(shù),。 上面說的都是一維數(shù)組的存取,我們?cè)賮碚f一下二維數(shù)組,。其實(shí)二維數(shù)組和一維數(shù)組數(shù)組類似,,只是二維數(shù)組有2個(gè)軸,所以下標(biāo)自然需要2個(gè)值來表示,。請(qǐng)看下面的實(shí)例: 在二維數(shù)組中豎軸表示第0軸,,橫軸表示第1軸,讀取元素時(shí)我們通過逗號(hào)把0軸和1軸隔開,,這樣就可以通過一維數(shù)組的方法來讀取,,最后兩者的交集就是我們需要讀取的元素。 我們?cè)倏聪氯S數(shù)組,,這也是最復(fù)雜的,,在深度學(xué)習(xí)特征數(shù)據(jù)處理時(shí)用的是最多的。我們先創(chuàng)建一個(gè)3行5列3通道的數(shù)組,,看看效果,。 再來分析下這個(gè)生成的數(shù)組。我們知道這個(gè)三維數(shù)組有下圖所示的三塊,,而第幾塊又代表通道的第幾行數(shù)據(jù),,圖中圈的那個(gè)塊就是通道的第2行數(shù)據(jù),另外在每一個(gè)塊里面每行數(shù)據(jù)代表通道的第幾列數(shù)據(jù),。圖中圈的那個(gè)塊5有行數(shù)據(jù),,則代表著這個(gè)通道有5列數(shù)據(jù)。 其次在這個(gè)三維數(shù)組中,,有下面圖示的這樣三列,,一列代表一個(gè)通道,。另外要注意所有的數(shù)據(jù)位置的下標(biāo)都是從0開始。 下面我要把圖示的元素改成8該怎么辦呢,?如下: 通過上面的例子你是否理解了三維數(shù)組應(yīng)該怎樣存取數(shù)據(jù)了呢,?理解了的話就打開vim多寫寫基本就能深刻的掌握了。 2.4 NumPy常見函數(shù)使用 現(xiàn)在我們已經(jīng)學(xué)會(huì)了創(chuàng)建數(shù)組和數(shù)組的存取,,那么我們?cè)撊绾螌?duì)數(shù)組進(jìn)行函數(shù)運(yùn)算呢,,這也是NumPy的核心內(nèi)容。 2.4.1 數(shù)組維度變換 我們首先說一下如何對(duì)數(shù)組的形狀進(jìn)行整理,,即將一個(gè)任意形狀的矩陣轉(zhuǎn)化我們想要轉(zhuǎn)化的任意形狀,,當(dāng)然要想完成這個(gè)操作,元素個(gè)數(shù)必須要滿足,。請(qǐng)看下面實(shí)例: import numpy as np a = np.arange(0,10,1) b = a.reshape(2,5) print(a) print(b) 上面的實(shí)例通過reshape()函數(shù)把一個(gè)1維數(shù)組,變成了一個(gè)2行5列的一個(gè)數(shù)組,。reshape()里面的參數(shù)就是你想要轉(zhuǎn)換成的數(shù)組的形狀,。再看一個(gè)實(shí)例對(duì)reshape()熟練下,如下: import numpy as np a = np.arange(0,10,1) b = a.reshape(2,-1) c = a.reshape(-1,5) print(a) print(b) print(c) b和c的結(jié)果是一樣的,,而且和上一個(gè)實(shí)例的結(jié)果也一樣,,這是為什么呢?其實(shí)這里面的-1代表自動(dòng)生成的意思,,意思就是對(duì)于b我已經(jīng)指定了數(shù)組的行是2行,,那么系統(tǒng)就會(huì)自動(dòng)生成一個(gè)5列,因?yàn)槭?0個(gè)數(shù),,必須是5列,,所以b和c仍然是2行5列的數(shù)組,這就是數(shù)組形狀變換,。 說完數(shù)組形狀變換我們?cè)倏聪氯绾螌?duì)數(shù)組進(jìn)行維度交換,。請(qǐng)看下面實(shí)例: import numpy as np a = np.arange(10).reshape(2,5) b = a.swapaxes(0,1) print(a) print(b) 通過上面實(shí)例我們看出通過swapaxes()將一個(gè)數(shù)組的第0軸和第1軸進(jìn)行了交換,由2行5列變成了5列2行,。這是二維數(shù)組的維度交換,,我們?cè)倏匆粋€(gè)三維數(shù)組的例子,如下: import numpy as np a = np.arange(24).reshape(2,3,4) b = a.swapaxes(0,1) print(a) print(b) 這個(gè)實(shí)例我將三維數(shù)組的第0軸和第1軸進(jìn)行了交換,,第0軸就是我在上面2.3存取數(shù)組這一節(jié)中說的塊,,第1軸就是塊中的行,下面我將我對(duì)三維數(shù)組維度交換的理解和大家分享下,。 如下,,我們首先將第一塊第一行的[0,1,2,3]的位置記為(1,1),第一塊第二行的[4,5,6,7]的位置記為(1,2),,第二塊第三行的[20,21,22,23]記為(2,3),,其它幾個(gè)位置坐標(biāo)類推?,F(xiàn)在我們需要將第0軸和第1軸交換,所以第一塊第一行的[0,1,2,3]的位置變?yōu)?1,1),就是第一塊第一行,;第一塊第二行的[4,5,6,7]的位置變?yōu)闉?2,1),就是第二塊第一行,;第二塊第三行的[20,21,22,23]變?yōu)?3,2),就是第三塊第二行。通過這樣的理解你對(duì)上面實(shí)例輸出的結(jié)果明白了嗎,?明白的話,,請(qǐng)繼續(xù)往下學(xué)如何對(duì)數(shù)組進(jìn)行降維。 對(duì)于數(shù)組降維,,我們繼續(xù)通過實(shí)例來分析,,如下: import numpy as np a = np.arange(10).reshape(2,5) b =np.flatten() c = a.reshape(-1) d = a.ravel() print(a) print(b) print(c) print(d) 可以看出我們通過reshape(-1)、flatten()和ravel()函數(shù)將多維很容易就變成了1維數(shù)組,。 2.4.2 堆疊數(shù)組 我們?cè)僬f一下數(shù)組的堆疊,,這個(gè)也是經(jīng)常會(huì)用的。數(shù)組的堆疊通常有水平疊加和垂直疊加,,分別用到hstack()和vstack()函數(shù),,請(qǐng)看下面的實(shí)例: import numpy as np a = np.array([1,2,3,4]) b = np.array([5,6,7,8]) c = np.hstack((a,b)) d = np.vstack((a,b)) print(c) print(d) 通過這個(gè)例子我們也看出通過hstack()和vstack()將數(shù)組a和b堆疊成了一個(gè)數(shù)組。 上面就是我對(duì)NumPy在深度學(xué)習(xí)中最常見的幾點(diǎn)的介紹,,其實(shí)還有許多,,平時(shí)多多積累就行。 03 數(shù)據(jù)可視化——matplotlib 說完python我們?cè)僬f說深度學(xué)習(xí)中用的比較多的matplotlib,。matplotlib是python中最常用的可視化工具之一,,用處非常大。 3.1 使用pyplot模塊繪圖 我們先通過matplotlib和NumPy繪制一個(gè)圖像,。 import matplotlib.pyplot as plt import numpy as np x= np.linspace(0,10,100) y=np.sin(x) plt.figure(figsize=(8,4)) plt.plot(x,y) plt.show() 在這個(gè)實(shí)例中,,我們首先通過import matplotlib的繪圖塊pyplot,并重新命名為plt,。然后用figure調(diào)出一個(gè)畫布,figsize參數(shù)指定畫布的寬度和高度,,單位是英寸(1英寸為25.4毫米)。創(chuàng)建好畫布后,,我們就可以用plot()在畫布上畫圖了,,plot()的前兩個(gè)參數(shù)分別代表X,Y軸數(shù)據(jù)的對(duì)象,。另外plot()參數(shù)還可以指定曲線的標(biāo)簽,,顏色,線寬等,。 其實(shí)我們還能對(duì)坐標(biāo)軸通過下面的方法進(jìn)行一些參數(shù)的設(shè)置: xlabel,ylabel:分別設(shè)置X,,Y軸的標(biāo)題文字 title:設(shè)置標(biāo)題 xlim,ylim:分別設(shè)置X,Y軸的顯示范圍 legend:顯示圖例 請(qǐng)看下面一個(gè)標(biāo)準(zhǔn)的圖形: 接下來我們?cè)倏纯慈绾萎嬛狈綀D,直方圖在圖像處理中經(jīng)常會(huì)用到,。 在用plt.hist()畫直方圖時(shí),,第一個(gè)參數(shù)是繪圖數(shù)據(jù),,這是必須要有的;另外bins代表直方圖的長條形數(shù)目,,默認(rèn)為10,;normed表示是否將得到的直方圖向量歸一化,默認(rèn)為0,,代表不歸一,;facecolor代表長條形的顏色;edgecolor代表長條行邊框的顏色,;alpha代表透明度,。 3.2 matlibplot讀取圖像 matplotlib的imread和imshow()提供了圖像的讀取和顯示功能,另外imread()從圖像文件中讀入數(shù)據(jù)得到的是一個(gè)圖像的NumPy數(shù)組,。 現(xiàn)在我們用matlibplot讀取上面這一張可愛的貓圖,,方法如下: import matplotlib.pyplot as plt img = plt.imread("02.jpg") plt.imshow(img) plt.show() 可以看出,很容易就能讀取一張圖片,。我們可以通過下面一些方法查看這張圖片的屬性,。 print(img.shape) print(img.dtype) 我們?cè)倏纯磎atplotlib讀取的圖像是不是NumPy數(shù)組,如下: 可以明顯看到這是ndarray格式,,總共三個(gè)通道,分別代表RGB,。 3.3 matplotlib工具欄 從上面的例子中就可以看到,,當(dāng)顯示一張圖片時(shí),菜單欄自動(dòng)生成了一些按鈕,,這些按鈕都有各自的功能,。 3.3.1 前進(jìn)后退按鈕 這三個(gè)按鈕就像是我們使用的瀏覽器中的主頁和前進(jìn)后退按鈕一樣,一開始這三個(gè)圖是沒有什么用的,,因?yàn)樗緛砭吞幱谥黜?,既不能前進(jìn)也不能后退,當(dāng)你使用平移和縮放功能后,,每一次操作就相當(dāng)于在瀏覽器中點(diǎn)開了一個(gè)網(wǎng)頁一樣,,這時(shí)候你就可以使用前進(jìn)后退和回到最開始狀態(tài)的按鈕了。 3.3.2 平移縮放按鈕 這個(gè)按鈕也比較簡單,,按住鼠標(biāo)左鍵在圖片區(qū)域左右移動(dòng)可以實(shí)現(xiàn)圖像的左右平移,,上下移動(dòng)就可以使圖像上下平移,按住X或者Y鍵移動(dòng)即只能在X或者Y方向上平移,。同理按住鼠標(biāo)右鍵就是縮放,。如果按住Ctrl鍵再進(jìn)行上述操作,則是XY軸成比例平移或縮放,。 3.3.3 縮放到指定矩形按鈕 按住鼠標(biāo)左鍵或者右鍵,,選定一個(gè)矩形區(qū)域,,即可將圖形放大或者縮小到制定的矩形區(qū)域中。 在放大局部細(xì)節(jié)圖時(shí)經(jīng)常使用,。 3.3.4 設(shè)置子圖參數(shù)按鈕 點(diǎn)擊該按鈕可以設(shè)置子繪圖區(qū)域的長度和寬度,,還可以設(shè)置各個(gè)子圖之間的距離,。 3.3.5 保存按鈕 該按鈕可以將圖像保存為png、pdf等格式,。 matplotlib的一些基礎(chǔ)知識(shí)就介紹到這里,大家一定要多加實(shí)踐,,這樣才能更好的掌握,。 04 必備的python庫 要想深度學(xué)習(xí)學(xué)的好,必須非常好的掌握python各種庫,,這是進(jìn)行深度學(xué)習(xí)的基礎(chǔ),。下面我和大家分享下一些常用的庫,其實(shí)上面我已經(jīng)介紹了兩個(gè)了那就是NumPy和matplotlib,,還有一些其他的庫,請(qǐng)繼續(xù)往下看,。 4.1 科學(xué)計(jì)算與數(shù)據(jù)處理庫 說到科學(xué)計(jì)算和數(shù)據(jù)處理,,我們可能馬上就會(huì)想到NumPy但其實(shí)還有兩個(gè)其他的庫,那就是SciPy和Pandas,。 Scipy在Numpy的基礎(chǔ)上增加了眾多的數(shù)學(xué)計(jì)算,、科學(xué)計(jì)算及工程計(jì)算中常用的模塊,例如線性代數(shù),、圖像處理等,。在Scipy中的ndimage子模塊就是致力于進(jìn)行圖像處理的。 Pandas是基于NumPy開發(fā),提供了眾多更高級(jí)的數(shù)據(jù)處理工能,。Pandas中包含許多用于分組,,過濾和組合數(shù)據(jù)的內(nèi)置方法,,以及時(shí)間序列功能。 有機(jī)會(huì)我們?cè)僬f說這兩個(gè)庫,。 4.2 深度學(xué)習(xí)框架 目前深度學(xué)習(xí)框架已經(jīng)呈百家爭鳴之態(tài)勢(shì),,有Caffe,、TensorFlow,、Pytorch、Keras等等,,對(duì)于我們來說,不可能都能掌握,,但市面上主流的框架我們還是必須要熟練的掌握。 |
|