農林漁牧網

您現在的位置是:首頁 > 林業

從零開始,用PyTorch學會線性迴歸、邏輯迴歸及影象分類

2021-12-24由 新智元 發表于 林業

迴歸模型中的mse是什麼

從零開始,用PyTorch學會線性迴歸、邏輯迴歸及影象分類

【新智元導讀】

本文透過詳實的程式碼,從如何安裝PyTorch開始,一步一步帶領讀者熟悉PyTorch和Jupyter Notebook,最終使用PyTorch實現線性迴歸、邏輯迴歸以及影象分類,非常適合0基礎初學者。

今天為大家帶來一份非常詳盡的PyTorch教程。本文共分3大部分:

安裝PyTorch和Jupyter Notebook

用PyTorch實現線性迴歸

使用邏輯迴歸實現影象分類

文章超長,秉承用程式碼搞定一切的原則,內含大量程式碼,建議收藏,並分享給你喜歡的人。同時如果有什麼疑問,也歡迎留言告知我們。

Tips:為了方便演示,文中程式碼和返回結果是用截圖形式給出。本系列中的所有程式碼都以Jupyter Notebook形式提供,託管在Jovian。託管連結:

https://jvn。io/aakashns/e5cfe043873f4f3c9287507016747ae5

安裝PyTorch和Jupyter Notebook

我們將使用Anaconda的Python發行版來安裝庫和管理虛擬環境,對於互動式編碼和實驗,我們將使用Jupyter Notebook。

首先按照官方教程安裝Anaconda,接下來安裝jovian:

$ pip install jovian ——upgrade

下載針對本教程的notebook:

$ jovian clone e5cfe043873f4f3c9287507016747ae5

此時會建立一個01-pytorch-basics的目錄,包含01-pytorch-basics。ipynb和environment。yml檔案。

$ cd 01-pytorch-basics$ conda env update

目的是不破壞本地Python環境,使用一個虛擬環境。接下來啟用

$ conda activate 01-pytorch-basics

啟動Jupyter

$ jupyter notebook

開啟瀏覽器,輸入http://localhost:8888 。然後點有01-pytorch-basics。ipynb字樣的就開始了。

從零開始,用PyTorch學會線性迴歸、邏輯迴歸及影象分類

本質上PyTorch是處理Tensor的庫。所以我們先來簡單看下tensor型別:

從零開始,用PyTorch學會線性迴歸、邏輯迴歸及影象分類

因為很多時候我們需要在NumPy的陣列和PyTorch陣列之間進行轉換。

從零開始,用PyTorch學會線性迴歸、邏輯迴歸及影象分類

從零開始,用PyTorch學會線性迴歸、邏輯迴歸及影象分類

Commit並上傳:

從零開始,用PyTorch學會線性迴歸、邏輯迴歸及影象分類

上傳的專案還可以用 jovian clone 下載回來。操作類似git,這裡不再累述。

簡單的開場之後,我們直接進入硬核階段。

用PyTorch實現線性迴歸

對於線性迴歸,相信大家都很熟悉了,各種機器學習的書第一個要講的內容必定有線性迴歸。

這一部分,我們首先透過最原始的手動操作,來理解整個線性迴歸的原理和操作流程。

接著我們會再介紹使用PyTorch內建的函式,透過自動化的方式實現線性迴歸。

線性迴歸模型中,每個目標變數都被估算為輸入變數的加權和及偏差。

先看一張表:

從零開始,用PyTorch學會線性迴歸、邏輯迴歸及影象分類

表格第一列是地區,第二類是溫度單位華氏度,第二列是降水量單位毫米,第四列是溼度,第五列是蘋果產量,第六列是橙子產量。

下面這段程式碼的目的是為了預估出蘋果和橙子在不同地區、不同環境中的產量。

yield_apple = w11 * temp + w12 * rainfall + w13 * humidity + b1yield_orange = w21 * temp + w22 * rainfall + w23 * humidity + b2

分別個溫度temp、降水量rainfall、溼度humidity加上不同的權重(w11,w12,w13),最後再加一個b1或者b2的偏差。

透過使用被稱為梯度下降的最佳化技術,少量多次調整權重以獲得更精準的預測結果。

訓練資料

在Jupyter Notebook裡匯入NumPy和PyTorch

從零開始,用PyTorch學會線性迴歸、邏輯迴歸及影象分類

訓練資料我們inputs和targets兩個矩陣表示,每個觀察一行,每個變數一列。

從零開始,用PyTorch學會線性迴歸、邏輯迴歸及影象分類

接下來轉換成PyTorch的tensors:

從零開始,用PyTorch學會線性迴歸、邏輯迴歸及影象分類

變數和偏差也用矩陣表示,從隨機數值開始

從零開始,用PyTorch學會線性迴歸、邏輯迴歸及影象分類

模型可以表示為

從零開始,用PyTorch學會線性迴歸、邏輯迴歸及影象分類

我們這樣定義模型:

從零開始,用PyTorch學會線性迴歸、邏輯迴歸及影象分類

生成預測

從零開始,用PyTorch學會線性迴歸、邏輯迴歸及影象分類

對比一下原始資料

從零開始,用PyTorch學會線性迴歸、邏輯迴歸及影象分類

從零開始,用PyTorch學會線性迴歸、邏輯迴歸及影象分類

發現差距很大,因為一開始我們用的是隨機數值,所以資料合不上很正常。

接下來我們需要透過損失函式,來評估我們的模型和實際差距多大。分為3個步驟

計算兩個矩陣(preds和targets)之間的差異

平方差矩陣的所有元素以消除負值

計算結果矩陣中元素的平均值

最終結果為均方誤差MSE

