목록기초 노트 (51)
플로라도의 data workout
torchivsion의 pre-trained된 Resnet18, Resnet50과 같은 모델의 가장 마지막단에는 Global Average Pooling을 사용하여 Linear Classifier의 역할을 대체하고 있다. Global Average Pooling의 아이디어는 Resnet뿐만 아니라 많은 딥러닝 아키텍쳐에서 쓰이는데 파이토치에서 제공하는 pooling layer에는 별도의 global average pooling layer가 없다. 그러나 기존의 average pooling 2d와 adaptive_avg_pool2d로 gap를 간단히 구현할 수 있었다. import torchimport torch.nn.functional as F# 임의의 텐서를 생성;: 배치 크기 1, 10개의 채널, 2..
데이콘의 지난 대회에 submission을 제출하며 테스트하던 중에 '기타 제출값 Error가 발생하였습니다.'를 마주하였다.원인은 제출하려고 하는 submission.csv 파일에 예측치로 Null값이 포함되어 있었기 때문이었다. # DataFrame의 index와 칼럼인 'label'이 모두 '가'라는 값(value)로 설정됨submit[~cond]['label'] = '가' # loc를 사용하여 조건에 해당하는 행을 인덱싱하여야 한다.submit.loc[~cond, 'label'] = '가' 따라서 Null이 포함된 행에는 Null값 대신 임의의 예측값인 '가'를 채워넣어주는 방식으로 submission파일을 수정하려고 하였다. 그런데 첫번째 코드를 보면, DataFrame의 index와 칼럼인..
오늘은 새로운 종류의 신경망인 RNN에 대해서 다룬다. 본격적으로 시작하기 전에, 우리가 지난 강의 딥러닝의 소프트웨어와 하드웨어를 다룬 장에서 파이토치와 텐서플로우를 비교한적이 있었는데 현재 강의하고 있는 전후인 19년도 10월 10일에, 파이토치 1.3이 업데이트 되었다.파이토치가 더 선호되면서도, 텐서플로우보다 모바일에서 배포하기 까다로운 단점이 여전히 있던 문제가 있었는데이제는 금번 업데이트로, 이론적으로 모바일에서도 배포하기 좋은 환경이 되었다! 이렇게 한 학기에도, 심지어 1~2주전에 다룬 내용이 outdated되는 걸 볼 수 있는게 바로 딥러닝 분야이다.! 우리는 지난 두번의 강의에 걸쳐 신경망 학습의 기본 전략(nuts and bolts)에 대해서 자세히 다루었다.이제 우리는 ConvN..
영어 강좌나 논문에서 marginalize라는 표현을 자주 마주하게 되는데, 매번 헷갈려와서 정확한 의미를 정리하고자 한다. "marginalize"는 통계학과 확률론에서 주로 사용되는 말로, 하나 또는 그 이상의 변수의 확률분포를 얻기 위해 다변수 확률 분포에서 일부 변수의 영향을 "제거"하는 과정을 의미한다. 이 과정은 다변수 시스템에서 특정 변수에만 집중하고자 할 때 사용된다. Marginalize? 예를 들어, 두 변수 $X$와 $Y$가 있는 결합 확률 분포 $P(X,Y)$가 있다고 가정해보자. 만약 변수 $Y$에 대해서만 관심이 있고, $X$의 영향을 무시하고자 한다면, $X$에 대해 marginalization을 수행하여 $Y$의 주변 확률 분포(marginal probability distr..
신뢰수준(confidence level)은 아마도 고교 통계 시간에서부터 접하는 개념으로, 데이터 사이언스 분야에서는 파라미터의 추정치에 관하여 신뢰할 수 있는 정도를 알고자 할때 사용되곤 하는 것 같다. 그런데 여기서 신뢰(confidence)라는 것은 사실은 묘한 뉘앙스인 것이 정확(precise)과 믿을 수 있는(reliable)것의 중간적인 성격이다. 신뢰수준이라는 개념을 배울때 처음에 반드시 헷갈리는것이 "신뢰수준 95%의 의미는 신뢰구간에 95%의 확률로 모평균이 포함될것이다." 라는 해석을 내놓는 것이다. 이 말의 의미를 조금 더 살펴보면, 95%확률이라는 것은 대게 100번중 95번은 모평균이 저 신뢰구간에 포함될 수 있다는 말인데, 어떻게 결정된 값인 모평균이 확률적으로 저 구간에 포함될..
기본적으로 파이썬 클래스의 메서드들은 첫번째 인자로 'self' 매개변수를 포함시키는게 일반적이다. 'self'는 메서드가 호출될 때 해당 인스턴스 자체를 자동으로 참조하는 역할을 한다. 이를 통해 메서드 내에서 해당 인스턴스의 속성(attribute)이나 다른 메서드에 대해 접근할 수 있다. 그런데 이와는 달리, 첫번째 인자로 'self'가 아닌 'cls'를 받는 메서드가 존재한다. 바로 클래스 메서드(clasmethod)이다. 클래스 메서드의 경우, 'self'가 아닌 'cls'를 필수적으로 포함해야 한다. 1. 클래스 메서드 - 클래스 메서드는 메서드 선언시에 @classmethod의 데코레이터를 달아주어 정의하게 된다. - 클래스에서 직접 호출하는 점 때문에 인스턴스 객체를 수정할 수 없다. 클래..
'%cd'와 '!pip'에서 사용되는 '%'와 '!'는 IPython(주피터 노트북에서 주로 사용되는 Python 인터랙티브 쉘)의 특수 명령어 접두사다. 각각은 다른 목적과 기능을 가지고 있다. 1. '%' (매직명령어)'%'는 IPython의 매직 명령어를 나타내며, IPython 자체에 의해 처리된다. 이러한 명령어들은 일반적인 Python 코드와는 다르게 IPython환경을 위해 특별히 제작되었다. 예를 들어, '%cd'명령어는 현재 작업 디렉토리를 변경하는 IPython 매직 명령어이다. 매직 명령어는 IPython에 의해서만 인식되고 실행되며, Python 스크립트상에서는 사용할 수 없다. 2. '!' (시스템명령어)'!'는 주피터 노트북에서 시스템 쉘 명령어를 실행할 때 사용된다. 예를들어,..
loss = nn.CrossEntropyLoss()(preds, label.to(device)) 에러 메세지 : TypeError: cross_entropy_loss(): argument 'input' (position 1) must be Tensor, not NoneType 학습 루프안의 loss를 계산하는 과정에서 첫번째 포지션 인자인 preds가 NoneType이라는 에러로, 모델의 forward 메서드에서 리턴값이 누락된 경우
파이토치(Pytorch)의 기본 데이터 구조인 텐서(Tensor)는 데이터와 gradient계산을 위한 메타데이터를 포함하고 있다. 기본적으로 텐서는 다음과 같은 주요 속성을 갖는다. 1. data 텐서의 주요 구성 요소로, 실제 수치 정보를 저장한다. 데이터는 다양한 차원을 가질 수 있으며, 신경망에서는 주로 벡터, 행렬 또는 더 높은 차원의 배열로 사용한다. 2. dtype 텐서에 저장된 데이터 타입을 정의한다. 예를 들어, 'torch.float32'; 'torch.int64'등이 있다. 3. device 텐서가 어떤 장치(CPU,GPU)에 할당되어 있는지를 나타낸다. 4. requires_grad 이 속성이 'True'로 설정되어 있으면, 텐서에 대한 모든 연산은 자동 미분 시스템에 의해서 추적되..
Neural Net을 학습시킬때 고려해야 할 요소들에 대해서 알아본다. Neural Net을 학습시킬때는 학습 사전에 결정되어 진행되는 것들이 있고 Learning rate schedule과 같이 학습중에 동적으로 변동되는 것들이 있으며 훈련이 모두 마친후 모델 앙상블, 혹은 전이학습(Transfer Learning)과 같이 좀 더 downstream task로 나아가는 방법이 있다. 첫번째로 알아볼 것은 활성화 함수(Activation Function)이다. NeuralNet에서 활성화 함수로서 선택할 수 있는 대표적인 선택지이다. 디테일에 대해서는 지난시간 내용을 다시 참고하길 바란다. 학습시 Acitvation Function을 Sigmoid함수로 설정했을때의 기능에 대해서 알아보자. Sigmoid..