공부하며 성장하기
![[파이썬 코딩의 기술] 클래스 합성으로 복잡한 내포 관계 정리하기](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FccKZnN%2FbtrGgJEv2OK%2Fv8M5bbUEUb1151Qjc6gD6K%2Fimg.jpg)
[파이썬 코딩의 기술] 클래스 합성으로 복잡한 내포 관계 정리하기
파이썬 내장 딕셔너리 타입은 객체를 동적으로 사용할 수 있도록 해줍니다. 이때 동적(Dynamic)이라는 말은 어떤 값이 들어올지 미리 알 수 없는 상태에서, 값이 들어오면 그때 그때 능동적으로 처리하는 것을 뜻합니다. 예를 들어 다음과 같은 코드가 있습니다. 학생들의 점수를 기록해야 하는데, 학생의 이름은 미리 알 수 없는 상황입니다. 이럴 때는 각 학생별로 미리 정의한 attribute를 사용하는 대신 딕셔너리에 이름을 저장하는 클래스를 정의할 수 있습니다. class SimpleGradebook: def __init__(self): self._grades = {} def add_student(self, name): self._grades[name] = [] def report_grade(self, ..
![YOLOv3 모델 학습 속도 개선하기](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdBD3dL%2FbtrE6xK0ipH%2Fz8DYMx1WjkNtaSmCKP6Qpk%2Fimg.png)
YOLOv3 모델 학습 속도 개선하기
최근 여러 YOLO 모델로 데이터를 학습시키는 과정에서 시간이 오래 걸려 고생했습니다. 데이터가 많아서라기 보다는 GPU 사용률(Utilization)이 평균 20%에도 미치지 못한 것이 가장 큰 원인이었어요. 하지만 여러 시도 끝에 결국은 사용률을 90% 이상으로 개선했고, 학습 시간을 3분의 1로 줄일 수 있었습니다. 우선 제가 최종적으로 사용한 것은 아래 모델입니다. YOLO 모델로는 Ultralytics에서 배포한 repository들을 많이 이용하실텐데, 제 경우에는 프로젝트에 맞게 수정하기가 까다로운 구조라고 판단해서 대신 아래 repository를 가져와서 사용했습니다. GitHub - eriklindernoren/PyTorch-YOLOv3: Minimal PyTorch implementat..
![torch.cuda.is_available() False 해결](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FPq7Vf%2FbtrEu8sdiCO%2FykgaPRALABEbqH6SRD8Mc1%2Fimg.png)
torch.cuda.is_available() False 해결
GPU가 정상 인식되지 않는 데에는 여러 가지 이유가 있을 수 있지만, 그 중 대부분은 버전 호환 문제입니다. 아래 4가지의 버전을 모두 확인해서 서로 호환이 가능한지 확인해야 합니다. 1. pytorch, torchvision, torchaudio PyTorch An open source machine learning framework that accelerates the path from research prototyping to production deployment. pytorch.org 2. CUDA Release Notes :: CUDA Toolkit Documentation Beginning in 2022, the NVIDIA Math Libraries official hardware sup..
![서포트 벡터 머신(Support Vector Machine)](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fb1CgIP%2FbtrtRXnZCkn%2FLnlq9CL0BIjH7xQySYqKN0%2Fimg.png)
서포트 벡터 머신(Support Vector Machine)
서포트 벡터 머신(이하 SVM)은 최대 마진 분류기(Maximal margin classifier)를 일반화한 모델입니다. 최대 마진 분류기는 매우 단순하면서도 강력하지만, 대부분의 데이터셋이 선형 결정 경계(Decision boundary)로 구별되기 어렵기 때문에 이를 더 확장한 모델들을 만들어냈습니다. 이번 글에서는 이들이 어떻게 다르고, 또 구체적으로 어떻게 동작하는지 정리해보았습니다. 최대 마진 분류기 앞서 언급한 모든 분류기가 하는 일은 바로 최적의 분리 초평면(Hyperplane)을 찾는 것입니다. 여기서 초평면이란 p차원의 공간에서 p-1차원인 평평한 아핀(affine) 부분 공간을 말합니다. 예를 들어 3차원 공간에서 평평한 2차원의 초평면을 수식으로 나타내면 다음과 같습니다. (이때 `..
![딥러닝 오차 역전파(Back-propagation) 정확히 이해하기](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FS0O4e%2Fbtrtb0S6hl3%2F2RAjzvFvX5KVAxahYY9vGk%2Fimg.png)
딥러닝 오차 역전파(Back-propagation) 정확히 이해하기
이번 글에서는 뉴럴 네트워크(또는 신경망, Neural Network)에서 가중치(Weights)를 최적화(Optimization) 하기 위해 사용하는 오차 역전파(Back-propagation)의 과정을 직접 계산하면서 이해해보도록 하겠습니다. 예를 들어 아래 그림과 같은 신경망이 있습니다. 파란색은 input 또는 output 값을, 빨간색은 초기 가중치의 값을 나타냅니다. ① Feed forward 오차역전파를 위해서는 우선 순방향으로 결과 값을 먼저 계산한 후에 그 오차(Error)를 구해야 합니다. 하나씩 순서대로 계산해보겠습니다. $$net_{h_1} = i_1 * w_1 + i_2 * w_2 + b_1 * 1 = 0.05 * 0.15 + 0.1 * 0.2 + 0.35 * 1 = 0.3775$..
![[한 줄 정리] 베이지안 최적화(Bayesian Optimization)](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FzeETL%2Fbtrs71ydzXU%2FY620PTHb11Ld9VIhMBmKP1%2Fimg.png)
[한 줄 정리] 베이지안 최적화(Bayesian Optimization)
하이퍼파라미터를 최적화하기 위한 방법 중 하나로, 베이지안 정리를 기반으로 합니다. 베이지안 최적화는 미지의 목적함수를 학습함으로써 이를 전역 최적해로 만드는 파라미터를 찾는 방법입니다. 이를 위해 먼저 사전분포에 기반해 하나의 탐색 함수를 가정합니다. 그리고 매번 새로운 샘플링을 사용해 목적함수를 테스트할 때 해당 정보를 사용해 새로운 목적함수의 사전분포를 업데이트합니다. 마지막으로 사후 분포를 통해 얻은 전역 최적해가 나타날 가능성이 가장 높은 위치에서 알고리즘을 테스트합니다. 그리드 탐색(Grid Search), 랜덤 탐색(Random Search) 같은 다른 기법들과 가장 중요한 차이는 바로 이전까지 탐색한 하이퍼파라미터 값들의 성능 결과 값을 사전 지식으로 활용한다는 점입니다. 또한 20개 이하..
![CNN Parameter Sharing](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbEG4VW%2FbtrsWLovDhm%2FeRy7p2CdAR9EleZcXe4pnK%2Fimg.png)
CNN Parameter Sharing
딥러닝을 처음 공부할 때 CNN(Convolutional Neural Network, 합성곱 신경망)에 대해 배웁니다. 일반 신경망 Neural Net과 유사하지만 이미지 데이터의 특성을 인코딩할 수 있고, 또 그 과정에서 네트워크를 학습시키는데 필요한 가중치, 즉 parameter의 수를 크게 줄일 수 있다는 장점이 있습니다. 그런데 CNN은 어떻게 해서 parameter 수를 줄이는 걸까요? Conv layer(합성곱 층)과 Pooling layer에서 파라미터가 줄어든다는 것은 쉽게 예상해볼 수 있지만, 그 과정을 정확히 설명하기 위해서는 바로 parameter sharing의 개념을 이해해야 합니다. 때문에 이번 글에서는 CNN의 parameter sharing 또는 weights replicat..
![모델 검증 방법](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FFD6r2%2FbtrsFsIpZ3g%2FXehna7NILnl1Z7EqIn9knK%2Fimg.jpg)
모델 검증 방법
이번 글에서는 모델의 검증(Validation) 방법을 간단히 정리해 보았습니다. 모델 검증 방법은 크게 3가지로 나뉩니다. ① 홀드아웃(Hold-out) 가장 간단하고 직접적인 검증 방법으로, 데이터를 임의로 나눠 각각 훈련, 검증, 테스트에 사용합니다. 일반적으로 각 크기를 6:2:2 비율로 나누거나, 훈련과 테스트 데이터셋을 7:3 또는 8:2 비율로 나눈 후, 훈련 데이터셋을 다시 훈련과 검증 셋으로 7:3 또는 8:2 비율로 나눠 사용하기도 합니다. 단점은 데이터셋을 어떻게 나누느냐에 따라 테스트 성능에 차이가 크다는 것입니다. 이는 곧 검증을 한 번만 수행하기 때문이기도 하죠. 따라서 이를 보완하기 위해 다음과 같은 교차 검증 방법이 등장하게 되었습니다. ② 교차 검증(Cross Validat..
![ROC 곡선 vs. P-R 곡선](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbQwrlw%2Fbtrr15VRO40%2FrPA6ZkAjDxHSu6jMR8LApK%2Fimg.gif)
ROC 곡선 vs. P-R 곡선
지난 글에서 분류 모델의 평가 지표와 ROC 곡선(Receiver Operating Characteristic Curve)에 대해 정리해 보았습니다. 이번 글에서는 P-R 곡선(Precision-Recall Curve)에 대해 알아보고, 각 곡선을 언제 이용하는 게 좋은지 비교하며 살펴보겠습니다. 이전 글은 아래 북마크를 통해 확인하실 수 있습니다. [한 줄 정리] 분류 모델 평가 지표 혼동 행렬 Confusion Matrix - 실제 및 모델이 예측한 데이터의 분류를 나타냅니다. - 예를 들어 이메일의 스팸 여부를 분류하는 문제가 있을 때, TP(True Positive)는 실제 스팸인 이메일을 분류기가 스팸 nanunzoey.tistory.com P-R 곡선이란? P-R 곡선은 정밀도 precisio..
![[한 줄 정리] 분류 모델 평가 지표](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbiwArF%2FbtrrqY3u6RR%2F4nlp6JAj6XLduGEVH5rKjK%2Fimg.png)
[한 줄 정리] 분류 모델 평가 지표
혼동 행렬 Confusion Matrix - 실제 및 모델이 예측한 데이터의 분류를 나타냅니다. - 예를 들어 이메일의 스팸 여부를 분류하는 문제가 있을 때, TP(True Positive)는 실제 스팸인 이메일을 분류기가 스팸이라고 제대로 분류한 경우입니다. - 반대로 FP(False Positive)는 실제 스팸이 아닌 이메일을 분류기가 스팸이라고 잘못 분류한 경우입니다. 정밀도 Precision - 분류기가 양성 샘플이라고 분류한 것 중에서 실제 양성 샘플의 비율, 즉 분류기가 스팸으로 분류한 것 중 실제 스팸인 비율입니다. $$Precision = \frac{45}{45+5} = 0.9$$ 재현율 Recall / 민감도 Sensitivity - True positive rate, 실제 양성인 샘플..