從零開始,用PyTorch學會線性迴歸、邏輯迴歸及影象分類

從零開始,用PyTorch學會線性迴歸、邏輯迴歸及影象分類

計算梯度:

從零開始,用PyTorch學會線性迴歸、邏輯迴歸及影象分類

使用PyTorch可以自動計算損耗的梯度或導數w。r。t。 權重和偏差,因為requires_grad被設定為True。

計算權重梯度:

從零開始,用PyTorch學會線性迴歸、邏輯迴歸及影象分類

重置梯度:

從零開始,用PyTorch學會線性迴歸、邏輯迴歸及影象分類

使用梯度下降調整重量和偏差

我們將使用梯度下降最佳化演算法減少損失並改進我們的模型,該演算法具有以下步驟:

生成預測

計算損失

計算梯度w。r。t權重和偏差

透過減去與梯度成比例的小量來調整權重

將漸變重置為零

讓我們逐步實現上述步驟

接下來分別用程式碼表示:

從零開始,用PyTorch學會線性迴歸、邏輯迴歸及影象分類

從零開始,用PyTorch學會線性迴歸、邏輯迴歸及影象分類

從零開始,用PyTorch學會線性迴歸、邏輯迴歸及影象分類

最終效果:

從零開始,用PyTorch學會線性迴歸、邏輯迴歸及影象分類

再來看看損失:

從零開始,用PyTorch學會線性迴歸、邏輯迴歸及影象分類

說明有進步。那麼我們就重複上面的過程,把損失減到最小。每詞重複,我們成為1個epoch。我們先來100個epoch:

從零開始,用PyTorch學會線性迴歸、邏輯迴歸及影象分類

再看看效果:

從零開始,用PyTorch學會線性迴歸、邏輯迴歸及影象分類

損失很低了。print一下結果:

從零開始,用PyTorch學會線性迴歸、邏輯迴歸及影象分類

用PyTorch內建函式實現線性迴歸

瞭解了上述原理後,我們就可以用PyTorch內建的函式,簡化我們的工作量。

從零開始,用PyTorch學會線性迴歸、邏輯迴歸及影象分類

從零開始,用PyTorch學會線性迴歸、邏輯迴歸及影象分類

接下來我們建立一個TensorDataset和一個DataLoader:

從零開始,用PyTorch學會線性迴歸、邏輯迴歸及影象分類

TensorDataset允許我們使用陣列索引表示法(上面程式碼中的[0:3])訪問訓練資料的一小部分。 它返回一個元組(或對),其中第一個元素包含所選行的輸入變數,第二個元素包含目標。

從零開始,用PyTorch學會線性迴歸、邏輯迴歸及影象分類

用for-in迴圈就可以了

從零開始,用PyTorch學會線性迴歸、邏輯迴歸及影象分類

用nn.linear自動初始化

剛開始我們是手動隨機輸入的初識權重。現在我們可以使用nn。linear自動完成初始化工作。

從零開始,用PyTorch學會線性迴歸、邏輯迴歸及影象分類

對於我們的線性迴歸模型,我們有一個權重矩陣和一個偏差矩陣。

從零開始,用PyTorch學會線性迴歸、邏輯迴歸及影象分類

接下來我們重複上面的流程,首先透過損失函式計算出差距,接著不斷的降低損失。

從零開始,用PyTorch學會線性迴歸、邏輯迴歸及影象分類

以及用內建損失函式mse_loss:

從零開始,用PyTorch學會線性迴歸、邏輯迴歸及影象分類

從零開始,用PyTorch學會線性迴歸、邏輯迴歸及影象分類

從零開始,用PyTorch學會線性迴歸、邏輯迴歸及影象分類

最佳化的時候,我們可以使用最佳化器optim。SGD,不用手動操作模型的權重和偏差。

從零開始,用PyTorch學會線性迴歸、邏輯迴歸及影象分類

SGD代表隨機梯度下降。 它被稱為隨機因為樣本是分批選擇的(通常是隨機抽樣)而不是單個組。

訓練模型,思路上面已經講過了,直接看程式碼

從零開始,用PyTorch學會線性迴歸、邏輯迴歸及影象分類

上面要注意的一些事項:

我們使用前面定義的資料載入器來獲取每次迭代的batch資料

我們不是手動更新引數(權重和偏差),而是使用opt。step來執行更新,而使用opt。zero_grad將梯度重置為零

我們還添加了一個日誌語句,用於列印每10個時期最後一批資料的丟失,以跟蹤訓練的進度。 loss。item返回儲存在損失tensor中的實際值

來100個epoch

從零開始,用PyTorch學會線性迴歸、邏輯迴歸及影象分類

結果:

從零開始,用PyTorch學會線性迴歸、邏輯迴歸及影象分類

對比一下:

從零開始,用PyTorch學會線性迴歸、邏輯迴歸及影象分類

Commit並上傳

現在可以將你的程式碼上傳到我們的Notebook了。看了這麼多程式碼估計你可能已經忘記怎麼Commit了。

從零開始,用PyTorch學會線性迴歸、邏輯迴歸及影象分類

【2019新智元 AI 技術峰會倒計時16天】

2019年的3月27日,新智元再匯AI之力,在北京泰富酒店舉辦AI開年盛典——2019新智元AI技術峰會。峰會以“

智慧雲•芯世界

“為主題,聚焦智慧雲和AI晶片的發展,重塑未來AI世界格局。

同時,新智元將在峰會現場權威釋出若干

AI白皮書

,聚焦產業鏈的創新活躍,評述華人AI學者的影響力,助力中國在世界級的AI競爭中實現超越。

購票二維碼

活動行購票連結:2019新智元AI技術峰會——智慧雲•芯世界_精彩城市生活,盡在活動行!!