/**
날짜 : 2017.01.25
밑바닥부터 시작하는 딥러닝(한빛미디어) 참고
Numpy 기초, 간단한 신경망 구현
*/
numpy 패키지는 데이터 과학, 딥러닝 분야에서 쓰이는 매우 중요한 파이썬 패키지이다. numpy는 거의 표준이라고 불릴만큼 대부분의 사람들이 애용하는 패키지이다. numpy가 쓰이는 가장 큰 목적 중에 하나는 배열, 행렬, 벡터, 텐서와 같은 '다차원 배열'의 구현이다. 많은 사람들이 다차원 배열을 구현할 때 numpy를 이용한다. numpy에서는 이를 ndarray라고 부른다. 또 파이썬의 기본 자료 구조에는 array가 없기 때문에, 꼭 딥러닝이 아니더라도 numpy array는 파이썬에서 1차원 배열을 구현할 때도 쓰인다.
numpy의 기초 문법을 정리하고 이를 이용하여 인풋 2개, 아웃풋 2개, 히든 레이어가 2개(각각 노드수가 3, 2인)인 간단한 신경망을 구현해 보았다.
import numpy as np A = np.array([1,2,3,4]) print(A) # 차원출력 np.ndim(A) # 배열 형상 출력. 튜플로 반환된다. print A.shape # (4L,) print A.shape[0] # 4
""" 2차원 배열 """ B = np.array([[1,2], [3,4], [5,6]]) print(B) np.ndim(B) B.shape
""" 3차원 배열 이상 """ # 2x3x4 배열을 만들고 0으로 초기화 C = np.zeros((2, 3, 4)) print 'C', C # 아래와 같이 자유롭게 만들 수 있음 D = np.array([[[ 1., 2., 3., 4.], [ 0., 0., 2., 0.], [ 4., 0., 3., 0.]], [[ 1., 4., 0., 6.], [ 0., 0., 5., 0.], [ 0., 0., 0., 5.]]]) print 'D', D # 2x2x3x4 4차원 배열 E = np.zeros((2,2,3,4)) print 'E', E
""" 내적 """ A = np.array([[1,2], [3,4]]) A.shape B = np.array([[5,6], [7,8]]) B.shape np.dot(A,B) #array([[19, 22], # [43, 50]])
""" 간단한 신경망 구현 입력층에서 1층으로 가는 신호 첫 번째 히든 레이어의 노드 수는 3개 """ def sigmoid(num) : return 1/(1+np.exp(-num)) X = np.array([1.0,0.5]) # 입력이 2개 (x1, x2) W1 = np.array([[0.1,0.3,0.5],[0.2,0.4,0.6]]) # 입력에 대응하는 weights B1 = np.array([0.1,0.2,0.3]) # bias print X.shape # 1x2 print W1.shape # 2x3 print B1.shape # 1x3 A1 = np.dot(X,W1) + B1 Z1 = sigmoid(A1) # 첫 번째 레이어의 최종 아웃풋 print A1 print Z1
입력층에서 첫 번째 히든 레이어(노드 3개짜리)로 forward하는 것을 구현한 것이다. 입력과 weights, bias는 임의로 정한 것이다. 입력은 x1, x2 이고 각각 1.0, 0.5 이다. weights는 총 6개이다. (이는 input layer의 노드 수 2와 첫 번째 히든레이어의 노드수 3을 곱한 것이다.) bias는 길이 3의 array인데 이를 더해주어 XW에 더하여 XW+B를 만든다. Bias가 왜 필요한지 그리고 신경망에 대한 기본적인 이해는 http://hunkim.github.io/ml/ 홍콩 과기대 김성훈 교수님의 강의를 참조하면 좋다.
""" 1층에서 2층으로 가는 신호 구현 """ W2 = np.array([[0.1,0.4],[0.2,0.5],[0.3,0.6]]) B2 = np.array([0.1,0.2]) print Z1.shape # 1x3 첫 번째 레이어의 아웃풋이 인풋이 된다. print W2.shape # 3x2 print B2.shape # 1x2 A2 = np.dot(Z1, W2) + B2 Z2 = sigmoid(A2)
첫 번째 히든레이어에서 두 번째 히든레이어로 forward하는 것의 구현이다. 첫번째 히든 레이어의 아웃풋 Z1이 인풋이 되었고 위와 같은 방식으로 Z1*W2+B2를 하면 두 번째 히든 레이어의 output을 구할 수 있다.
""" 2층에서 출력층으로 가는 신호 구현 """ # 출력층의 활성화 함수로 항등함수를 쓴다. # 회귀의 경우 출력층의 활성화 함수로 일반적으로 항등항수를 쓴다. # 2-class classification에서는 sigmoid # 3-class 이상의 classification에서는 softmax를 쓴다. def identity_function(x) : return x W3 = np.array([[0.1,0.3],[0.2,0.4]]) B3 = np.array([0.1,0.2]) print Z2.shape # 1x2 print W3.shape # 2x2 print B3.shape # 1x2 A3 = np.dot(Z2, W3) + B3 Y = identity_function(A3) print Y # 최종 아웃풋 출력
두 번째 히든 레이어에서 출력층으로 forward 하는 것의 구현이다. 출력층의 activation function은 identity function을 사용하였는데, 이는 '풀고자 하는 문제의 성질' 과 관련이 있다. 회귀에서는 항등함수를, 2클래스 분류에서는 시그모이드를, 다중 클래스 분류에는 소프트 맥스 함수를 사용하는 것이 일반적이다.
Spatial Transformation Network 란 무엇인가? (0) | 2017.10.26 |
---|---|
딥러닝 - Universal Approximation Theorem 실험 (2) | 2017.07.02 |
Deep Learning - Word Embedding 이란 무엇인가? (2) | 2017.06.25 |
Deep Learning - Softmax 구현 및 성질 (0) | 2017.01.30 |
Deep Learning - Activation Function 구현 (0) | 2017.01.25 |
/**
날짜 : 2017.01.25
밑바닥부터 시작하는 딥러닝(한빛미디어) 참고
activation function 정리
*/
1. Step Function
import numpy as np import matplotlib.pyplot as plt %matplotlib inline """ 일반적인 step_function """ def step_function(x) : if x > 0 : return 1 else : return 0 """ numpy의 트릭을 사용한 step function 구현 """ def step_function_np(x) : y = x > 0 # boolean을 int로 변환하면 True = 1, False = 0이 된다. # numpy 배열의 type을 변경할 때 .astype을 쓴다. return y.astype(np.int)
첫 번째 step_function의 경우 numpy array를 입력으로 받아들일 수 없다. 반면 step_function_np 함수는 numpy array를 입력으로 받아들일 수 있다. 아래의 경우 y = x > 0 에서 boolean 형식의 numpy array가 반환되는 점을 트릭으로 활용하여 이를 step_function 구현해 활용한 것이다.
실제로 파이썬에서 deep learning 알고리즘을 구현할 때는 일반적으로 numpy array를 입력으로 받아 numpy array를 출력으로 내보내는 함수를 작성하는 것이 편하므로 step_function_np와 같이 구현하는 것이 더 바람직하다.
x = np.arange(-5.0, 5.0, 0.1) # -5.0부터 5.0까지 0.1 간격의 numpy array 생성 y = step_function_np(x) plt.plot(x,y) plt.ylim(-0.1,1.1) plt.show()
2. Sigmoid function
def sigmoid(x) : return 1 / (1+np.exp(-x)) x = np.array([-1.0, 1.0, 2.0]) # numpy broadcast 기능으로 인해 정상수행 sigmoid(x)
x = np.arange(-5.0,5.0,0.1) plt.plot(x, sigmoid(x)) plt.ylim(-0.1,1.1) plt.show()
3. ReLU
def relu(x) : return np.maximum(0, x)
x = np.arange(-5.0,5.0,0.1) plt.plot(x, relu(x)) plt.show()
Spatial Transformation Network 란 무엇인가? (0) | 2017.10.26 |
---|---|
딥러닝 - Universal Approximation Theorem 실험 (2) | 2017.07.02 |
Deep Learning - Word Embedding 이란 무엇인가? (2) | 2017.06.25 |
Deep Learning - Softmax 구현 및 성질 (0) | 2017.01.30 |
Deep Learning - Numpy 기초, 신경망 구현 (0) | 2017.01.30 |
/**
NbViewer를 통해 Jupyter Notebook Share하기
작성자 : 3개월
2016/11/7
*/
Jupyter notebook으로 작성한 코드를 누군가와 공유하고 싶을 때
Nbviewer를 사용하면 간편하게 웹을 통해 코드와 코드의 실행 결과를 공유할 수 있다.
방법은 github gist에 ipynb를 업로드한 후 gist 코드를 Nbviewer 웹 페이지에 입력만 하면 된다.
이 절차는 아래와 같다. (iPython의 notebook 파일인 ipynb를 기준으로 설명한다.)
1. https://gist.github.com/ 에 접속한다.
2. 공유하고 싶은 .ipynb 파일의 raw source를 복사해서 붙여넣는다.
그리고 create public gist를 클릭한다.
3. 만들어진 파일을 클릭해서 들어가면 아래와 같은 url을 볼 수 있다. 뒤의 코드를 복사한다. 9ca2c306ccfa ... 부분이다.
4. http://nbviewer.jupyter.org/ 에 접속해 아래 빈칸에 코드를 붙여넣고 Go! 를 누른다.
위와 같이 Jupyter notebook 코드가 업로드되어 있는 것을 확인할 수 있다.
누군가와 코드를 공유할 때 위의 nbviewer 링크만 보내주면 간단히 코드와 그 결과를 공유할 수 있다.
머신러닝 - Recommendation System의 기초 (0) | 2017.07.05 |
---|---|
ADSP (데이터분석 준전문가) 합격 후기 (0) | 2017.04.30 |
Machine Learning에서 validation set을 사용하는 이유 (28) | 2017.04.26 |
Mac Jupyter notebook에서 virtualenv 사용하기 (0) | 2016.08.10 |
SAS University Edition 사용하기 (1) | 2016.08.06 |
Jupyter notebook에서 tensorflow를 이용하려고 하였는데 tensorflow 모듈이 없다는 반응이 오는 문제가 있었습니다.
이 문제 해결을 위하여 오랜 시간을 사용 하였기에 다른 분들은 빨리 해결하면 좋겠다는 마음에서 이 글을 썼습니다.
문제 : https://github.com/jupyter/jupyter/issues/95
iPython 쉘 환경에서와 Jupyter notebook에서 virtualenv를 사용할 때 반응이 다름.
해결 : http://ipython.readthedocs.io/en/latest/install/kernel_install.html
Jupyter notebook에서 virtualenv를 이용하려면 수동으로 지정을 해주어야합니다.
source activate myenv python -m ipykernel install --user --name myenv --display-name "Python (myenv)"
위처럼 source activate를 통해 가상환경을 만들고 이 상태에서 ipykernel 위에도 가상환경을 인스톨하면
Jupyter notebook에서도 가상환경을 이용할 수 있습니다.
머신러닝 - Recommendation System의 기초 (0) | 2017.07.05 |
---|---|
ADSP (데이터분석 준전문가) 합격 후기 (0) | 2017.04.30 |
Machine Learning에서 validation set을 사용하는 이유 (28) | 2017.04.26 |
NbViewer를 통해 Jupyter Notebook Share하기 (2) | 2016.11.07 |
SAS University Edition 사용하기 (1) | 2016.08.06 |
원래는 비싼 통계 분석 프로그램인 SAS의 학생용 무료 버젼입니다.
SAS의 모든 기능을 제공하는 건 아니고 일부 제공되는데 간단한 실습용으로는 쓸만한 것 같습니다.
다만 설치가 조금 까다로운데 VMWare나 Virtual Box 같은 가상 머신을 사용해야 합니다.
설치하는 방법을 요약하면 아래과 같습니다. (VMWare 기준입니다.)
http://www.sas.com/en_us/software/university-edition/download-software.html
1. 위 링크에 접속하고 SAS 회원가입을 합니다.
2. VMWare를 다운받습니다. 위 링크에 링크가 있음.
3. SAS University Edition을 다운받고 압축을 풉니다.
4. VMWare가 다운로드하고 설치가 다 되었으면 VMWare Player나 VMWare Workstation을 실행합니다.
5. Open Virtual Machine을 클릭하고 아까 압축을 푼 SAS University Edition 폴더의 SAS-University-Edition.vdx 파일을 엽니다.
6. 가상머신과의 공유폴더를 설정하여야합니다. 로컬 드라이브 아무곳에나 SASUniversityEdition 폴더를 생성하고 그 하위 폴더로 myFolders를 만듭니다.
7. 아래와 같이 VMWare에 있는 SAS-University-Edition을 우클릭한 후 Settings를 클릭합니다.
8. Settings에 들어 갔으면 Option - Shared Folders에 들어간 후 Folder Sharing을 Always Enabled로 설정합니다. 그리고 Add를 클릭하여 방금 만든 myFolders를 추가합니다. OK를 누르고 창을 닫습니다.
9. 다시 SAS-University-Edition을 우클릭한후 Power를 켭니다.
10. 조금 기다리면 다음과 같은 화면이 나오는데 가상머신에서 나와서 웹 브라우저를 연 후 아래 아이피에 접속하면 SAS Studio를 이용할 수 있습니다.
(저는 처음에 http://unknown 나와서 당황했는데 VMWare를 업데이트 하니까 되더군요.
VMWare를 예전에 설치하셨는데 오래 사용하지 않으신 분들은 업데이트 한 번 해주시면 되겠습니다.)
위와 같이 웹브라우저 환경에서 SAS를 이용할 수 있습니다 신기하네요!
잘 이해가 안 가시는 분들은 아래 pdf 파일에 더 상세하게 나와있습니다~
머신러닝 - Recommendation System의 기초 (0) | 2017.07.05 |
---|---|
ADSP (데이터분석 준전문가) 합격 후기 (0) | 2017.04.30 |
Machine Learning에서 validation set을 사용하는 이유 (28) | 2017.04.26 |
NbViewer를 통해 Jupyter Notebook Share하기 (2) | 2016.11.07 |
Mac Jupyter notebook에서 virtualenv 사용하기 (0) | 2016.08.10 |