偷偷摘套内射激情视频,久久精品99国产国产精,中文字幕无线乱码人妻,中文在线中文a,性爽19p

適合初學(xué)者的一些常用的機(jī)器學(xué)習(xí)庫

人工智能
本文主要分享一些常用的人工智能相關(guān)的內(nèi)容,包括:模型訓(xùn)練、數(shù)據(jù)處理、參數(shù)優(yōu)化、實驗跟蹤、特定領(lǐng)域庫以及一些工具。

在人工智能項目開發(fā)的過程中,我們通常會使用到很多機(jī)器學(xué)習(xí)、深度學(xué)習(xí)框架、各種數(shù)據(jù)處理庫和一些工具。好用的庫很多,但對于初學(xué)者來說先聚焦在一些比較常用的框架、庫或者工具,有利于提高效率。下面主要分享一些常用的人工智能相關(guān)的內(nèi)容,包括:模型訓(xùn)練、數(shù)據(jù)處理、參數(shù)優(yōu)化、實驗跟蹤、特定領(lǐng)域庫以及一些工具。

一、模型訓(xùn)練

1.PyTorch

PyTorch是Facebook開發(fā)并于2017年開源的深度學(xué)習(xí)框架,這個框架基于開源Torch包,目前是業(yè)界使用最廣泛的深度學(xué)習(xí)框架。

目前PyTorch生態(tài)系統(tǒng)已經(jīng)比較完善,并具有各種專用庫,例如:

