Linux中國

人工智慧教程(六):Keras 和第一個數據集

在本文中我們將繼續學習概率論的知識。

在本系列的 上一篇文章中,我們學習了使用 Anaconda,加強了概率論的知識。在本文中我們將繼續學習概率論的知識,學習使用 seaborn 和 Pandas 進行數據可視化,並進一步介紹 TensorFlow 和 Keras 的使用。

讓我們從增長人工智慧和機器學習的理論知識開始。眾所周知人工智慧、機器學習、數據科學、深度學習等是當今計算機科學的熱門話題。然而,計算機科學還其他熱門的話題,比如 區塊鏈 blockchain 物聯網 Internet of Things (IoT)、 量子計算 quantum computing 等。那麼,人工智慧領域的發展是否會對這些技術產生積極的影響呢?

首先,讓我們討論一下區塊鏈。根據維基百科的定義,「區塊鏈是一種分散式賬本,它由不斷增長的記錄(稱為 區塊 block )組成,這些記錄使用加密技術安全地連接在一起。」乍一看,人工智慧和區塊鏈似乎是兩個高速發展的獨立技術。但令人驚訝的是,事實並非如此。區塊鏈相關的行話是 完整性 integrity ,人工智慧相關的行話是數據。我們將大量數據交給人工智慧程序去處理。雖然這些應用程序產生了驚人的結果,但我們如何信任它們呢?這就提出了對可解釋的人工智慧的需求。它可以提供一定的保證,以便最終用戶可以信任人工智慧程序提供的結果。許多專家認為,區塊鏈技術可以用來提高人工智慧軟體做出的決策的可信度。另一方面, 智能合約 smart contract (區塊鏈技術的一部分)可以從人工智慧的驗證中受益。從本質上講,智能合約和人工智慧通常都是做決策。因此,人工智慧的進步將對區塊鏈技術產生積極影響,反之亦然。

下面讓我們討論一下人工智慧和物聯網之間的影響。早期的物聯網設備通常沒有強大的處理能力或備用電池。這使得需要大量處理能力的機器學習的軟體無法部署在物聯網設備上。當時,大多數物聯網設備中只部署了基於規則的人工智慧軟體。基於規則的人工智慧的優勢在於它很簡單,需要相對較少的處理能力。如今的物聯網設備具備更強大的處理能力,可以運行更強大的機器學習軟體。特斯拉開發的高級駕駛輔助系統 特斯拉自動駕駛儀 Tesla Autopilo 是物聯網與人工智慧融合的典範。人工智慧和物聯網對彼此的發展產生了積極影響。

最後,讓我們討論人工智慧和量子計算是如何相互影響的。儘管量子計算仍處於起步階段,但 量子機器學習 quantum machine learning (QML)是其中非常重要的課題。量子機器學習基於兩個概念:量子數據和量子-經典混合模型。量子數據是由量子計算機產生的數據。 量子神經網路 quantum neural network (QNN)用於模擬量子計算模型。TensorFlow Quantum 是一個用於量子-經典混合機器學習的強大工具。這類工具的存在表明,在不久的將來將會有越來越多的基於量子計算的人工智慧解決方案。

seaborn 入門

seaborn 是一個基於 Matplotlib 的數據可視化 Python 庫。用它能夠繪製美觀且信息豐富的統計圖形。通過 Anaconda Navigator 可以輕鬆安裝 seaborn。我用 ESPNcricinfo 網站上 T20 國際板球賽的擊球記錄,創建了一個名為 T20.csv 的 CSV( 逗號分隔值 comma-separated value )文件,其中包含以下 15 列:球員姓名、職業生涯跨度、比賽場次、局數、未出局次數、總得分、最高得分、平均得分、面對球數、擊球率、百分次數、五十分次數、零分次數、四分次數和六分次數。圖 1 是使用 Pandas 庫讀取這個 CSV 文件的程序代碼。我們已經在前面介紹過 Pandas 了。

圖 1:使用 seaborn 的簡單例子

下面逐行解釋程序代碼的作用。第 1 行和第 2 行導入 Pandas 和 seaborn 包。第 3 行從 JupyterLab 的工作目錄中讀取文件 T20.csv。第 4 行列印元數據和第一行數據。圖 1 顯示了這行數據,它顯示了 T20 國際板球賽中得分最高的 Virat Kohli 的擊球記錄。第 5 行將元數據和 T20.csv 中的前五行數據保存到 Best5.csv 中。在執行該行代碼時會在 JupyterLab 的工作目錄中創建這個文件。第 6 行根據列百分次數按升序對 CSV 文件進行排序,並將前 10 名世紀得分手的詳細信息存儲到 Highest100.csv 中。該文件也將存儲在 JupyterLab 的工作目錄中。最後,第7行代碼提取了第 5 列(總得分)和第 7 列(平均得分)的數據信息,並生成散點圖。圖 2 顯示了程序在執行時生成的散點圖。

