다음을 통해 공유


분석할 데이터 준비

이 자습서의 이전 단계에서는 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 공식 웹 사이트를 방문하세요.

데이터 이해

Fisher의 붓꽃 데이터 세트에서 모델을 학습하겠습니다. 이 유명한 데이터 세트에는 부채붓꽃(Iris setosa), 버시컬러 붓꽃(Iris versicolor) 및 버지니카 붓꽃(Iris virginica)의 세 가지 붓꽃 종 각각에 대한 50개의 레코드가 포함되어 있습니다.

여러 버전의 데이터 세트가 게시되었습니다. UCI Machine Learning 리포지토리에서 붓꽃 데이터 세트를 찾거나 Python Scikit-learn 라이브러리에서 직접 데이터 세트를 가져오거나 이전에 게시된 다른 버전을 사용할 수 있습니다. 붓꽃 데이터 세트에 대한 자세한 내용은 해당 Wikipedia 페이지를 참조하세요.

이 자습서에서는 테이블 형식의 입력으로 모델을 학습하는 방법을 보여주기 위해 Excel 파일로 내보낸 붓꽃 데이터 세트를 사용합니다.

엑셀 테이블의 각 줄은 붓꽃의 네 가지 특징(꽃받침 길이(cm), 꽃받침 너비(cm), 꽃잎 길이(cm), 꽃잎 너비(cm))을 보여줍니다. 이러한 특징은 사용자가 입력합니다. 마지막 열에는 이러한 매개 변수와 관련된 붓꽃 종류가 포함되며 회귀 출력을 나타냅니다. 전체적으로 데이터 세트에는 네 가지 특징에 대한 150개의 입력이 포함되어 있으며, 각 입력은 관련 붓꽃 종류와 일치합니다.

Iris data

회귀 분석은 입력 변수와 결과 간의 관계를 확인합니다. 입력을 기반으로 모델은 부채붓꽃(Iris-setosa), 버시컬러 붓꽃(Iris-versicolor) 및 버지니카 붓꽃(Iris-virginica)의 세 가지 붓꽃 종류 중 하나를 정확하게 예측하는 방법을 학습하게 됩니다.

Important

다른 데이터 세트를 사용하여 고유한 모델을 만들려고 한 경우 시나리오에 따라 모델 입력 변수와 출력을 지정해야 합니다.

데이터 세트를 로드합니다.

  1. 붓꽃 데이터 세트를 Excel 형식으로 다운로드합니다. 여기에서 찾을 수 있습니다.

  2. Solution Explorer Files 폴더의 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개의 항목이 표시될 것으로 예상됩니다. PC에서 데이터 세트의 위치를 지정해야 합니다.

파일에 다음 코드를 추가합니다 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

모델을 학습하려면 모델 입력 및 출력을 텐서 형식으로 변환해야 합니다.

  1. 텐서로 변환합니다.

파일에 다음 코드를 추가합니다 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개의 항목이 있으며, 평균적으로 학습 세트를 한 번 반복(1 Epoch)해야 하는 전체 배치는 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 모델을 학습해야 합니다.