torchvision(https://pytorch.org/vision/stable/index.html)或torchaudio(https://pytorch.org/audio/stable/index.html)。因此,PyTorch支持用于幾乎所有類型的機(jī)器學(xué)習(xí)。

PyTorch的數(shù)據(jù)結(jié)構(gòu)是Tensor對象,用于保存模型訓(xùn)練和推理過程使用到的多維數(shù)據(jù)。Tensor的概念與NumPy ndarray相似。PyTorch還支持CUDA功能的NVIDIA GPU,ROCm,Metal API和TPU等來提高訓(xùn)練效率。

PyTorch庫最重要的部分是nn modules,它包含了層和工具,可以輕松地構(gòu)建復(fù)雜的模型。

下面是一個PyTorch實現(xiàn)簡單神經(jīng)網(wǎng)絡(luò)示例。

class NeuralNetwork(nn.Module):
    def __init__(self):
        super().__init__()
        self.flatten = nn.Flatten()
        self.linear_relu_stack = nn.Sequential(
            nn.Linear(28*28, 512),
            nn.ReLU(),
            nn.Linear(512, 512),
            nn.ReLU(),
            nn.Linear(512, 10),
        )
    def forward(self, x):
        x = self.flatten(x)
        logits = self.linear_relu_stack(x)
        return logits

目前,PyTorch 已經(jīng)發(fā)布了2.0,相比過去,這個版本更快、更接近Python、更靈活。

2.PyTorch Lightning

PyTorch Lightning是PyTorch框架的一個“擴(kuò)展”,旨在減少編寫模型所需的代碼量。

Lightning基于hook(鉤子)的概念,這種方法允許我們在特定時間執(zhí)行回調(diào)函數(shù),比如訓(xùn)練結(jié)束后執(zhí)行一些收尾的工作或者輸出。

Trainers Lighting將許多必須在PyTorch中處理的功能自動化實現(xiàn)了,例如:循環(huán)、硬件調(diào)用或零梯度。

下面是PyTorch(左)與PyTorch Lightning(右)的代碼片段對比。

3.TensorFlow

TensorFlow是由Google Brain團(tuán)隊開發(fā)并于2015年發(fā)布的深度學(xué)習(xí)庫,TensorFlow2.0版本于2019年發(fā)布。它支持Java、C++、Python以及JavaScript等多種開發(fā)語言。

TensorFlow與PyTorch類似,也是一個非常流行的框架。并且也有一個相當(dāng)豐富的生態(tài),包括工具和庫,例如:優(yōu)化工具包TensorBoard、編譯器等。

tf.nn是TensorFlow的核心模塊,它提供了訓(xùn)練模型所需的構(gòu)建塊。Tensorflow擁有自己的用于保存用于深度學(xué)習(xí)的向量數(shù)據(jù)的Tensor對象。另外,它也支持所有常見的加速器,如CUDA或RoCm,Metal API和TPU。

class NeuralNetwork(models.Model):
    def __init__(self):
        super().__init__()
        self.flatten = layers.Flatten()
        self.linear_relu_stack = models.Sequential([
            layers.Dense(512, activation='relu'),
            layers.Dense(512, activation='relu'),
            layers.Dense(10)
        ])
    def call(self, x):
        x = self.flatten(x)
        logits = self.linear_relu_stack(x)
        return logits

4.Keras

Keras是一個基于TensorFlow框架,但卻提供了比TensorFlow更高級的接口的機(jī)器學(xué)習(xí)框架,有點像PyTorch Lightning 。Keras由Fran?ois Chollet開發(fā)并于2015年發(fā)布,它只支持Python開發(fā)語言。Keras也有自己的一整套Python庫和特定領(lǐng)域庫,例如:KerasCV用于CV領(lǐng)域、KerasNLP用于NLP領(lǐng)域。

在Keras2.4版本之前,Keras支持的后端不僅僅是TensorFlow,但在之后的版本只支持TensorFlow。由于Keras只是TensorFlow上層接口,它支持的加速器也和TensorFlow類似。下面是Keras代碼例子。

class NeuralNetwork(models.Model):
    def __init__(self):
        super().__init__()
        self.flatten = layers.Flatten()
        self.linear_relu_stack = models.Sequential([
            layers.Dense(512, activation='relu'),
            layers.Dense(512, activation='relu'),
            layers.Dense(10)
        ])
    def call(self, x):
        x = self.flatten(x)
        logits = self.linear_relu_stack(x)
        return logits

Keras、TensorFlow、PyTorch、PyTorch Lightning 之間的區(qū)別

深度學(xué)習(xí)框架很多,所以給深度學(xué)習(xí)項目選擇正確的框架可能會有點糾結(jié)。PyTorch、PyTorch Lightning 、TensorFlow、Keras 都是目前比較流行的框架,

其實,這四個框架的基礎(chǔ)只有PyTorch和TensorFlow兩個方向。這些框架基本上能夠滿足數(shù)據(jù)科學(xué)家和初學(xué)者的需求,但由于每個項目的要求都不一樣,每個開發(fā)人員也有不一樣使用習(xí)慣,大家都有自己在專業(yè)領(lǐng)域的優(yōu)先考慮方向。

PyTorch 和 TensorFlow這兩個框架之間的主要區(qū)別在于它們對模型的定義方式和執(zhí)行過程不同。

(1) PyTorch

PyTorch使用動態(tài)計算圖,這意味著圖是在執(zhí)行過程中動態(tài)定義的。這使得代碼調(diào)試更加靈活性和直觀,優(yōu)點是,開發(fā)人員可以在運(yùn)行時修改圖并輕松檢查中間過程的輸出,缺點是,這種方法可能比靜態(tài)圖效率低,特別是對于復(fù)雜模型。然而,PyTorch 2.0開始通過torch.compile和FX圖來解決這些問題。

(2) TensorFlow

TensorFlow使用靜態(tài)計算圖,這些圖在執(zhí)行之前被編譯。這使得執(zhí)行效率更高,因為這種方式可以針對目標(biāo)硬件進(jìn)行優(yōu)化圖或者并行化圖。但是,它的調(diào)試更加困難,因為不容易觀察中間結(jié)果。

根據(jù)2023年HuggingFace的模型數(shù)量統(tǒng)計 pytorch已經(jīng)大大超過tensorflow。

二、數(shù)據(jù)處理庫

1.pandas

pandas可以說是最著名的數(shù)據(jù)處理 Python庫。最初于2008年發(fā)布,在2012年發(fā)布了1.0版本。它提供了過濾、聚合、數(shù)據(jù)轉(zhuǎn)換以及數(shù)據(jù)集合并等功能。這個庫的核心是DataFrame對象,這個對象是任何類型數(shù)據(jù)的多維表。有些功能是用純C編寫的,所以該庫性能非常好。除了性能之外,pandas還提供了數(shù)據(jù)清洗和預(yù)處理、刪除重復(fù)項、填充空值或nan值、時間序列分析、重采樣、加窗、時移等方面的功能。此外,它還可以執(zhí)行各種輸入/輸出操作:例如:讀寫.csv或.xlsx文件、數(shù)據(jù)庫查詢、GCP BigQuery數(shù)據(jù)加載

2.NumPy

NumPy也是一個開源的數(shù)據(jù)處理庫,使用BSD許可證。NumPy最重要的功能是ndarray,ndarray是一個表示多維數(shù)字?jǐn)?shù)組的結(jié)構(gòu)。除了ndarray,NumPy還提供了許多用于處理數(shù)據(jù)的高級數(shù)學(xué)函數(shù)和數(shù)學(xué)運(yùn)算。NumPy還非常注重性能,包含許多預(yù)實現(xiàn)的算法,以減少NumPy函數(shù)的執(zhí)行時間。

