Notice
Recent Posts
Recent Comments
05-21 07:17
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
Archives
Today
Total
관리 메뉴

Byeol Lo

Pytorch - 데이터 처리 본문

AI/Pytorch

Pytorch - 데이터 처리

알 수 없는 사용자 2023. 9. 6. 14:38

 우선 신경망에서 가장 중요한 input data가 있어야 학습할 수 있다. 주어진 훈련 데이터를 통해 출력 데이터로 변환시키는 알고리즘을 학습한다. 알고리즘을 크게 본다면 순서는 다음과 같다.

  1. Data Preparation
  2. Data Visualization
  3. Data Pre-Processing
  4. Data Load
  5. Model Architecture
  6. Hyper Parameter
  7. Model Train
  8. Model Valid
  9. Model Test
  10. Model Deploy

앞의 두 파트는 여기서 다루지 않겠다. 이 글은 오직 Data Pre-processing부터 다루며 또한 이 글은 numpy에 대한 기본적인 지식이 어느 정도 필요해야 한다. 또한 필요할 때마다 해당되는 팁이나 지식을 그때그때 다룰 것이다.

 토치는 Tensor와 Variable로 데이터를 추상화한 클래스를 제공한다. Tensor는 numpy 배열과 유사하며, 토치는 GPU를 통한 학습으로 매우 빠르게 동작하기 때문에 병렬적인 연산으로 속도가 매우 빠르다. 여기서 부르는 텐서는 차원마다 부르는 명칭이 다른데 0차원 부터 차례대로 스칼라, 벡터, 행렬, 텐서 로 표현되며 3차원 부터는 전부 ~차원 텐서로 부르게 된다. 여기서는 기본적인 자료 구조의 형태와 메소드들을 다룰 예정이다.

Tensor.size

기본적인 tensor size를 볼 수 있다. (+Scalar는 빈 사이즈를 반환한다)

import torch

t1 = torch.tensor(1)
t2 = torch.randn((1,2,3))

print(t1.size())
print(t2.size())

 

Tensor.shape

numpy와 동일하게 shape의 멤버 변수를 통해 접근할 수 있다.

import torch

t1 = torch.randn((1,2,3))

for i in t1.shape:
    print(i)

 

Tensor.numpy()

numpy 에서 tensor로의 변환만 있다면 섭섭하다. numpy로도 변환시킬 수 있다.

import torch
import numpy as np

t1 = torch.randn((1,2,3))
print(t1.numpy())

 

torch.from_numpy

numpy 행렬을 tensor 로 변환 할 수 있다.

import torch
import numpy as np

arr = np.random.randn(1, 2, 3)
print(torch.from_numpy(arr))

 

torch.type

torch의 원소들 타입을 바꿀 수 있다.

import torch

t1 = torch.tensor([1, 2, 3])
print(t1.dtype)
t1 = t1.type(torch.FloatTensor)
print(t1.dtype)

 

torch.rand

각각의 값이 uniform distribution을 따르는 랜덤한 난수를 발생한다.

import torch

t1 = torch.rand((1,2,3))
print(t1)

 

torch.randn

각각의 값이 normal distribution을 따르는 랜덤한 난수를 생성할 수 있다.

import torch

t1 = torch.randn((1,2,3))
print(t1)

np.random.randn과는 반대로 tuple 이나 list 형식으로 shape를 넣어주어야 한다.

 

matplotlib.pyplot imshow

시각화 라이브러리 matplotlib에서 imshow는 numpy의 배열을 통해 이미지를 보여줄 수 있는데, torch.numpy()와 연계하여 사용할 수 있다.

import numpy as np
import torch
import matplotlib.pyplot as plt

plt.imshow(t1[:, :, 0].numpy()) # Channel G 선택

 

torch.eye

단위 행렬을 만들어준다.

import torch

t1 = torch.eye(3, 3)

 

torch.permute

차원을 뒤바꾼 tensor를 반환한다.

import torch

t1 = torch.randn((1, 2, 3))
print(t1.shape)
t1 = t1.permute(2, 0, 1)
print(t1.shape)

'''
>> torch.Size([1, 2, 3])
>> torch.Size([3, 1, 2])
'''

 

GPU 사용

import torch

t1 = torch.rand(100, 100).cuda()
t2 = torch.randn(100, 100).cuda()

print(t1.matmul(t2))

 

Variable

일반적으로 딥러닝 알고리즘은 계산 그래프(Computation Graph)로 쉽게 표현할 수 있다. Variable은 일반적으로 다음 생성자와 메소드를 가진다.

class Variable():
	def __init__(self, data:np.ndarray or None):
        self.data = data
        self.grad = None
        self.creator = None
        # ...
        
    def forward(self, x):
        # ...
    
    def backward(self, gy):
        # ...

Variable은 기본적으로 grad(수학의 gradient)를 가지고 있기 때문에 변화율을 back propagation 때 쉽게 연산 가능하다. (밑시딥3을 참고하자)

 

PIL.Image.convert

 PIL은 Image를 불러올 때 이미지의 상태에 따라 맞춰서 불러오는데, RGBA, gray scaled, CMYK, ... 등 다양한 형태의 사진이 있을 수 있다. 다음 코드는 이미지 컬러를 불러올 때, 위의 형태를 지정해주는 코드이다.

from PIL import Image

import numpy as np

image = Image.open(path)
rgb_image = image.convert('RGB')
binary_image = image.convert('1')
cmyk_image = image.convert('CMYK')
rgba_image = image.convert('RGBA')
gray_image = image.convert('L')

 

Image Fourier Transform

[Coming Soon]

 

'AI > Pytorch' 카테고리의 다른 글

Pytorch - 대규모 이미지 처리 오류 모음  (0) 2023.09.05
Comments