圖 2:seaborn 繪製的散點圖

在程序末尾添加如下代碼行並再次運行。

sns.kdeplot(data=df.iloc[:, [5, 7]].head(50), x=』Ave』, y=』Runs』)

圖 3:使用 seaborn 繪製的核密度估計圖

這行代碼調用 kdeplot() 函數繪製第 5 列和第 7 列數據的 核密度估計 Kernel Distribution Estimation (KDE)圖。KDE 圖可以描述連續或非參數數據變數的概率密度函數。這個定義可能無法讓您了解函數 kdeploy() 將要執行的實際操作。圖 3 是在單個圖像上繪製的 KDE 圖和散點圖。從圖中我們可以看到,散點圖繪製的數據點被 KDE 圖分組成簇。seaborn 還提供了許多其他繪圖功能。在圖 1 中程序的第 7 行分別替換為下面的的代碼行(一次一行),並再次執行該程序,你會看到不同風格的繪圖顯示。探索 seaborn 提供的其他繪圖功能,並選擇最適合你需求的功能。

sns.histplot(data=df.iloc[:, [5, 7]].head(50), x=』Ave』, y=』Runs』)
sns.rugplot(data=df.iloc[:, [5, 7]].head(50), x=』Ave』, y=』Runs』)

更多概率論

在本系列之前的一篇文章中,我們看到可以用正態分布來對現實場景進行建模。但正態分布只是眾多重要概率分布中的一種。圖 4 中的程序繪製了三種概率分布。

圖 4:繪製多種概率分布的程序

下面我來解釋這個程序。第 1 行導入 NumPy 的 random 模塊。第 2 行和第 3 行導入用於繪圖的 Matplotlib 和 seaborn。第 5 行生成帶有參數 n(試驗次數)和 p(成功概率)的 二項分布 binomial distribution 數據。

二項分布是一種離散概率分布,它給出了在一系列 n 次獨立實驗中成功的數量。第三個參數 size 決定了輸出的形狀。第 6 行繪製生成的數據的直方圖。由於參數 kde=True,它還會繪製 KDE 圖。第三個參數 color='r' 表示繪圖時使用紅色。第 7 行生成一個泊松分布。泊松分布是一種離散概率分布,它給出了二項分布的極限。參數 lam 表示在固定時間間隔內發生預期事件的次數。這裡的參數 size 也決定了輸出的形狀。第 8 行將生成的數據繪製為綠色的直方圖。第 9 行生成大小為 1000 的指數分布。第 10 行將生成的數據繪製為藍色的直方圖。最後,第 11 繪製三個概率分布的所有圖像(見圖 5)。NumPy 的 random 模塊提供了大量的其他概率分布,如 Dirichlet 分布、Gamma 分布、幾何分布、拉普拉斯分布等。學習和熟悉它們將是非常值得的。

圖 5:概率分布的圖像

現在,讓我們學習線性回歸。使用線性回歸分析可以根據一個變數來預測一個變數的值。線性回歸的一個重要應用是數據擬合。線性回歸非常重要,因為它很簡單。機器學習中的監督學習範式實際上就是回歸建模。因此,線性回歸可以被認為是一種重要的機器學習策略。這種學習範式通常被統計學家稱為統計學習。線性回歸是機器學習中的重要操作。NumPy 和 SciPy 都提供了線性回歸的函數。下面我們展示使用 NumPy 和 SciPy 進行線性回歸的示例。

圖 6:使用 NumPy 進行線性回歸

圖 6 是使用 NumPy 進行線性回歸的程序。第 1 行和第 2 行導入 NumPy 和 Matplotlib。第 4 行和第 5 行初始化變數 ab。第 6 行使用函數 linspace() 在 0 和 1 之間等間隔地生成 100 個數字。第 7 行使用變數 ab 和數組 x 生成數組 y 中的值。函數 randn() 返回標準正態分布的數據。第 8 行將數組 xy 中的值繪製成散點圖(見圖 7),圖中的 100 個數據點用紅色標記。第 9 行使用函數 polyfit() 執行稱為 最小二乘多項式擬合 least squares polynomial fit 的線性回歸技術。函數 polyfit() 的輸入參數包括數組 xy,以及第三個表示擬合多項式的階數的參數,在本例中為 1,表示擬合一條直線。該函數的返回值是多項式的係數,代碼中將其存儲在數組 p 中。第 10 行使用函數 polyval() 對多項式求值,並將這些值存儲在數組y_l中。第 11 行用藍色繪製擬合得到的直線(見圖 7)。最後,第 12 行顯示所有的圖像。可以用這條回歸直線預測可能的 (x, y) 數據對。