3.SciPy

SciPy是一個專注于科學(xué)計算的庫。ndarray是SciPy的基本數(shù)據(jù)結(jié)構(gòu)。除此之外,該庫還添加了優(yōu)化、線性代數(shù)、信號處理、插值和備用矩陣等功能。它比NumPy更高級,因此可以提供更復(fù)雜的功能。

三、超參數(shù)優(yōu)化

1.Ray Tune

Ray Tune是Ray工具集的一部分,Ray工具集是用于構(gòu)建機(jī)器學(xué)習(xí)和Python的分布式應(yīng)用程序的庫。ML庫中的Tune部分,通過提供多種搜索算法,以優(yōu)化超啟動功能。例如網(wǎng)格搜索、超頻帶或貝葉斯優(yōu)化。

Ray Tune的主要概念包括:

  • Trainables :用于向我們要優(yōu)化的模型傳遞的Tune對象參數(shù)。
  • Search space:包含我們要在當(dāng)前試驗中檢查的所有超參數(shù)值
  • Tuner :一個執(zhí)行調(diào)用tuner.fit()的返回對象。啟動搜索最佳超參數(shù)集的過程。它至少需要傳遞一個可訓(xùn)練對象和搜索空間
  • Trial :每個Trial表示來自搜索空間的精確參數(shù)集,Trial由Ray Tune Tuner生成。因為它代表運(yùn)行調(diào)諧器的輸出,所以Trial包含用于特定試驗的配置、Trial ID 等信息。
  • Search algorithms :用于Tuner.fit執(zhí)行的一種算法。默認(rèn)情況下Ray Tune將使用Radom Search作為默認(rèn)值。
  • Schedulers:一組負(fù)責(zé)管理運(yùn)行的對象。他們可以暫停、停止和在執(zhí)行過程中測試。可以提高效率、減少運(yùn)行時間。默認(rèn)情況下Tune選擇FIFO作為默認(rèn)值,像經(jīng)典隊列一樣逐個執(zhí)行。
  • Run analyses :以ResultGrid對象的形式包裝Tuner.fit執(zhí)行結(jié)果的對象。它包含與運(yùn)行相關(guān)的所有數(shù)據(jù),例如所有試驗中的最佳結(jié)果或來自所有試驗的數(shù)據(jù)。

2.BoTorch

BoTorch是一個基于PyTorch的庫,是PyTorch生態(tài)系統(tǒng)的一部分。它專注于貝葉斯算法的超參數(shù)優(yōu)化。作為需要與PyTorch配合使用,還處于測試版和密集的開發(fā)中,因此可能會出現(xiàn)一些意想不到的問題。

四、跟蹤監(jiān)測工具

1.Neptune.ai

Neptune.ai是一個網(wǎng)頁工具,既可以作為跟蹤監(jiān)測也可以作為模型注冊表。該工具基于云平臺,采用SaaS服務(wù)模式。

Neptune.ai提供了一個儀表板,可以觀察模型訓(xùn)練的結(jié)果,還可以用于存儲運(yùn)行參數(shù)以及運(yùn)行參數(shù)的版本化。

