準備數據以供分析

在本 教學課程的上一個階段中,我們在您的計算機上安裝 PyTorch。 現在,我們將使用它來設定程式碼與我們將用來建立模型的數據。

在 Visual Studio 中開啟新的專案。

  1. 開啟 Visual Studio,然後選擇 create a new project。

建立新的Visual Studio專案

  1. 在搜尋列中,輸入 Python 並選取 Python Application 作為專案範本。

建立新的 Python 應用程式

  1. 在組態視窗中:
  • 命名專案。 在這裡,我們稱之為 DataClassifier。
  • 選擇專案的位置。
  • 如果您使用 VS2019,請確定 Create directory for solution 已核取 。
  • 如果您使用 VS2017,請確定 Place solution and project in the same directory 未核取。

設定新的 Python 應用程式

按 create 以建立您的專案。

建立 Python 解釋器

現在,您需要定義新的 Python 解釋器。 這必須包含您最近安裝的 PyTorch 套件。

  1. 瀏覽至解釋器選取項目,然後選取 Add Environment:

Python 解釋器選取

  1. 在 Add Environment 視窗中,選取 Existing environment,然後選擇 Anaconda3 (3.6, 64-bit)。 這包括 PyTorch 套件。

設定新的 Python 環境

若要測試新的 Python 解釋器和 PyTorch 套件,請在檔案中輸入下列程式代碼 DataClassifier.py :

from __future__ import print_function 

import torch 

x=torch.rand(2, 3) 

print(x) 

輸出應該是類似下面的隨機生成的 5x3 張量。

測試新的 Python 解釋器

備註

有興趣深入瞭解嗎? 流覽 PyTorch 官方網站。

了解資料

我們將使用費雪氏的鳶尾花數據集來訓練模型。 這個著名的數據集包含每種鳶尾花物種的 50 筆記錄:鳶尾花 setosa、鳶尾花維吉尼亞,以及鳶尾花雜色。

已發行數個數據集版本。 您可以在 UCI 機器學習資料庫找到鳶尾花數據集,直接從 Python Scikit-learn 函式庫 匯入數據集,或使用先前發佈的任何其他版本。 若要瞭解鳶尾花數據集,請瀏覽 其維基百科頁面。

在本教學課程中,為了示範如何使用表格類型的輸入來訓練模型,您將使用匯出至 Excel 檔案的鳶尾花數據集。

Excel 表格的每一行都會顯示鳶尾花的四個特徵:萼片長度 (cm)、萼片寬度 (cm)、花瓣長度 (cm) 和花瓣寬度 (cm)。這些特徵將作為您的輸入。 最後一個數據行包含與這些參數相關的鳶尾花類型,並代表回歸輸出。 整個數據集包括四個特徵的150個樣本,每個樣本都對應相關的鳶尾花類型。

鳶尾花數據

回歸分析會查看輸入變數與結果之間的關聯性。 根據輸入,模型將學習預測正確的輸出類型 - 三種鳶尾花類型之一:鳶尾花-山梔、鳶尾花-變色、鳶尾花-維吉尼亞。

這很重要

如果您決定使用任何其他數據集來建立自己的模型,則必須根據您的案例指定模型輸入變數和輸出。

載入數據集。

  1. 下載 Excel 格式的鳶尾花數據集。 您可以在這裡找到它。

  2. 在 [DataClassifier.py方案總管檔案] 資料夾中的 檔案中,新增下列 import 語句,以存取我們需要的所有套件。

import torch 
import pandas as pd 
import torch.nn as nn 
from torch.utils.data import random_split, DataLoader, TensorDataset 
import torch.nn.functional as F 
import numpy as np 
import torch.optim as optim 
from torch.optim import Adam 

如您所見,您將使用 pandas (Python 數據分析)套件來載入和操作數據,以及使用 torch.nn 套件,其中包含用於建置神經網路的模組和可延伸類別。

  1. 將數據載入記憶體,並確認類別數目。 我們預期會看到每個鳶尾花類型的50件。 請務必指定您計算機上的數據集位置。

