분류 전체보기 35

[Linear Regression] 커스텀 데이터셋(Custom Dataset)

1. 커스텀 데이터셋(Custom Dataset) torch.utils.data.Dataset을 상속받아 직접 커스템 데이터셋(Custom Dataset)을 만드는 경우도 있다. torch.utils.data.Datasets은 파이토치에서 데이터셋을 제공하는 추상 클래스다. Dataset을 상속받아 다음 메소드들을 오버라이드 하여 커스텀 데이터셋을 만들어 본다. 커스텀 데이터셋을 만들 때, 일단 가장 기본적인 뼈대는 아래와 같다. 여기서 필요한 기본적인 define은 3개다. len(dataset)을 했을 때 데이터셋의 크기를 리턴할 len dataset[i]를 했을 때 i번째 샘플을 가져오도록 하는 인덱싱을 위한 get_item 2. 커스텀 데이터셋(Custom Dataset)으로 선형 회귀 구현하기 ..

[Linear Regression] 미니 배치와 데이터 로드(Mini Batch and Data Load)

이번 챕터에서는 데이터를 로드하는 방법과 미니 배치 경사 하강법(Mini batch Gradient Descent)에 대해 학습한다. 1. 미니 배치와 배치 크기(Mini Batch and Batch Size) 앞서 배운 다중 선형 회귀에서 사용했던 데이터를 상기해본다. 위 데이터의 샘플의 개수는 5개다. 전체 데이터를 하나의 행렬로 선언하여 전체 데이터에 대해서 경사 하강법을 수행하여 학습할 수 있다. 그런데 위 데이터는 현업에서 다루게 되는 방대한 양의 데이터에 비하면 굉장히 적은 양이다. 만약 데이터가 수십만개 이상이라면 전체 데이터에 대해서 경사 하강법을 수행하는 것은 매우 느릴 뿐만 아니라 많은 계산량이 필요하다. 어쩌면 메모리의 한계로 계산이 불가능한 경우도 있다. 그렇기 때문에 전체 데이터를..

[Linear Regression] 클래스로 파이토치 모델 구현하기

1. 모델을 클래스로 구현하기 앞서 단순 선형 회귀 모델은 다음과 같이 구현했다. In [4]: import torch import torch.nn as nn In [5]: model = nn.Linear(1, 1) 이를 클래스로 구현하면 다음과 같다. In [6]: class LinearRegressionModel(nn.Module): def __init__(self): super().__init__() self.linear = nn.Linear(1, 1) def forward(self, x): return self.linear(x) In [7]: model = LinearRegressionModel() 위와 같은 클래스를 사용한 모델 구현 방식은 대부분의 파이토치 구현체에서 사용되고 있는 방식으로 반..

[Linear Regression] nn.Module로 구현하는 선형 회귀

이전 챕터까지는 선형 회귀를 좀 더 직접적으로 이해하기 위해 가설, 비용 함수를 직접 정의해서 선형 회귀 모델을 구현했다. 이번에는 파이토치에서 이미 구현되어져 제공되고 있는 함수들을 불러오는 것으로 더 쉽게 선형 회귀 모델을 구현해본다. 예를 들어 파이토치에서는 선형 회귀 모델이 nn.Linear()라는 함수로, 또 평균 제곱오차가 nn.functional.mse_loss()라는 함수로 구현되어져있다. 1. 단순 선형 회귀 구현하기 In [22]: import torch import torch.nn as nn import torch.nn.functional as F In [23]: torch.manual_seed(1) Out[23]: 이제 데이터를 선언한다. 아래 데이터는 y = 2x로 가정된 상태에서..

[Linear Regression] 다중 선형 회귀(Multivariable Linear Regression)

앞서 배운 x가 1개인 선형 회귀를 단순 선형 회귀(Simple Linear Regression)이라고 한다. 이번 챕터에서는 다수의 x로부터 y를 예측하는 다중 선형 회귀(Multivariable Linear Regression)에 대해서 이해한다. 1. 데이터에 대한 이해(Data Definition) 다음과 같은 훈련데이터가 있다. 3개의 퀴즈 점수로부터 최종 점수를 예측하는 모델을 만들어본다. 독립 변수 x의 개수가 3개므로 이를 수식으로 표현하면 아래와 같다. 2. 파이토치로 구현하기 필요한 도구들을 import하고 랜덤 시드를 고정한다. In [1]: import torch import torch.nn as nn import torch.nn.functional as F import torch...

[Linear Regression] 자동 미분(Autograd)