Neptune.ai還可以控制模型的版本。該工具與庫無關(guān),可以托管使用任何庫創(chuàng)建的模型。為了支持系統(tǒng)集成,Neptune還公開了一個REST API,并配套完善的API文檔,用戶可以通過pip安裝客戶端庫。

可惜的是,該工具需要付費(fèi)的。但是,如果只是個人項目或者研究機(jī)構(gòu),也可以申請免費(fèi)使用。

2.Weights & Biases

Weights & Biases也稱為WandB或W&B,這是一個基于Web的工具,它提供了可用作跟蹤監(jiān)測工具和模型注冊表的所有需要的功能,與neptune.ai功能類似。然而相比neptune.ai,Weights & Biases的可視化效果更佳。此外,WandB似乎更專注于為個人項目和研究人員提供服務(wù),并不太強(qiáng)調(diào)協(xié)作。

Weights Biases還公開了一個REST的API來支持系統(tǒng)集成。與Neptune.ai不同的是,它的客戶端庫是Java包而不是Python庫,這就要求機(jī)器學(xué)習(xí)模型是java開發(fā)的。

3.TensorBoard

TensorBoard是TensorFlow生態(tài)的可視化工具包。用于算法運(yùn)行監(jiān)測和指標(biāo)可視化。但它也可以與Keras或者PyTorch一起使用。

此外,它是免費(fèi)的,免費(fèi)的,免費(fèi)的,重要的事說三遍。然而,TensorBoard并沒有模型注冊表功能。由于它是TensorFlow生態(tài)的一個工具,因此它與Keras或TensorFlow的集成比其他工具都更加順暢。

五、特定領(lǐng)域庫

1.OpenCV

OpenCV的全稱是Open Source Computer Vision Library,是一個跨平臺的計算機(jī)視覺庫。OpenCV是由英特爾公司發(fā)起并參與開發(fā),以BSD許可證授權(quán)發(fā)行,可以在商業(yè)和研究領(lǐng)域中免費(fèi)使用。OpenCV可用于開發(fā)實時的圖像處理、計算機(jī)視覺以及模式識別程序。

opencv主要用于解決以下幾個領(lǐng)域的問題:

  • 增強(qiáng)現(xiàn)實
  • 人臉識別
  • 手勢識別
  • 人機(jī)交互
  • 動作識別
  • 運(yùn)動跟蹤
  • 物體識別
  • 圖像分割
  • 機(jī)器人

2.GeoPandas

GeoPandas是一個建立在pandas之上的開源項目,是用來處理地理空間數(shù)據(jù)的python第三方庫。支持以GeJSON,shapefile格式讀寫數(shù)據(jù),或從PostGIS系統(tǒng)讀取數(shù)據(jù)。除了依賴于pandas,它還依賴于PyGEOS、GeoPy或Shapely等空間數(shù)據(jù)庫。

六、其他工具

1.Matplotlib

顧名思義,Matplotlib是一個用于創(chuàng)建各種圖表的庫。它支持創(chuàng)建各種復(fù)雜的圖表:直線圖、直方圖、3D形狀或極坐標(biāo)圖等等。它還允許自定義圖表的顏色或標(biāo)簽之類的內(nèi)容。

2.Seaborn

Seaborn提供的功能與Matplotlib提供的功能類似。然而,Seaborn的API更加高級,代碼量更少、調(diào)色板更柔和、外觀設(shè)計更好看。此外,Seaborn還很容易與pandas集成。

以下分別是使用Matplotlib和Seaborn創(chuàng)建的熱圖的代碼。

import matplotlib.pyplot as plt
import numpy as np
import seaborn as sns
data = np.random.rand(5, 5)
fig, ax = plt.subplots()
heatmap = ax.pcolor(data, cmap=plt.cm.Blues)
ax.set_xticks(np.arange(data.shape[0])+0.5, minor=False)
ax.set_yticks(np.arange(data.shape[1])+0.5, minor=False)
ax.set_xticklabels(np.arange(1, data.shape[0]+1), minor=False)
ax.set_yticklabels(np.arange(1, data.shape[1]+1), minor=False)
plt.title("Heatmap")
plt.xlabel("X axis")
plt.ylabel("Y axis")
cbar = plt.colorbar(heatmap)
plt.show()

