데이터분석 167

[개념] 합성곱, 컨볼루션 - convolution

합성곱은 하나의 함수와 또 다른 함수를 반전 이동한 값을 곱한 다음, 구간에 대해 적분하여 새로운 함수를 구하는 수학 연산자이다.합성곱 신경망 알고리즘은 합성곱 신경망(Convolutional Neural Network, CNN)은 최소한의 전처리(preprocess)를 사용하도록 설계된 다계층 퍼셉트론(multilayer perceptrons)의 한 종류이다. CNN은 하나 또는 여러개의 합성곱 계층과 그 위에 올려진 일반적인 인공 신경망 계층들로 이루어져 있으며, 가중치와 통합 계층(pooling layer)들을 추가로 활용한다. 이러한 구조 덕분에 CNN은 2차원 구조의 입력 데이터를 충분히 활용할 수 있다. 다른 딥 러닝 구조들과 비교해서, CNN은 영상, 음성 분야 모두에서 좋은 성능을 보여준다..

① 파이썬 - 컴퓨터 비전 프로그래밍 (Basic Image Handling and Processing) (2)

중딩때 포샵질좀 해봤을만한 필터를 한번 적용시켜보자 필터에 대한 적용은 scipy.ndimage 에 있고, 참조 라이브러리는 다음과 같다. http://docs.scipy.org/doc/scipy/reference/ndimage.html - 가우시안 필터 시그마 값의 크기에 따라 흐려지는 필터가 적용되는게 다르다. gaussian_filter.pyfrom PIL import Image from numpy import * from scipy.ndimage import filters original = array(Image.open('image.PNG').convert('L')) filtered = filters.gaussian_filter(original,5) Image.fromarray(filtered)..

① 파이썬 - 컴퓨터 비전 프로그래밍 (Basic Image Handling and Processing) (1)

본 글은 Programming Computer Vision with Python (Jan Erik Solem) 을 그대로 따라간거임. ① Basic Image Handling and Processing ② Local Image Descriptor ③ Image to Image Mappings ④ Camera Models and Augmented Reality ⑤ Multiple View Geometry ⑥ Clustering Images ⑦ Searching Images ⑧ Classifying Image Content ⑨ Image Segmentation ⑩ OpenCV 파이썬과 라이브러리 설치 일단 이것저것 라이브러리 깔기가 귀찮으니, 아나콘다로 한방에 패키지 설치를 끝낸다. 파이썬 3.4는 그다지 ..

일반인들을 위한 머신러닝 (6) - 신경망 알고리즘

그렇다면, 여러가지 수학식이 있고 충분히 이를 통해 학습된 결과식을 받아볼수 있는데 대체 이 신경망 알고리즘은 무엇인가? 기계학습 + 신경망 이라면 굉장히 있어보인다. 따라서 적어본다.위와같은 분포를 따라 식을 세우고 싶으면, 상당히 복잡할수 있다. 현재는 x1, x2 두 변수에 대해서만 그래프로 나타내고 있는데, 이를 식으로 나타내보면 다음과 같다.$$수식$$혹시 이 두개의 변수를 벗어나 세개..네개..다섯개.. 점점 많아진다면 이제는 삼차원 그래프로도 나타내기도 어렵고 실제로 식으로도 나타내기 힘들다. 대체 나타낼 방도도 없고 파악해봤자 별로 눈에 딱들어오지도 않아서 그다지 무쓸모일 가능성이 크다. 게다가 데이터가 굉장히 커지면 이를 계산하는데도 상당히 많은 컴퓨팅파워가 소모될수 있다. 신경망 알고리..

신경망과 인공지능 (예쁜꼬마선충)

사람들에 많은 노벨상을 안겨준 세상에서 제일 간단한 생물체가 있다. 바로 예쁜꼬마선충이다. 예쁜꼬마선충은 그 단순함에도 불구하고 생물이라는 장점으로 수많은 사람들의 연구대상이 되어왔고, 1900년대부터 참으로 많은 사람에게 그 몸체를 다 잘려와서 구조가 다 드러났다. 이 300여개 되는 신경망을 지도로 그려낸 용자가 있는데, 이로부터 몇십년 후, 나같이 집에서 컴퓨터나 만지고 있는 할일없는 사람들은 이를 레고로봇으로 재현해냈다. 이 레고로봇은 인위적인 알고리즘이 아닌 본인의 선택과 연결상태에 따라 행동을 결정하며, 이는 오리지널 예쁜꼬마선충의 원시적인 몸짓과 크게 다르지 않다. 과연 이 로봇은 생물체인가 아닌가? 사실 머신러닝(패턴인식)쪽의 신경망은 위의 생물체가 신경을 통해 움직이는 일과는 조금 다른 ..

