프로그래밍 Programming
서포터 벡터 머신과 이미지 인식 (3) - 서포트 벡터 머신 훈련 (1)
2016. 11. 6.서포터 벡터 머신과 이미지 인식 (3) - 서포트 벡터 머신 훈련 (1) 서포트 벡터 머신 훈련 scikit-learn 의 SVM 을 사용하기 위해 sklearn.svm 모듈에서 SVC 클래스를 임포트한다. SVC를 초기화할 때는 중요한 매개변수를 가진다. 분류기에서 사용하는 커널 함수를 정의하는 kernel 이다(커널 함수는 인스턴스 간의 유사도 측정을 다르게 한다). 가장 간단한 커널이 linear을 사용하자. 12>>> from sklearn.svm import SVC>>> svc_1 = SVC(kernel='linear')cs 데이터셋을 훈련 데이터와 테스트 데이터로 구분한다. 12>>> from sklearn.cross_validation import train_test_split>>> X_tr..
서포터 벡터 머신과 이미지 인식 (2) - 이미지 픽셀을 사용한 학습
2016. 11. 6.서포터 벡터 머신과 이미지 인식 (2) 접근법 1 - 학습 알고리즘에 대해 속성으로 이미지 픽셀을 사용하도록 하는 작업SVM은 매우 커다란 차원 공간을 가지는 이미지 인식에 적용할 수 있다(이미지 각 픽셀의 값을 속성으로 고려한다). 사람의 얼굴을 고려해 그 사람이 속한 리스트를 예측하는 것이다. 여기서 학습 데이터는 레이블된 사람 얼굴 이미지인 인스턴스 그룹이고, 보지 못한 새로운 인스턴스의 레이블을 예측하는 모델을 학습시킨다. 픽셀값 → 학습속성개별 레이블 → 목적 범주 데이터셋을 가져와서 출력해보자. 아래는 해당 데이터셋에 대한 설명 출력이다. 123456789101112131415161718192021222324252627>>> import sklearn as sk>>> import numpy a..
서포터 벡터 머신과 이미지 인식 (1) - 정의 및 장점
2016. 11. 6.서포터 벡터 머신과 이미지 인식 (1) - 정의 및 장점 서포터 벡터 머신(SVM, Support Vector Machine) 이란?데이터셋의 인스턴스가 다차원 공간의 점이라고 생각할 때, 서로 다른 범주에 속한 인스턴스 간의 거리를 최대한 크게 만드는 인스턴스들을 선택하는 방법으로 초평면을 얻는 지도 학습 기법으로 새 인스턴스는 놓여진 초평면의 축을 기반으로 특정범주로 분류된다 위의 이미지를 보면 빨간색 초평면과 파란색 초평면은 오류 없이 흑/백을 구별하지만, 이 중 빨간색 초평면이 최대한 넓은 폭으로 두 범주를 구별한다. 두 범주에서 가까운 인스턴스간 거리가 가장 먼 초평면이다. 이러한 접근법은 일반화 오차를 낮추고 모델이 과적합화되지 않도록 하는 장점이 있다.※ 이러한 접근법은 고차원 속성 공간으로..
scikit-learn (3) - 선형분류 (결과평가)
2016. 11. 6.scikit-learn (3) - 선형분류 (결과평가) 1. 예측하기꽃받침 너비가 4.7이고 꽃받침 길이가 3.1인 새로운 꽃이 있다고 가정하고, 이 꽃의 범주를 예측해보자. 예측 메소드는 인스턴스 배열을 입력받고, 예측 범주의 리스트를 반환한다. 다음과 같다12>>> print clf.predict(scaler.transform([4.7, 3.1]))[0]Colored by Color Scriptercs분류기가 정확했다면, 이 꽃의 범주는 세토사이다. 앞선 포스팅에서 선형 모델은 두 개의 분류를 나누는 것을 기억했다. 그러므로 예측절차는 세 개 이진 분류기의 결과를 합하고 좀 더 확실한 범주를 선택한다. 이 경우 인스턴스에서 멀리 떨어진 경계선을 선택한다. 분류기의 decision_function 메소..
scikit-learn (2) - 선형분류 (훈련데이터 만들기)
2016. 11. 6.scikit-learn (2) - 선형분류 (훈련데이터 만들기) 1. 훈련데이터셋 만들기이 문제는 속성에 따라 인스턴스의 레이블을 지정하는 분류 문제의 한 종류이다. 선택한 두 속성과 목적값으로 만든 본래 데이터셋의 일부 데이터이다. 데이터셋을 임포트한 후 약 75%의 인스턴스를 무작위로 선택하고 남은 인스턴스를 평가 목적을 위해 보유한다.12345678910111213141516>>> from sklearn import datasets>>> iris = datasets.load_iris()>>> X_iris, y_iris = iris.data, iris.target>>> print X_iris.shape, y_iris.shape (150, 4) (150,) >>> from sklearn.cross_va..
matplotlib - <matplotlib.text.Text at 0x7fc3298533d0>
2016. 11. 3.쥬피터 노트북에서 다음과 같이 그래프가 보이지 않는 경우 sklearn_1 In [3]: # 속성을 표준화한다 scaler = preprocessing.StandardScaler().fit(X_train) X_train = scaler.transform(X_train) X_test = scaler.transform(X_test) In [4]: import matplotlib.pyplot as plt colors = ['red', 'greenyellow', 'blue'] for i in xrange(len(colors)): xs = X_train[:,0][y_train == i] ys = X_train[:,1][y_train == i] plt.scatter(xs, ys, c=colors[i]) plt.le..
Jupyter Notebook 셀 크기 조절하기 How to increase/decrease the cell width of the jupyter notebook in browser
2016. 11. 3.Jupyter Notebook 셀 크기 조절하기How to increase/decrease the cell width of the jupyter notebook in browser 아래와 같이 쥬피터 노트북의 소스를 블로그 등에 html 형태로 가져올 때 가로폭이 너무 커서 아래와 같이 스크롤이 생기는 경우가 있다. 한 눈에 볼 수 있도록 창의 크기를 조절해보자. 1. 먼저 Jupyter Notebook 디렉터리를 찾는다. 123(tensorflow)root@localhost:~# jupyter --config-dir/root/.jupyter Colored by Color Scriptercs 2. 해당 디렉토리에 custom 디렉터리를 만들고 아래와 같은 custom.css 파일을 만든다.(width 는..
scikit-learn (1) - 기계학습이란?
2016. 11. 1.scikit-learn (1) - 기계학습이란? 1. 기계학습의 3가지 개념1) 태스크(T)를 해결하기 위해 학습해야 한다2) 태스크를 실행하기 위해 학습할 일부 경험(E)이 필요하다(데이터셋을 통해 표현된다) 3)얼마나 태스크를 잘 해결했는지 파악하기 위한 성능(P)을 측정할 필요가 있다 2. 기계학습기법은 보통 데이터셋으로 대표되는 과거 경험에 의존한다. 본 포스팅에서는 로널드 피셔가 소개한 아이리스 꽃 데이터셋을 사용한다. 해당 데이터셋에는 4개의 속성, 150개의 원소(인스턴스)가 있다. Iris flower data set https://en.wikipedia.org/wiki/Iris_flower_data_set Fisher's Iris Data Sepal length Sepal width Pe..
scikit-learn 을 통한 머신러닝 - 데이터셋 로딩, 학습, 그리고 예측
2016. 10. 31.scikit-learn 을 통한 머신러닝 - 데이터셋 로딩, 학습, 그리고 예측 scikit-learn 을 통한 간단한 머신러닝에 대해 알아본다. 1. 예제 데이터셋 로딩다음과 같이 iris 와 digits 데이터셋을 로딩한다. 123from sklearn import datasetsiris = datasets.load_iris()digits = datasets.load_digits()cs데이터셋은 데이터와 데이터에 대한 메타 데이터를 가지고 있는 일종의 딕셔너리같은 오브젝트이다. 데이터는 .data 로 저장되고, n_samples, n_features 배열을 가진다. 지도학습의 경우, 하나 또는 그 이상의 대응하는 변수가 .target 으로 저장된다. 숫자 데이터셋의 경우, digits.data를 통해..
텐서보드 사용법
2016. 10. 31.텐서보드는 텐스플로우 실행을 통해 생성할 수 있는 요약 데이터를 가지고 있는 텐서플로우 이벤트 파일을 읽음으로써 작동한다. 텐서보드 설치 위치 1/root/anaconda/envs/tensorflow/lib/python2.7/site-packages/tensorflow/tensorboardcs 텐서보드 실행은 다음과 같이 한다. 기본 포트는 6006 이다. 12345(tensorflow)root@localhost:~/tensorflow# tensorboard --logdir=tmp/tf_logsWARNING:tensorflow:IOError [Errno 2] No such file or directory: '/root/anaconda/envs/tensorflow/lib/python2.7/site-pack..
텐서플로우 코드 에러 - ResourceExhaustedError
2016. 10. 31.Deep MNIST for Experts 튜토리얼 실행시 발생할 수 있는 텐서플로우 코드 에러 ResourceExhaustedError 가 발생하는 경우 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120step 18500, training accuracy 1step 18600, training accuracy..
Deep MNIST for Experts - 전체 코드 (2)
2016. 10. 31.텐서플로우 첫걸음에 나오는 전체 코드입니다. 구글 홈페이지 튜토리얼과는 다소 다르네요. mnist_for_expert-1 In [1]: from tensorflow.examples.tutorials.mnist import input_data mnist = input_data.read_data_sets('MNIST_data/', one_hot=True) Extracting MNIST_data/train-images-idx3-ubyte.gz Extracting MNIST_data/train-labels-idx1-ubyte.gz Extracting MNIST_data/t10k-images-idx3-ubyte.gz Extracting MNIST_data/t10k-labels-idx1-ubyte.gz In [2]..
Deep MNIST for Experts - 전체 코드 (1)
2016. 10. 31.mnist_for_expert In [1]: import tensorflow as tf sess = tf.InteractiveSession() In [ ]: def weight_variable(shape): initial = tf.truncated_normal(shape, stddev=0.1) return tf.Variable(initial) def bias_variable(shape): initial = tf.constant(0.1, shape=shape) return tf.Variable(initial) In [3]: x = tf.placeholder(tf.float32, [None, 784]) In [4]: W = tf.Variable(tf.zeros([784, 10])) b = tf.Variabl..
텐서플로우 코드 에러 - FailedPreconditionError
2016. 10. 30.Deep MNIST for Experts 튜토리얼 실행시 발생할 수 있는 텐서플로우 코드 에러 FailedPreconditionError 가 발생하는 경우123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117for i in range(20000): batch = mnist.train.next_batch(50) if i%100 ==..
텐서플로우 코드 에러 - Cannot evaluate tensor using `eval()`
2016. 10. 30.Deep MNIST for Experts 튜토리얼 실행시 발생할 수 있는 텐서플로우 코드 에러 value error 가 발생하는 경우 12345678910111213141516171819202122232425262728293031for i in range(20000): batch = mnist.train.next_batch(50) if i%100 == 0: train_accuracy = accuracy.eval(feed_dict={x:batch[0], y_: batch[1], keep_prob: 1.0}) print "step %d, training accuracy %g" % (i, train_accuracy) train_step.run(feed_dict={x: batch[0], y_: batch[1],..
주피터 노트북 html 파일로 변환하기 How to copy/paste from IPython Notebook to other format
2016. 10. 29.다음과 같이 주피터 노트북의 데이터프레임을 html 포맷으로 변환할 수 있다.123(tensorflow)root@localhost:~/tensorflow# jupyter nbconvert mnist_for_beginner.ipynb[NbConvertApp] Converting notebook mnist_for_beginner.ipynb to html[NbConvertApp] Writing 260242 bytes to mnist_for_beginner.htmlcs 변환 관련 옵션 및 예제 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566..
텐서플로우 따라잡기 MNIST For ML Beginners (3) -Training & Evaluating Our Model
2016. 10. 29.MNIST For ML Beginners (3) -Training & Evaluating Our Model 모델을 훈련시키기 위해, 먼저 모델에게 좋다는 것이 무엇을 의미하는 것인지부터 정의해야한다. 사실 머신러닝에서는 전통적으로 모델에게 나쁜 것 - 통상 cost 혹은 loss 라고 부른다 - 을 정의하곤 하는데, 이는 우리가 만든 모델이 우리가 의도하는 결과에서 얼마나 떨어져있는가를 나타내는 것이다. 에러의 오차를 줄일수록, 모델은 훌륭해진다. 모델이 가진 loss 를 정의하는 좋은 지표중의 하나는 "cross-entropy" 라고 불리는 것이다. Cross-entropy는 우리의 예측이 얼마나 비효율적인지를 측정해주는 도구로서, 관심이 있으신 분들은 다음 링크를 통해 자세한 내용을 찾아볼 수 있다...
텐서플로우 따라잡기 MNIST For ML Beginners (2) - Implementing the Regression
2016. 10. 29.MNIST For ML Beginners (2) - Implementing the Regression 텐서플로우를 사용하기 위해 먼저 임포트한다. 1import tensorflow as tfcs 아래와 같이 변수를 생성하자.1x = tf.placeholder(tf.float32, [None, 784])cs 여기서 x 는 특정 값이 아니다. x는 placeholder라는 것으로 텐서플로우로 하여금 연산을 하도록 요청할 때 우리가 입력하게 되는 값이다. MNIST 이미지의 어떤 수라도 입력할 수 있도록 우리는 이것을 [None, 784] 형태를 가진 부동소수점수의 2-D 텐서로 표현할 것이다(여기서 None 이 의미하는 것은 어떤 값이라도 될 수 있다는 것이다). 그리고 가중치와 편향 역시 필요하다. 이 요..
텐서플로우 따라잡기 MNIST For ML Beginners (1)
2016. 10. 29.MNIST For ML Beginners (1) MNIST 는 Mixed National Institute of Standards and Technology 의 약어로, 아래의 손글씨 이미지 등을 포함한 시각 데이터 셋이다. 이미지와 각각의 이미지에 대한 레이블을 포함하고 있다. 예를 들어, 위의 이미지의 레이블은 각각 5, 0, 4, 그리고 1이다. 본 게시물에서는 이러한 이미지를 관찰하고 숫자를 맞추는 모델을 트레이닝함으로써 텐서플로에 발을 딛는 것을 목표로 한다. 소프트맥스 회귀(Softmax Regression)라고 불리는 간단한 모델로부터 시작한다. 아래와 같이 실습에 필요한 파일을 적당한 위치에 다운로드한다. 앞에서도 언급했지만 MNIST 데이터는 수기 이미지와 그에 대응하는 레이블 이상의 2..
원격지 주피터 노트북 로컬에서 실행하기 Remote Access to Jupyter Notebook via SSHRemote Access to Jupyter Notebook via SSH
2016. 10. 28.원격지 주피터 노트북 로컬에서 실행하기 Remote Access to Jupyter Notebook via SSH 로컬호스트에서 원격지에서 구동중인 Jupyter Notebook 을 실행해보자. 1. 원격지에서 아래와 같이 Ipython notebook 을 실행한다. 원격지에서 브라우저를 띄울 필요는 없으므로 --no-browser 플래그를 추가한다. 해당 포트 방화벽 정책 적용 여부도 확인해본다.12345678(tensorflow)root@localhost:~# ipython notebook --no-browser --port=8889[TerminalIPythonApp] WARNING | Subcommand `ipython notebook` is deprecated and will be removed ..
아나콘다 환경에서의 텐서플로 설치 (Anaconda+Ubuntu+CPU Only)
2016. 10. 26.텐서플로는 구글이 오픈소스로 공개한 차세대 딥 러닝 시스템이다. 텐서플로는 데이터 플로우 그래프를 사용하여 수치 연산을 하는 라이브러리라고 볼 수 있다. 그래프의 노드는 수학 연산을 나타내고, 노드를 연결하는 그래프의 에지는 다차원 데이터 배열을 나타낸다. 1. 설치환경포스팅에 언급된 환경은 Ubuntu 14.04 LTS x64 + CPU Only 기반이다(아래와 같이 그래픽카드 확인해본 결과 GPU 가 아니라 CPU Only 였다).* 리눅스에서 하드웨어를 확인하는 명령은 다음 사이트를 참고한다. http://blog.simplism.kr/?p=1778 12root@localhost:~# lspci | grep VGA00:02.0 VGA compatible controller: Cirrus Logic ..
Eclipse에서의 Git 사용 - (3) Github 연결
2016. 10. 22.Eclipse에서의 Git 사용 - (3) Github 연결 1. github repository 생성https://github.com/new 에서 아래와 같이 저장소를 생성한다. 2. Eclipse Git repositories perspective 로 전환이클립스로 돌아와 Git repositories perspective 로 전환한 후 해당 프로젝트 Remotes > Create Remote > URI Change > Location URI 에서 앞서 생성한 github 저장소의 주소를 입력한다. 하단의 인증정보 입력란에 github 계정 정보를 입력한다. Configure Push > Advanced... > Add All Branches Spec 클릭 > Save and Push master [..
guessing_game 민들기 - (3) Looping
2016. 10. 19.1. 반복문 만들기 현재까지는 정답을 맞출 때까지 질문이 이어지지 않고 1회성으로 끝난다. 이제 필요한 것은 이 과정을 반복작업으로 만드는 것이다. 아래를 보자. 123456789101112131415161718192021222324252627282930313233extern crate rand; use std::io;use std::cmp::Ordering;use rand::Rng; fn main() { println!("Guess the number!"); let secret_number = rand::thread_rng().gen_range(1, 101); println!("The secret number is: {}", secret_number); loop { println!("Please inp..
guessing_game 민들기 - (2) Generating a secret number
2016. 10. 18.1. 난수 발생기 다음으로 해야할 일은 비밀 숫자를 만들어내는 것이다. Rust 는 아직까지는 난수를 발생하는 기능을 표준 라이브러리에 포함하지 않고 있다. 하지만 rand crate 를 제공하고 있으므로, 이 패키지를 이용하면 된다. 외부 크레이트를 사용하기 위해서는 Cargo.toml 을 수정해야 한다. 파일을 오픈하고 dependencies 아래에 아래와 같이 rand 크레이트의 정보를 입력해주면 된다. [dependencies] rand="0.3.0" Cargo.toml 파일의 [dependencies] 는 일종의 패키지와 같다. Cargo 는 dependencies 섹션을 통해 어떤 외부 크레이트와 크레이트의 버전을 요구하는지 파악한다. 이 경우 0.3.0 이 의미하는 것은 0.3.0 과 호환되..
guessing_game 민들기 - (1) Processing a Guess
2016. 10. 18.사용자가 정답을 추측하는 Guessing game 을 만들어보자. 1. 아래와 같이 새로운 프로젝트(guessing_game)을 생성한다. cargo new 명령을 통해서 새로운 cargo 프로젝트를 명명하고, 바이너리임을 나타내는 --bin 플래그를 붙인다.123456789101112131415161718192021bourne@vikander MINGW64 ~/Evariste/workspace (master)$ cd rust-projects bourne@vikander MINGW64 ~/Evariste/workspace/rust-projects (master)$ cargo new guessing_game --bin Created binary (application) `guessing_game` proj..
Eclipse에서의 Git 사용 - (2) 커밋
2016. 10. 16.Eclipse에서의 Git 사용 - (2) 커밋 1. 예제로 사용할 C++프로그램을 만들어보자. 방금 작성한 파일에서 마우스 오른쪽 버튼을 클릭한 후 Team > Commit 를 선택한다. Unstaged Changes 의 파일 전체를 선택하여 Staged Changes 로 옮긴 후, Commit Message 항목에 메시지를 작성한다. 그리고 Commit를 클릭한다. 이제 프로젝트가 [topcoder NO-HEAD] 에서 [topcoder master]로 바뀐 것과 파일과 프로젝에 붙어있던 물음표가 사라진 것을 확인할 수 있다.
Eclipse에서의 Git 사용 - (1) 플러그인 설치 및 저장소 생성
2016. 10. 16.Eclipse에서의 Git 사용 - (1) 플러그인 설치 및 저장소 생성 1. Eclipse 플러그인 Egit 설치Luna 버전부터는 Git이 플러그인으로 기본으로 포함되어 있음필요한 경우 update를 한다. 2. Git Perspective 실행Egit 을 설치/업데이트한 후 Eclipse를 재실행한다.Perspective List에서 Git 아이콘을 클릭하거나 리스트 제일 좌측의 Open Perspective 아이콘을 클릭하여 Git Perspective를 실행한다. 3. 저장소 생성 Perspective에서 C/C++을 선택하고 새로운 프로젝트를 생성한다(File > New > C++ Project).프로젝트위에서 마우스 오른쪽 버튼을 클릭한 후 Team > Share Project 를 선택한다...
Django queryset filter datefield not empty
2016. 10. 15.특정 기간내에 유료회원으로 등록한 유저를 검색하는 쿼리에서 유료회원등록일이 Null 값인 회원이 검색되어 나오는 경우에는 다음과 같이 처리한다.123qs = Member.objects.exclude(reg_date__gt=end_dt).exclude(reg_date__lt=start_dt)\ .filter(~Q(reg_date__isnull=True)) Colored by Color Scriptercs Null 값을 포함하고자 하는 경우에는 다음과 같이 처리한다. 123456 qs = Member.objects.exclude(reg_date__gt=end_dt).exclude(reg_date__lt=start_dt)\ .filter(Q(reg_date__isnull=True)) qs = Member.ob..
Git 설치 및 사용준비
2016. 10. 13.1. Git 다운로드 https://www.git-scm.com/downloads사용중인 운영체제에 맞는 소프트웨어를 다운로드한다. 2. 사용자 계정 생성 12$ git config --global user.name "John Doe"$ git config --global user.email johndoe@example.comcs 3. 기본 편집기 설정 1$ git config --global core.editor "C:\Program Files (x86)\Notepad++' -multiInst -nosession"cs 4. 현재 설정내용 확인 12345678910111213141516$ git config --listcore.symlinks=falsecore.autocrlf=truecore.fscach..
Rust 프로그래밍 - 시작하기 (Rust - Getting Started)
2016. 10. 8.The Rust Programming LanguageRust is a systems programming language that runs blazingly fast, prevents segfaults, and guarantees thread safety. “The Rust Programming Language” (https://doc.rust-lang.org/stable/book) 의 내용을 기반으로 Rust 프로그래밍을 실습하는 포스팅을 게재해보고자 합니다. 먼저 Rust 시작하기(https://doc.rust-lang.org/stable/book/getting-started.html)입니다. 1. 앞으로 Rust 실습에 사용할 아나콘다 가상환경 설치한다. 123456789101112131415161..