sns.heatmap(data, cmap="Blues", annot=True)
# Set plot title and axis labels
plt.title("Heatmap")
plt.xlabel("X axis")
plt.ylabel("Y axis")
# Show plot
plt.show()

3.Hydra

為了項目的靈活性,很多內(nèi)容都需要形成可配置參數(shù)。像Answer工具可以將參數(shù)值存放到.env文件中。但是,如果如果參數(shù)比較復(fù)雜,項目可配置參數(shù)實現(xiàn)起來就沒有那么簡單了。Hydra是一個開源工具,用于管理和運(yùn)行基于Python的應(yīng)用程序的配置參數(shù)。它基于OmegaConf庫,能夠創(chuàng)建分層配置,并通過配置文件和命令行覆蓋它,允許更清晰地分離配置文件。

4.coolname

coolname是一個開源標(biāo)示符生成庫。如果你不喜歡UUID,或者只是想讓ID更具可讀性,那么coolname就是一個很好的工具。它能夠生成長度從2到4個單詞不等的唯一標(biāo)識符用于生成一個惟一的標(biāo)識符。不同的長度有不同的組合的數(shù)量:4字長度標(biāo)識符有1010個組合;3字長度標(biāo)識符有108種組合;2字長度標(biāo)識符有105種組合顯然數(shù)量明顯低于UUID,因此沖突的概率也更高。所以只能用于特定的場景。

5.tqdm

tqdm庫為應(yīng)用程序的執(zhí)行過程提供了一個進(jìn)度條功能,這個庫只需要Python即可獨(dú)立執(zhí)行。Tqdm還能夠預(yù)測任務(wù)的剩余時間,并且沒有明顯的性能開銷??梢詾閳?zhí)行重要任務(wù)的過程,實現(xiàn)進(jìn)度反饋和剩余時間預(yù)測。

6.Jupyter Notebook (+JupyterLab)

Jupyter Notebook(此前被稱為 IPython notebook)是一個交互式筆記本,支持運(yùn)行 40 多種編程語言。Jupyter Notebook 的本質(zhì)是一個 Web 應(yīng)用程序,便于創(chuàng)建和共享程序文檔,支持實時代碼,數(shù)學(xué)方程,可視化和 markdown。 

以上這些內(nèi)容都是我們在深度學(xué)習(xí)入門過程中經(jīng)常會用到的基本工具。

責(zé)任編輯:趙寧寧 來源: andflow
相關(guān)推薦

2016-11-11 20:33:53

Hadoop大數(shù)據(jù)云計算

2011-08-16 13:33:13

MySQL數(shù)據(jù)庫初學(xué)者

2021-12-09 05:58:51

編程語言開發(fā)代碼

2024-12-25 08:00:00

機(jī)器學(xué)習(xí)ML管道人工智能

2017-05-25 11:14:21

機(jī)器學(xué)習(xí)算法神經(jīng)網(wǎng)絡(luò)

2017-05-25 13:37:46

機(jī)器學(xué)習(xí)算法神經(jīng)網(wǎng)絡(luò)

2022-01-21 09:05:34

機(jī)器學(xué)習(xí)工具安全

2011-08-16 15:04:41

MySQL數(shù)據(jù)庫管理員常用操作

2015-07-20 13:56:59

SDN

2009-09-28 09:45:00

CCNA學(xué)習(xí)經(jīng)驗CCNA

2010-08-11 14:47:23

DB2數(shù)據(jù)庫

2011-08-16 13:59:42

MySQL初學(xué)者表的操作

2011-08-16 14:14:22

MySQL數(shù)據(jù)庫初學(xué)者

2011-08-16 14:43:57

MySQL查詢初學(xué)者

2011-08-16 15:19:21

2020-05-10 16:59:56

Python裝飾器開發(fā)

2011-08-16 15:35:50

MySQLSELECT語句FROM子句

2011-08-01 11:49:05

Objective-C

2011-08-16 16:10:12

MySQLORDER BY子句GROUP BY子句
點贊
收藏

51CTO技術(shù)棧公眾號