목록전체 글 (318)
susinlee 님의 블로그

(아래 샘플 이미지들은 모두 데이콘측에서 제공받은 데이터임을 밝힙니다) TIL이 너무 무겁다는 생각이 들었다. 쓰는 데 1~2시간 걸리니... 조금 가볍게 작성해보자. 오늘은 다음과 같은 작업을 수행하였다.1. 사전학습 모델로 차량/비차량 분류한 결과에서 비차량 이미지들을 수작업으로 한번 더 필터링하기2. 필터링을 완료한 사진을 하나의 폴더로 합치고 모델 학습시키기3. 학습한 모델로 테스트 데이터 예측을 수행하고, 제출하기4. 모델 예측 분석- 모델의 예측한 확률값의 분포를 확인 → 너무 치우쳐져 있지 않는지 (Log Loss는 강한 예측이 틀릴 경우 불이익이 크기 때문)- 모델이 어떤 이미지들에서 분류에 어려움을 겪었는지 체크 → 전처리 과정이나 모델링 과정에서의 보완점 발견하기 위함5. 분석 결과를 ..

(아래 샘플 이미지들은 모두 데이콘에서 제공한 데이터임을 밝힙니다.) 대회 날이 밝았다. https://dacon.io/competitions/official/236493/overview/description 역시... 상금도 크고, 채용 기회까지 주어지다 보니 대회 첫날임에도 벌써 600명 가까운 인원이 참여하고 있다. 규칙들을 찬찬히 살펴보다가 오전 10시가 되자마자 부랴부랴 데이터를 확인했다. 훈련 데이터는 약 3만 3천 장, 테스트 데이터는 약 8천 장으로 구성되어 있었고, 디렉터리 구조로 정리된 이미지들은 크기가 제각각이었다. PyTorch에서 제공하는 ImageFolder 클래스는 이러한 폴더 구조의 이미지 데이터셋을 손쉽게 불러올 수 있게 도와준다. 이미지 전처리는 Compose를 통해 ..

RNN에 대해 공부해보자. 앞서 배웠던 MLP나 CNN은 입력 → 출력이 한 방향으로만 흐르는 구조였다. 이렇게 입력에서 출력까지 정보가 한 방향으로 흐르는 신경망을 FFNN(Feed-forward Neural Network)라고 한다. 하지만 실제 문제에서는 문장이나 주가, 음성처럼 시간에 따른 순차적인 데이터들이 많다. 이러한 경우에는 과거의 정보가 현재의 판단에 영향을 미치는 구조가 필요하다. 예를 들어, "눈" 이라는 단어는 문맥에 따라 하늘에서 내리는 눈일 수도 있고, 사람의 눈일 수도 있다. 단어 하나만 놓고 보면 어떤 의미인지 알기 어렵지만, 앞에 "첫" 이라는 단어가 붙어 "첫눈"이 된다면 이는 하늘에서 내리는 눈을 의미할 가능성이 높아진다. 이전의 단어(과거 정보)가 현재 단어의 의미 ..

밤에 TIL 쓰는 게 쉽지 않은 것 같다. 밤에는 머리가 잘 굴러가지 않는달까... 어제 공부한 걸 다음 날 아침에 쓰고 있다. 어제는 여러가지 실험에 대부분의 시간을 투자했다. MNIST 데이터셋을 활용하여 MLP의 구조를 여러 방식으로 변경해가며 성능을 테스트하고 비교하였고, 이어서 CNN 모델로도 학습을 진행한 뒤 두 모델의 전반적인 성능을 비교 분석하였다. MNIST 데이터셋은 0부터 9까지의 손글씨 숫자 이미지로 구성되어 있고, 28x28 픽셀의 흑백 데이터이며, 7만 개의 데이터가 있다(훈련용 6만 개, 테스트용 1만 개). 해당 데이터셋으로 이미지 분류 모델을 만들어서, 이것저것 실험을 했다. MLP 모델을 정의한 다음 에포크(반복 횟수)에 따라서 성능 변화를 측정하였고, 은닉층 뉴런 수..

이번엔 퍼셉트론이 어떻게 가중치를 학습하는 지 예시를 통해 알아보자. 다음과 같은 퍼셉트론이 있다고 가정하자. 활성화 함수는 두 입력값을 가중합한 결과가 0.5보다 작다면 0을 출력하고, 0.5이상이라면 1을 출력한다. 학습에 사용할 데이터는 다음과 같다고 가정하자. 초기 w1값과 w2값을 각각 0.1, 0.2 으로 초기화하고 첫 번째 입력값을 계산해보면 다음과 같은 결과가 나온다. 0.37 x 0.1 + 0.16 x 0.2 = 0.037 + 0.032 = 0.069 가중합한 결과를 활성화 함수를 거치면 출력값은 0으로 실제 Y값과 일치한다. 제대로 예측을 수행한 셈이다. 두 번째 입력값도 마찬가지로 계산해보자 0.95 x 0.1 + 0.06 x 0.2 = 0.095 + 0.012 = 0.107 로 활..

게으름 방지 목적으로 스타벅스로 출근하는 중... (9 to 6) 손실 함수데이터를 분류할 수 있는 결정 경계는 무수히 많다. 그렇다면 어떤 결정 경계가 더 '좋다'고 말할 수 있을까? 예측값과 실제값의 차이를 오차라고 하며, 이 오차가 작을수록 데이터를 더 잘 분류했다고 볼 수 있다. 이러한 오차를 수치로 계산하는 함수를 손실 함수(loss function)라고 부른다. 따라서 가장 좋은 결정 경계란 손실 함수의 값이 가장 적은 결정 경계이며, 우리는 이 손실을 최소화하는 방향으로 모델(가중치)을 학습시키게 된다. 경사 하강법과 오차 역전파데이터의 분포가 복잡해질수록, 은닉층을 추가하거나 각 층의 뉴런 수를 늘려 모델을 고도화 해야한다. 하지만 이렇게 되면 학습해야 할 가중치와 편향의 수가 급격히 증..

딥러닝(파이토치) 파이토치에는 신경망 구조와 학습 데이터를 담당하는 두 개의 핵심 클래스가 존재한다.신경망의 동작을 정의하는 클래스 : nn.Module데이터를 다루는 클래스 : DatasetDataset를 DataLoader에 넘기면, batch_size 단위로 자동 배치 처리더보기신경망 모델 클래스import torch.nn as nnclass MyModel(nn.Module): def __init__(self): # 신경망 구성요소 정의 def forward(self, x): # 신경망의 동작 정의 return output 데이터를 다루는 클래스from torch.utils.data import Dataset..

데이터 기반 프로젝트는 어떻게 진행될까? 우선 현황 파악 및 문제 정의를 진행해야한다. 우리가 제공하는 서비스의 어떤 부분에서 고객들이 불편함을 겪고 있는지를 파악해야한다. 화면 기획서와 데이터를 파악한 다음 서비스를 직접 사용하면서 불편한 점은 없는지, 해당 기능의 사용 프로세스에서 갑자기 수치가 떨어지는 부분이 있는지, 고객 세그먼트별로 격차가 큰지를 고민한다. 즉, 직접 서비스를 사용하고 고민하면서 수많은 가설을 생성한다. 그 중 어떤 가설을 선택할 것인지 고민하는데 이는 회사의 전략 방향에 다라 달라진다. 목표 및 가설을 선택했다면 성과 지표를 정의해야한다. 만약 목표가 결제 전환율을 올릴 수 있는 기능을 만드는 것이라면 전환율이 성과 지표가 될 것이다. 하지만 여러 요소가 연관되어 있기 때문에 ..