경사 하강법 코드를 보고있으면 requires_grad=True, backward() 등이 나온다. 이는 파이토치에서 제공하고 있는 자동 미분(Autograd) 기능을 수행하고 있는 것이다. 1. 경사 하강법 리뷰 경사하강법을 간단히 복습해본다. 경사 하강법은 비용 함수를 미분하여 이 함수의 기울기(gradient)를 구해서 비용이 최소화 되는 방향으로 찾아내는 알고리즘이다. 모델이 복잡해질수록 경사 하강법을 넘파이 등으로 직접 코딩하는 것은 까다로운 일이다. 파이토치에서는 이런 수고를 하지 않도록 자동 미분(Autograd)을 지원한다. 자동 미분을 사용하면 미분 계산을 자동화하여 경사 하강법을 손쉽게 사용할 수 있게 해준다. 2. 자동 미분(Autograd) 실습하기 자동 미분에 대해서 실습을 통해 ..

[Linear Regression] 선형 회귀(Linear Regression)

1. 데이터에 대한 이해(Data Definition) 이번 챕터에서 선형 회귀를 위해 사용할 예제는 공부한 시간과 점수에 대한 상관관계다. 1. 훈련 데이터셋과 테스트 데이터셋 어떤 학생이 1시간 공부 했더니 2점 다른 학생이 2시간 공부 했더니 4점, 또 다른 학생이 3시간 공부했더니 6점을 맞았다. 그렇다면, 내가 4시간을 공부한다면 몇 점을 맞을 수 있을까? 이 질문에 답하기 위해서 1시간, 2시간, 3시간을 공부했을 때 각각 2점, 4점, 6점 이 나왔다는 정보를 이용해야 한다. 이때 예측을 위해 사용하는 데이터를 훈련 데이터셋(training dataset)이라고 한다. 학습이 끝난 후, 이 모델이 얼마나 잘 작동하는지 판별하는 데이터셋을 테스트 데이터셋(test dataset)이라고 한다. ..

[PyTorch Basic] 파이썬 클래스(class)

1. 함수(function)과 클래스(Class)의 차이 우선 함수와 클래스의 차이를 이해하기 위해 덧셈을 지속적으로 수행할 수 있는 도구를 함수와 클래스로 각각 만든다. 1. 함수(function)로 덧셈기 구현 우선 add 함수를 파이썬으로 구현하고 result라는 전역 변수를 선언한다. In [1]: result = 0 In [2]: def add(num): global result result += num return result In [3]: print(add(3)) print(add(4)) 3 7 2. 함수(function)로 두 개의 덧셈기 구현 이번에는 독립적인 두 개의 덧셈기를 만든다. In [4]: result1 = 0 result2 = 0 def add1(num): global res..

[PyTorch Basic] 텐서 조작하기(Tensor Manipulation) 2

5) 뷰(View) - 원소의 수를 유지하면서 텐서의 크기 변경. 매우 중요 파이토치 텐서의 뷰(View)는 Numpy에서의 reshape와 같은 역할을 한다. 텐서의 크기(Shape)를 변경해주는 역할을 한다. 실습을 위해 우선 임의로 다음과 같이 3차원 텐서를 만든다. In [6]: import numpy as np import torch t = np.array([[[0, 1, 2], [3, 4, 5]], [[6, 7, 8], [9, 10, 11]]]) ft = torch.FloatTensor(t) In [7]: print(ft.shape) torch.Size([2, 2, 3]) 현재 위 텐서의 크기는 (2, 2, 3)이다. 5-1) 3차원 텐서에서 2차원 텐서로 변경 이제 ft 텐서를 view를 사..

[PyTorch Basic] 텐서 조작하기(Tensor Manipulation) 1

1. Vector, Matrix and Tensor 1) 벡터, 행렬, 텐서 그림으로 이해하기 딥러닝을 하게 되면 다루게 되는 가장 기본적인 단위는 벡터, 행렬, 텐서다. 차원이 없는 값을 스칼라, 1차원으로 구성된 값을 우리는 벡터라고 한다. 2차원으로 구성된 값을 행렬(Matrix)라고 하며 3차원이 되면 텐서(tensor)라고 부른다. 4차원 이상부터는 3차원의 텐서를 위로 쌓아 올린 모습, 5차원은 그 4차원을 다시 옆으로 확장한 모습, 6차원은 5차원을 뒤로 확장한 모습으로 볼 수 있다. 2) PyTorch Tensor Shape Convention 딥러닝을 할 때 다루고 있는 행렬 또는 텐서의 크기를 고려하는 것은 항상 중요하다. 행렬과 텐서의 크기를 표현할 때 다음과 같은 방법으로 표기한다...