머신러닝 전용 프로그래밍 툴 Octave 튜토리얼 - (3) 그래프

간단한 sin 그래프를 그려보자. 자 이제 이런 상태로 다음 명령어를 쳐본다. 이제 그래프가 윈도우 창에 고정이 된 상태이다. 이 상태로 plot을 추가로 그려볼수있다. 빨간색으로 그려보자. r 은 빨간색으로 그리면 된다. 그래프에는 몇가지 세팅을 할수 있는데, 레이블 설정과 제목 설정을 할수있다. 마지막으로 그림을 저장할수 있다. figure(2)로 하면 새로 창이 하나 더 뜬다. 윈도우 창 이름이 figure 1인것을 자세히 보면 감이 온다. 이상태에서는 다음과 같이 바뀐다. 그레이스케일로 바꿔볼수도 있을까? 위와같이 된다.

머신러닝 전용 프로그래밍 툴 Octave 튜토리얼 - (2)

행렬의 크기를 알아내고 싶으면 아래와 같이 length()size()를 이용하면 된다. 시스템 명령어 pwd - 현재 디렉토리를 알아낸다. cd - 디렉토리를 변경한다.ls - 리눅스 명령어와 같다. load - 파일을 로드해서 변수에 저장한다.who - 어떤 변수가 선언되어 메모리를 차지하고 있는지 볼수있다.whos - 더 자세한 데이터의 선언형태를 볼수있다.clear - 메모리를 비워서 없애버린다.save hello.mat v - v를 hello.mat파일로 저장한다. (텍스트로 저장하려면 -ascii 옵션을 붙인다.)val(1,1) - 1,1번 놈을 부른다. val(1,:) - :은 모든놈이라는 뜻으로, 이렇게 하면 해당하는 행을 부른다.val([1 3], :) - 이렇게는 첫번째 세번째 행을 불러..

머신러닝 전용 프로그래밍 툴 Octave 튜토리얼 - (1)

Octave는 굉장히 들어보지도 못한 듣보잡 언어지만, 머신러닝계에서는 무엇인가 프로젝트를 할때 쉽게 프로토타입을 띄우는 용으로 상당히 생산적이라고 한다. 보통 머신러닝계에서는 Ocatave MATLAB 같은 전용 툴이나 Python(Numpy) R 같은 범용적 툴을 쓰는데, Octave는 상당히 생산적이라고 계속 강조한다. 자세한 설명은 wiki에 있다. https://ko.wikipedia.org/wiki/GNU_%EC%98%A5%ED%83%80%EB%B8%8C 윈도우즈용 설치파일은 다음과 같다. (상위디렉토리는 tar.gz 파일임) ftp://ftp.gnu.org/gnu/octave/windows/ 이제 모든걸 설치했으니 간단한 연산을 해볼수있다. 이상하게 Octave의 시작은 역시 행렬과 벡터인데..

일반인을 위한 머신러닝(4) - 선형대수

머신러닝을 더욱 쉽게 이해하기 위해서는, 선형대수(Linear Algebra)에 대한 이해가 선행되어야 한다. 문과생들이라면 아예 귓동냥으로만 들어봤지 아예 생소한 과목일지도 모르겠는데 '모든 수학과 공학의 뼈대' 라고 부르는 공대과목의 꽃이라고 한다. 따라서 대충 아무 공대생들이 모두 아는 쉬운 개념이라고 생각하고 접근해보자. 사실 수학이 레벨업이 될수록, 고등학교때 한번씩 짚어봤던 문제를 조금 더 어렵고 있어보이는 단어로 바꾸고 추상적인 개념으로 바꾸는 과정이라고 할수 있을터인데, 마찬가지로 이 포스팅에서도 직관적으로 아는 시시한 개념이 어떻게 모르는 단어로 그럴듯하게 포장되어있는지에 대해 최대한 간단하게 이해만 하고 넘어가면 될것이다. 일단 행렬(Matrix)에 대한 이해가 필요하다. 행렬은 데이터..