共用方式為


準備資料以供分析

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

在 Visual Studio 中開啟新的專案。

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

Create new Visual Studio project

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

Create new Python app

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

Configure your new Python app

create 以建立您的專案。

建立 Python 解譯器

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

  1. 流覽至解譯器選取專案,然後選取 Add Environment

Python interpreter selection

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

Configure a new Python environment

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

from __future__ import print_function 

import torch 

x=torch.rand(2, 3) 

print(x) 

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

Test your new Python interpreter

注意

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

瞭解資料

我們將在費舍爾的鳶尾花資料集上定型模型。 這個著名的資料集包含三種鳶尾花物種中的 50 筆記錄:鳶尾花 setosa、鳶尾花和鳶尾花維西色。

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

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

Excel 表格的每一行都會顯示虹膜的四個特徵:花瓣長度,以 cm 為單位的花瓣寬度,以 cm 為單位的花瓣長度,以 cm 為單位的花瓣寬度。這些功能將作為您的輸入。 最後一個資料行包含與這些參數相關的鳶尾花類型,並代表回歸輸出。 資料集總共包含四個特徵的 150 個輸入,每一個都符合相關的鳶尾花類型。

Iris data

迴歸分析會查看輸入變數與結果之間的關聯性。 根據輸入,模型將瞭解如何預測正確的輸出類型-三種鳶尾花類型之一:鳶尾花、鳶尾花-維西色、鳶尾花。

重要

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

載入資料集。

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

  2. DataClassifier.py在 [方案總管 Files] 資料夾中的 檔案 中,新增下列 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()) 

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

Dataset status

若要能夠使用資料集並定型模型,我們需要定義輸入和輸出。 輸入包含 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()) 

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

Input and output

若要定型模型,我們需要將模型輸入和輸出轉換成 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 

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

Dataset input and output format

有 150 個輸入值。 大約 60% 是模型定型資料。 您將會保留 20% 的驗證,30% 用於測試。

在本教學課程中,訓練資料集的批次大小定義為 10。 訓練集中有 95 個專案,這表示平均有 9 個完整批次逐一查看定型集一次(一個 epoch)。 您將保留驗證和測試集的批次大小為 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 模型了