본문 바로가기

전체

(155)
[백준/C++] 1205: 등수구하기 #include using namespace std; int main() { int N, score, P; int rank[100]; //입력단 cin >> N >> score >> P; for (int i = 0; i > rank[i]; } //계산단 int cnt = 0; int my_rank = 1; for (int i = 0; i < N; i++) { if (score < rank[i]) my_rank += 1; else if (score == rank[i]) my_rank = my_rank; else break; cnt++; } if (cnt == P) my_rank = -1; if (N == 0) my_rank = 1; cout
[PyTorch] 시계열 데이터를 위한 1D convolution과 1x1 convolution 오늘은 시계열 데이터처리에 많이 사용되는 1D convolution이 PyTorch에 어떻게 구현되어 있는지와 어떤 파라미터가 존재하는지 차원은 어떻게 계산하는 지를 정리해 보려고 한다. 자꾸 까먹는 나 자신을 위한 포스팅이 될 것 같다. 시작해보자! 간단한 1D convolution 예시 2D convolution이 가로,세로로 모두 이동하면서 output이 계산되는 것과 다르게 1D convolution 연산은 가로로만 이동하면서 output을 계산해낸다. 우리가 알고있는 신호처리에서의 convolution과 다르게 사실은 cross correlation 연산과 같다. 아래의 예시를 계산해보면 쉽게 이해할 수 있다. 직접 계산해보면 금방 이해할 것이다. (여기서 kernel은 filter라고도 부르며..
DFT(Discrete Fourier Transform)와 Circular Convolution DSP를 공부해본 사람이라면 DFT(Discrete Fourier Transform)에 대해 들어본 적이 있을 것이다. DFT는 무엇인가? DTFT와 무엇이 다른가? 여러 궁금증에 앞서 DFT를 이해하기에 앞서 일단 식부터 살펴보고 시작하겠다. x[n]이라는 유한한 길이의 음성신호가 존재할 때, 각주파수(오메가)를 N개로 쪼갠 후 k번째 주파수에 해당하는 변환 값을 찾아내는 것이 DFT결과가 된다. 식을 먼저 소개했고, 자세한 내용은 아래의 설명들을 통해 차근차근 알아보도록하자. 왜 DFT를 하는가? 컴퓨터는 이산적인 값만 처리가 가능하다. 연속시간신호는 시간축(x축)에서 연속적이기 때문에 샘플링을 하여 이산시간 신호를 만들어야한다. 이와 같은 논리로, 이산시간신호에 대한 주파수변환인 DTFT결과를 확인..
[PyTorch] torch.nn.KLDivLoss() 사용법과 예제 어쩌다보니 처음으로 KLDivergence를 loss로 사용하게 되었다. keras에서는 그냥 평범(?)하게 사용했으나 PyTorch에서는 우여곡절 끝에 제대로 loss가 떨어지는 것을 확인했다. 그래서 겸사겸사 기록해둔다. KLDivLoss 선언하기 처음엔 그냥 간단하게 선언을 했으나 reduction이라는 parameter가 mean으로 설정되어있는데 이렇게 설정되어 있으면 진짜 KLDivergence value를 뱉지 않는다고 한다. 그러므로 선언할 때부터 아래와 같이 선언해주어야 한다. 다음 버전에서는 이 부분을 개선하여 업데이트한다고 한다. import torch Loss = torch.nn.KLDivLoss(reduction='batchmean') 모델 정의하기 제대로 된 모델을 정의한 것은 ..
[PyTorch] numpy에서 tensor로 변환: Tensor, from_numpy함수의 차이/tensor에서 numpy로 변환: numpy함수 Numpy에서 Tensor로 PyTorch에서 Numpy array를 Tensor 자료형으로 바꾸는 일은 흔하게 이루어지는 일이다. 나같은 경우 음성신호를 입력으로 받아 Tensor로 변환하여 Dataset을 만드는데 이 연산을 사용한다. PyTorch의 2가지 변환함수와 그 차이점을 설명한다. torch.Tensor() vs torch.from_numpy() torch.Tensor() 는 Numpy array의 사본일 뿐이다. 그래서 tensor의 값을 변경하더라도 Numpy array자체의 값이 달라지지 않는다. 하지만 torch.from_numpy()는 자동으로 input array의 dtype을 상속받고 tensor와 메모리 버퍼를 공유하기 때문에 tensor의 값이 변경되면 Numpy array..
Glow: Generative Flow with Invertible 1X1 convolutions 논문 리뷰 논문은 이곳에 링크를 걸어두겠다. ​동아리에서 논문세미나(WaveGlow)를 했던 내용으로 발표영상도 있으니 참고하면 좋겠다. 순서로는, 생성모델의 종류를 알아본다. flow기반 방법을 이해하기 위한 수학적 근간을 알아본다. flow기반 방법의 수식을 이해해본다. Normalizing flow가 복잡한 분포를 생성해내는 것을 알아본다. Glow가 어떻게 normalizing flow를 구현했는지 model구조를 알아본다. Generative model의 3가지 유형 1. Generative adversarial networks(GAN) GAN은 생성자(generator)와 구분자(discriminator)로 구성되어있다. 구분자는 생성자가 생성해낸 fake sample들로부터 진짜 데이터를 구별하는 일을..
HMM(Hidden Markov Model, 은닉마르코프모델) 원리 저번학기에 머신러닝과딥러닝수업을 들으면서 배웠던 내용을 정리하면서 하나씩 포스팅을 한게 꽤 많이 쌓였다. HMM같은 경우에는 따로 수업에서 다루지는 않았지만, sequential한 데이터의 classifiation에서 많이 쓰이던 모델이여서 한번 정리해보려고 한다. 이곳과 이곳을 참고해 정리한 내용이다. 음성 = sequential data이므로 HMM을 모델로 쓴 예전논문이 많은 것 같다. 하지만 한번도 처음부터 끝까지 공부해본적은 없다...하하하 사실 처음보면 한눈에 어려워서 포기하고싶은 HMM..... 그래도 차근차근 정리해보겠다!! 마르코프모델이 무엇인지에서 출발해서 HMM으로 어떤문제를 풀 수 있는지까지 다뤄보자. MM(Morkov Model)이란? Markov model의 핵심은 현재의 obs..
GMM(Gaussian Mixture Model,가우시안 혼합모델) 원리 개인공부용 블로그로 이곳의 내용에 개인적으로 추가정리하였다. 가우시안 분포는 데이터를 분석하는 데 있어서 중요한 여러 성질을 가지고 있지만, 실제 데이터셋을 모델링 하는데에는 한계가 있다.(어떻게 모든 데이터가 종모양분포를 띄겠나...) 그래서 나오게 된 것이 Gaussian Mixture Model(GMM)인데, 여기서 mixture model이라는 것의 뜻은 기본분포를 선형결합해서 만든 분포라는 뜻이다. 그러므로 GMM은 가우시안분포를 선형결합하여 만들어진 분포를 뜻한다. (이런식으로 모델을 딱 가정해버리면 모델에 들어가는 파라미터를 찾는 식으로 밀도를 추정하게 된다. 만약 모델을 가정하지 않는다면, non-parametric하게 밀도를 추정하게 된다. ex.커널밀도추정) 예를들어 위의 오른쪽 그림과..