圖 7:線性回歸散點圖 1

圖 8 是使用 SciPy 進行線性回歸的程序代碼。

圖 8:使用 SciPy 進行線性回歸

下面我解釋一下這個程序的工作原理。第 1 行和第 2 行導入庫 NumPy 和 Matplotlib。第 3 行從庫 SciPy 導入 stats 模塊。第 4 到 8 行與前面的程序執行類似的任務。第 9 行使用 SciPy 的 stats 模塊的 linregression() 函數計算兩組測量值的線性最小二乘回歸——在本例中是數組 xy 中的值。該函數返回值中的 mc 分別表示回歸直線的 斜率 slope 截距 intercept 。第 10 行使用斜率和截距的值生成回歸線。第 11 行用綠色繪製回歸線。最後,第 12 行顯示所有的圖像(見圖 9),其中數據點以黃色顯示,回歸線以綠色顯示。

圖 9:線性回歸散點圖 2

在本系列的前面幾篇文章中,我們學習了概率和統計學的一些概念。儘管還不夠全面的,但我認為這已經打下了一個良好的基礎,現在是時候將注意力轉移到其他同樣重要的問題上了。

Keras 簡介

Keras 一般與 TensorFlow 一起使用。因此,我們先從使用 TensorFlow 開始。圖 10 所示的程序雖然只包含四行代碼,但確實構建了在本系列中的第一個神經網路。下面我來介紹它的工作原理。第 1 行導入庫 TensorFlow。第 2 行創建了一個名為 x 的張量。第 3 行和第 4 行分別在張量 x 上應用 ReLU( 整流線性單元 Rectified Linear Unit )和 Leaky ReLU 激活函數。在神經網路中,激活函數定義了節點的輸出由輸入計算出的規則。ReLU 激活函數是定義為 Relu(x) = max(0,x)。第 3 行代碼的輸出如圖 10 所示。可以觀察到,在應用 ReLU 激活函數後,張量 x 中的負值被替換為零。Leaky ReLU 是 ReLU 激活函數的改進版本。從圖 10 中的第 4 行代碼的輸出可以看出 Leaky ReLU 激活函數保留了全量的正值和 20% 的負值。在後面我們將會繼續討論 Keras,同時學習更多神經網路和激活函數的知識。

圖 10:使用 TensorFlow 實現的神經網路

下面我們開始使用 Keras。Keras 的安裝也可以通過 Anaconda Navigator 輕鬆完成。圖 11 所示的程序導入了我們的第一個數據集並顯示了其中的一個數據樣本。在下一篇文章中,我們將使用這個數據集來訓練和測試模型,從而開啟我們開發人工智慧和機器學習程序的下一個階段。

圖 11:第一個數據集

下面介紹這個程序的工作原理。第 1 行導入 Keras。第 2 行從 Keras 導入手寫數字數據集 MNIST。它包含 6 萬個訓練樣本和 1 萬個測試樣本。第 3 行導入 Matplotlib。第 5 行載入 MNIST 數據集。第 6 到 9 行列印訓練集和測試集的維數和維度。圖 12 顯示了這些代碼行的輸出。可以看出,訓練集和測試集都是三維的,所有數據樣本的解析度都是 28 × 28。第 10 行載入了第 1234 個訓練圖像。第 11 行和第 12 行顯示這個圖像。從圖 12 可以看到它是數字 3 的手寫圖像。

圖 12:數據樣例

本文中我們開始涉及到神經網路,並通過 Keras 接觸到了第一個數據集。在下一篇文章中,我們將繼續講解神經網路和 Keras,並通過使用該數據集訓練自己的模型。我們還會遇到 scikit-learn, 它是另一個強大的機器學習 Python 庫 。

(題圖:DA/2f8f2e0c-c9a7-4a55-8a03-3b5105721013)

via: https://www.opensourceforu.com/2023/01/ai-introduction-to-keras-and-our-first-data-set/

作者:Deepu Benson 選題:lujun9972 譯者:toknow-gh 校對:wxy

本文由 LCTT 原創編譯,Linux中國 榮譽推出


本文轉載來自 Linux 中國: https://github.com/Linux-CN/archive

對這篇文章感覺如何?

太棒了
0
不錯
0
愛死了
0
不太好
0
感覺很糟
0
雨落清風。心向陽

    You may also like

    Leave a reply

    您的郵箱地址不會被公開。 必填項已用 * 標註

    此站點使用Akismet來減少垃圾評論。了解我們如何處理您的評論數據

    More in:Linux中國