전체 글

전체 글

    MNIST 분류 by softmax regression

    MNIST 분류 by softmax regression

    import torch import torchvision.datasets as dsets import torchvision.transforms as transforms from torch.utils.data import DataLoader import torch.nn as nn import matplotlib.pyplot as plt import random random.seed(777) torch.manual_seed(777) training_epochs = 15 batch_size = 100 mnist_train = dsets.MNIST(root='MNIST_data/', train=True, transform=transforms.ToTensor(), download=True) mnist_test =..

    SoftMax Regression

    SoftMax Regression

    소프트맥스 회귀 선택지 개수만큼의 차원을 가지는 벡터 생성, 그 벡터가 각 벡터의 모든 원소 합이 1이 되도록 원소들의 값 변환 시키는 어떤 함수 지니게 만들어야함. 분류하고자 하는 클래스가 k개일 때, k차원의 벡터를 입력 받아서 모든 벡터 원소의 값을 0과 1 사이의 값으로 값 변경 후에 다시 k개의 벡터 리턴. 소프트맥스 함수의 입력으로 사용되는 벡터는 벡터의 차원이 분류하고자 하는 클래스 개수가 되어야 하므로 가중치 연산을 통해서 3차원 벡터로 변환되어야 함. 이때 가중치 곱을 진행한다. 이러한 과정으로 소프트맥스 함수의 입력으로 바꾼다. 오차 계산은 어떻게 할까? 그 전에 소프트맥스 함수의 출력은 어떠한 형태를 띄고 있는지 확인 해야한다. 소프트맥스 함수의 출력은 분류하고자 하는 클래스 개수만큼..

    Logistic Regression

    Logistic Regression

    logistic regression : Binary Classification을 풀기 위한 대표적인 알고리즘 로지스틱 회귀의 가설 그래프는 S자 모양. 이러한 관계를 표현하기 위한 가설 : H(x) = f(Wx + b) 이때 시그모이드 함수 f를 사용한다. *cf) Sigmoid 함수 출력값을 0과 1 사이 값으로 조정 -> 분류 작업에 사용 가능 W값이 클 수록 경사가 커지고 W가 작아지면 경사가 작아짐. b값에 따라 그래프가 좌,우로 이동한다. 로지스틱 회귀 cost fuction 선형회귀와 같이 MSE를 사용하면 안된다. 왜? 비용함수를 미분하면 심한 비볼록 형태 그래프 나옴. 이러한 구불구불한 형태의 그래프에 경사 하강법을 사용할 경우 문제점 -> 경사 하강법이 오차가 최솟값이 되는 구간에 도착했..

    Mini Batch and Data Load

    Mini Batch and Data Load

    Mini Batch 전체 데이터를 더 작은 단위로 나누어서 해당 단위로 학습하는 개념 미니 배치 학습 시, 미니 배치만큼 가져가서 그에 대한 비용(cost)를 계산하고 경사하강법 수행한다. 그리고 그 다음 미니 배치를 가져가서 경사 하강법을 사용하고 마지막까지 이를 반복. 이렇게 전체 데이터에 대한 학습 1회 끝나면 -> 1 Epoch DONE *Epoch(에포크) : 전체 train data가 학습에 한번 사용된 주기를 말함 *미니 배치 경사 하강법은 전체 데이터의 일부만을 보고 경사 하강법을 수행하므로 최적값으로 수렴하는 과정에서 값이 조금 헤매기도 하지만 training 속도가 빠름 *Iteration : 한 번의 에포크 내에서 이루어지는 매개변수인 W와 b의 업데이트 횟수. Data Load fr..

    Linear Regression

    Linear Regression

    Simple Linear Regression Data Definition dataset : hours(x) , points(y) 데이터는 torch.tensor의 형태를 띄고 있다. Hours(x) Points(y) 1 1 2 2 3 3 x_train = torch.FloatTensor([[1], [2], [3]]) y_train = torch.FloatTensor([[1], [2], [3]]) print(x_train) print(x_train.shape) print('-------------------') print(y_train) print(y_train.shape) ##################output################### tensor([[1.], [2.], [3.]]) tor..

    Tensor manipulation

    Tensor manipulation

    pytorch는 numpy와 매우 비슷하며 호환성이 높다. t = torch.FloatTensor([0., 1., 2., 3., 4., 5., 6.]) print(t) FloatTensor라는 함수를 사용하여 float형 1차원 배열을 tensor로 표현. GPU 사용하려면 torch.cuda.FloatTensor 함수 사용하면 되는데 나는 도대체 왜 cuda 오류가 나는건지.... 언젠가 cuda와의 싸움에서 승리하고 말겠음........... 중요한건 꺾이지 않는 마음이지.. 그치.. 나도 GPU 쓰고싶단 말이다.. ! 어쨌든 본론으로 돌아와서 print(t.dim()) print(t.size()) print(t.shape) print(t[2:5], t[-1], t[:4]) ##############..