將下列程式碼新增至 DataClassifier.py 檔案。

# Loading the Data
df = pd.read_excel(r'C:…\Iris_dataset.xlsx') 
print('Take a look at sample from the dataset:') 
print(df.head()) 

# Let's verify if our data is balanced and what types of species we have  
print('\nOur dataset is balanced and has the following values to predict:') 
print(df['Iris_Type'].value_counts()) 

當我們執行此程式代碼時,預期的輸出如下所示:

數據集狀態

若要能夠使用數據集並定型模型,我們需要定義輸入和輸出。 輸入包含 150 行的特徵,輸出是鳶尾花類型的欄位。 我們將使用的類神經網路需要數值變數,因此您將輸出變數轉換成數值格式。

  1. 在數據集中建立新的數據行,以數值格式表示輸出,並定義回歸輸入和輸出。

將下列程式碼新增至 DataClassifier.py 檔案。

# Convert Iris species into numeric types: Iris-setosa=0, Iris-versicolor=1, Iris-virginica=2.  
labels = {'Iris-setosa':0, 'Iris-versicolor':1, 'Iris-virginica':2} 
df['IrisType_num'] = df['Iris_Type']   # Create a new column "IrisType_num" 
df.IrisType_num = [labels[item] for item in df.IrisType_num]  # Convert the values to numeric ones 

# Define input and output datasets 
input = df.iloc[:, 1:-2]            # We drop the first column and the two last ones. 
print('\nInput values are:') 
print(input.head())   
output = df.loc[:, 'IrisType_num']   # Output Y is the last column  
print('\nThe output value is:') 
print(output.head()) 

當我們執行此程式代碼時,預期的輸出如下所示:

輸入和輸出

若要定型模型,我們需要將模型輸入和輸出轉換成 Tensor 格式:

  1. 轉換為 Tensor:

將下列程式碼新增至 DataClassifier.py 檔案。

# Convert Input and Output data to Tensors and create a TensorDataset 
input = torch.Tensor(input.to_numpy())      # Create tensor of type torch.float32 
print('\nInput format: ', input.shape, input.dtype)     # Input format: torch.Size([150, 4]) torch.float32 
output = torch.tensor(output.to_numpy())        # Create tensor type torch.int64  
print('Output format: ', output.shape, output.dtype)  # Output format: torch.Size([150]) torch.int64 
data = TensorDataset(input, output)    # Create a torch.utils.data.TensorDataset object for further data manipulation 

如果我們執行程式代碼,預期的輸出會顯示輸入和輸出格式,如下所示:

數據集輸入和輸出格式

有 150 個輸入值。 大約 60 個% 會是模型訓練數據。 您將保留 20 個% 進行驗證,並將 30 個% 用於測試。

在本教學課程中,定型數據集的批次大小定義為10。 訓練集共有95個項目,這表示平均有9個完整批次逐一遍歷訓練集一次(一個訓練週期)。 您將保留驗證和測試集的批次大小為 1。

  1. 分割資料以定型、驗證和測試集:

將下列程式碼新增至 DataClassifier.py 檔案。

# Split to Train, Validate and Test sets using random_split 
train_batch_size = 10        
number_rows = len(input)    # The size of our dataset or the number of rows in excel table.  
test_split = int(number_rows*0.3)  
validate_split = int(number_rows*0.2) 
train_split = number_rows - test_split - validate_split     
train_set, validate_set, test_set = random_split( 
    data, [train_split, validate_split, test_split])    
 
# Create Dataloader to read the data within batch sizes and put into memory. 
train_loader = DataLoader(train_set, batch_size = train_batch_size, shuffle = True) 
validate_loader = DataLoader(validate_set, batch_size = 1) 
test_loader = DataLoader(test_set, batch_size = 1)

後續步驟

隨著數據準備就緒,是時候定型 PyTorch 模型了