자주 까먹어서 이번 기회에 깔끔하게 정리해보려고 한다. 이 포스팅은 github desktop이나 vscode의 gitlens 와 같은 프로그램 도움 없이 오직 cmd 창에서 깃을 관리하는 경우라 가정한다. 용어 정리 - logal repository : 내 컴퓨터 안에서 작업하는 폴더 - remote repository(원격저장소) : github 주소, 원격지 주소 가장 기본 설정 : 사용자 인식 -> 초기 한 번만 하면 됨 - git config --global user.name 깃허브아이디 - git config --global user.email 깃허브이메일주소 github repository와 내 컴퓨터에 작업 폴더 생성 후 clone github에 들어가서 작업할 repo를 만들고, 그 re..
딥러닝 공부를 하면서 정말 헷갈렸던 것들을 다시 공부해서 정리해보겠다. 잘못된 정보가 있으면 댓글로 지적 부탁드립니다 ^_^ 딥러닝 모델에서 feature, 가중치 노드 수가 의미하는 것? MLP에서 한 레이어에서 다음 레이어로 넘어갈 때 각 노드는 이전 노드의 XW + B(W : 가중치, B : 편향)의 값을 전달받다. 이때 X 는 사용할 데이터의 feature 값이되고 W와 B는 모델이 스스로 학습할 가중치/편향이 된다. 또한 특정 에폭에서 모델을 저장하는 것은 그때 만들어진 가중치와 편향을 저장하는 것이다. 따라서 각 레이어에 들어있는 노드 수는 feature의 개수와 같으며 신경망의 학습은 데이터를 잘 이해/분류할 수 있도록 feature을 추출해내는 weight를 학습시키는 것이라 할 수 있다...
OpenCV에서 자체적으로 지니고 있는 마우스 이벤트를 활용하여 마우스로 클릭한 지점의 좌표를 찾는 코드를 짜보자. 마우스 이벤트는 cv.setMouseCallback 함수를 통해 마우스 이벤트를 처리할 Window에 등록된다. setMouseCallback 함수가 호출되었을 때 어떤 행동을 취할지는 사용자가 커스텀할 수 있는데, 이번에는 mouse_callback 이라는 함수를 만들어 마우스 왼쪽버튼을 클릭했을 때의 좌표를 저장하도록 작성했다. 이 코드를 이미지 상 특정 부분의 좌표를 찾는 데 활용할 계획이라, opencv가 폴더 안에 들어있는 모든 이미지들을 순회하도록 하였고 클릭한 지점의 x,y좌표는 따로 저장해 두었다(x_points, y_points). 여러 이미지를 순회할 때, 한 이미지에서의..
이번 프로젝트에는 주어진 이미지를 보고 거북목인지 아닌지를 판단하는 모델이 필요하다. 지난 주, 각 팀원들마다 1,000장의 이미지를 모아 총 4,000장의 이미지 데이터셋을 만들었다. 이제 여러 딥러닝 모델을 학습시켜보면서 우리의 데이터셋을 가장 잘 판별해주는 모델을 찾아야 한다. 내가 맡게 된 CNN 모델은 마이크로소프트가 2015년 ILSVRC 대회에서 제안하여 1위를 차지한 ResNet이다. 아마 전이학습으로 파이토치에서 제공해주는 모델을 그대로 가져와 마지막 레이어만 추가해서 사용할 것 같긴한데, 그래도 ResNet이 어떤 구조로 이루어져 있는지 어떤 특징이 있는지에 대해서는 짚고 넘어가야 할 것 같아 이 포스팅을 쓰게 되었다. 총 2개의 포스트로 나뉠 것 같다. 이번 포스트에서는 ResNet과..
도전 1 문제 : 길이가 10인 배열에 10개의 정수를 입력받아서 홀수와 짝수를 구분 지어 출력하는 프로그램을 작성하자. 코드 출력 결과 도전 2 문제 : 사용자로부터 10진수 형태로 정수를 입력받고 이를 2진수로 변환해서 출력하는 프로그램을 작성하자. 코드 출력 결과 도전 3 문제 : 길이가 10인 배열을 선언하고 총 10개의 정수를 입력받는다. 단, 입력 받은 숫자가 홀수이면 배열의 앞에서부터 채워나가고, 짝수이면 뒤에서부터 채워나가는 형식을 취하기로 한다. 코드 : 짝수의 인덱스를 나타내는 Even, 홀수의 인덱스를 나타내는 Odd 변수를 준비한다. 입력받는 즉시 해당 값의 짝수/홀수 유무를 판단한 후에 배열의 특정 인덱스에 위치하도록 값을 저장한다. 출력 결과 도전 4 문제 : 회문은 앞으로 읽으..
+) CNN에 대한 추가 설명은 이 포스팅을 참고. CNN의 연산과정에 대한 구체적인 설명이 담겨있음 - 이미지를 분류하는 모델을 만들고자 할 때 CNN과 MLP의 큰 차이점은 Feature를 어떻게 추출하느냐에 있다. MLP는 이미지의 픽셀값을 바로 네트워크의 Input으로 사용하는 것이고 CNN은 Convolution Layer와 Pooling Layer를 이용하여 이미지의 Region Feature를 추출하고 그 feature를 MLP의 인풋으로 사용한다. - 그러니까 컴퓨터비전에서 CNN의 성능이 좋은 이유는 단지 Region Feature를 추출할 수 있기 때문인 것이다. - CNN은 MLP와 같이 계층을 조합하여 만들 수 있다. 다만, 합성곱 계층(convolutional layer)과 풀링 ..
AutoEncoder 오토인코더는 비지도학습 인공지능이다. 즉, 입력 데이터를 가공하여 목표값을 출력하는 방식이 아니라, 레이블 정보가 없는 데이터 특성을 분석하거나 추출하는 방식이다. AE는 입력과 출력이 동일하며 좌우를 대칭으로 구축된 구조를 지닌다. 비지도 학습 문제를 지도 학습 문제로 바꾸어서 해결한 방법이라 불리기도 한다. 중간에 위치한 Hidden Layer의 앞부분을 '인코더', 뒷부분을 '디코더'라 한다. 오토인코더는 Input data에 대해 Hidden layer로 인코딩(압축)한 후 다시 원래 Input Data로 디코딩(복원)하는 개념이라 볼 수 있다. AE를 활용하면 Input Data를 Latent Space에 압축시켜 이 값을 새로운 Feature로 사용할 수 있다. 이 새로운..
Initialization(초기화) 신경망은 처음에 Weight를 랜덤하게 초기화하고 Loss가 최소화되는 부분을 찾아간다. 이때 Weight를 랜덤하게 초기화하면 신경망의 초기 Loss값도 랜덤하게 달라지게 되는데, 최적의 Loss를 찾기 위해서는 Weight를 어떻게 초기화하는 지가 중요하다. 초기화 기법으로는 LeCun Normal Initialization, LeCun Uniform Initialization, Xavier Initialization, He Initialization 등이 있다. 이에 대해서는 책에 자세하게 안나와있다... 그래서 갖고있는 다른 교재를 참고하여 초기화 기법에 대해서 짧게 정리해보자면 - Xavier Initialization : 표준편차가 1/루트n(n = 앞 층의..
Dropout 정의 : 신경망의 학습 과정 중 Layer의 노드를 랜던함게 Drop함으로써 Generallization 효과를 가져오게 하는 테크닉. 과적합을 어느 정도 방지할 수 있음.적용 : Weight Matrix에 랜덤하게 일부 Column에 0을 집어넣어 연산. 적용시 얼마나 랜덤하게 Dropout할 것인지에 대한 확률값을 지정해야 하며 이는 Input Layer와 Hidden Layer에도 적용할 수 있음. 또한 Epoch마다 랜덤하게 Dropout함. MNIST MLP모델 설계시 Dropout 적용하기 지난번 MNIST 데이터 셋을 활용한 MLP모델 설계 예제(여기 참고)를 아주 조금 수정하여 파이토치를 활용한 Dropout 실습을 진행해보겠다. 수정할 부분은 5. MLP 모델 설계하기 단계..
위 포스트는 정보문화사에서 출판한 책 '파이썬 딥러닝 파이토치'를 바탕으로 작성되었습니다. MLP MLP는 여러 개의 퍼셉트론 조합과 이것들의 재조합으로 복잡한 비선형적인 모형을 만들어내는 것을 말한다. MLP의 Hidden Layer를 쌓으면 Layer가 깊어지기 때문에 MLP는 딥러닝의 기본적인 모델이 된다. 이 신경망은 Input에서 Weight와 Hidden을 거쳐 Output을 내보내는데, 이 과정을 'Feed Forward'라 한다. Back Porapagation Feed Forward를 이용해 계산하는 output은 우리가 얻고자 하는 예측 값이다. 이 예측값과 실제값의 차이(ERROR)를 계산하고, 이를 바탕으로 신경망의 Weight를 업데이트한다. 이 과정이 바로 'Back Propag..