[머신러닝] #1 헬로 파이썬 |
"Deep Learning from Scratch” 책을 보고 제가 필요한 내용만 정리한 내용입니다.
자세한 내용은 책을 구매해서 보세요~
1.1. 파이썬이란?
-
파이썬은 과학 분야, 특히 기계학습과 데이터 과학 분야에서 널리 쓰인다.
파이썬 자체의 뛰어난 성능에 넘파이(NumPy)와 사이파이(SciPy) 같은 수치 계산과 통계 처리를 다루는 탁월한 lib 이 더해져 데이터 과학 분야에서 확고한 위치를 차지하고 있다.
딥러닝 프레임워크 쪽에서도 파이썬을 애용한다. 카페(caffe), 텐서플로(tensorflow), 체이너(chainer), 테아노(theano) 같은 유명 딥러닝 프레임워크들이 파이썬용 api 를 제공한다.
1.2. 파이썬 설치하기.
1.2.1. 파이썬 버전
1.2.2. 사용하는 외부 라이브러리
-
matplotlib : 그래프를 그려주는 라이브러리
numpy : 수치 계산용 라이브러리. 고도의 수학 알고리즘과 배열(행렬)을 조작하기 위한 편리한 메서드가 많이 준비되어 있다.
1.2.3. 아나콘다 배포판
-
배포판이란 사용자가 설치를 한 번에 수행할 수 있도록 필요한 lib 등을 하나로 정리해둔 것.
아나콘다는 데이터 분석에 중점을 둔 배포판이다.
https://www.continuum.io/downloads 에서 OS 에 맞는 배포판을 다운받아 설치하면 된다.
1.3. 파이썬 인터프리터
1.3.1. 산술 연산
1.3.2. 자료형
-
type() 을 통해 자료형(data type)을 알아볼 수 있다.
1.3.3. 변수
-
파이썬은 동적 언어로 분류되는 언어이다.
동적이라는 것은 변수의 자료형을 상황에 맞게 자동으로 결정한다는 뜻.
1.3.4. 리스트
-
[ ] 를 이용해 리스트를 생성한다.
슬라이싱(slicing) 이라는 편리 기법도 준비되어 있다.
인덱스의 -1 은 끝 인덱스, -2 는 끝에서 두번째 인덱스를 의미한다.
1.3.5. 딕셔너리
-
{ } 를 사용하며, : 를 이용해 key value 를 구분한다.
ex)
{ ‘height’ : 180 }
1.3.6. bool
-
True 와 False 로 값을 나타낸다.
and, or, not 연산자를 사용할 수 있다.
1.3.7.if 문
-
if, elif, else 를 사용한다.
block 은 : 로 시작하고, indentation (들여쓰기) 로 범위를 정한다.
indent 는 space 4개를 주로 사용한다. (tab 을 사용해도 되나 space 를 선호)
ex)
if hungry:
print(“I’m hungry”)
1.3.8. for 문
-
ex)
for i in [1,2,3]:
print(i)
1.3.9. 함수
-
def 함수명(params): 문법을 사용한다.
-
파이썬 인터프리터 종료는 리눅스와 맥에서는 Ctrl + D, 윈도우에서는 Ctrl + Z 입력 후 Enter 이다.
1.4. 파이썬 스크립트 파일
1.4.1. 파일로 저장하기
-
python <pythonFile.py> 로 실행한다.
1.4.2. 클래스
-
아래와 같이 정의한다.
class className:
def __init__(self, param1, param2, …): #생성자
def method1(self, param1, … )
…
-
string concat 은 + 로 한다.
-
self.varName 으로 하면 instance 변수(member 변수) 로 사용 가능하다.
1.5. 넘파이
-
딥러닝을 구현하다 보면 배열이나 행렬 계산이 많이 등장한다.
넘파이의 배열 클래스인 numpy.array 에는 편리한 메서드가 많이 준비되어 있다.
1.5.1. 넘파이 가져오기
-
import numpy as np
1.5.2. 넘파이 배열 생성하기
-
np.array() 로 생성한다. 이 친구는 파이썬의 리스트를 인수로 받아 넘파이 lib 이 제공하는 특수 형태의 배열 numpy.ndarray 를 반환한다.
ex)
x = np.array([1.0, 2.0, 3.0])
type(x) # output : <class ‘numpy.ndarray’>
1.5.3. 넘파이의 산술 연산
-
ex)
x = np.array([1.0, 2.0, 3.0])
y = np.array([2.0, 4.0, 6.0])
x + y # 원소별 덧셈
x * y # 원소별 곱셈
x, y 의 원소 수가 같을 경우 산술 연산은 각 원소에 대해 행해진다.
원소 수가 다르면 오류가 발생한다.
원소별 이라는 말은 영어로 element-wise 라고 한다.
원소별 곱셈은 element-wise product 라고 한다.
-
넘파이 배열은 원소별 계산뿐 아니라 넘파이 배열과 수치 하나(스칼라값) 의 조합으로 된 산술 연산도 수행할 수 있다.
이 기능을 브로드캐스트라고 한다.
ex)
x = np.array([1.0, 2.0, 3.0])
x / 2.0
1.5.4. 넘파이의 N 차원 배열
-
넘파이는 다차원 배열도 작성할 수 있다.
ex)
A = np.array([[1, 2], [3,4]])
A.shape # (2, 2)
A.dtype # 원소의 자료형, dtype(‘int64’)
형상(shape)이 같은 행렬끼리면 행렬의 산술 연산도 대응하는 원소별로 계산된다.
행렬과 스칼라값의 산술 연산도 가능하다. 이 때도 배열과 마찬가지로 브로드캐스트 기능이 작동한다.
-
수학에서 1차원 배열은 벡터(vector), 2차원 배열은 행렬(matrix), 3차원 배열은 텐서(tensor) 라고 부른다.
1.5.5. 브로드캐스트
-
넘파이에서는 형상이 다른 배열끼리도 계산할 수 있다.
예를 들어 2 X 2 행렬 A 에 스칼라값 10을 곱하면, 10 이라는 스칼라값이 2X2 행렬로 확대된 후 연산이 이뤄진다.
이런 기능을 “브로드캐스트(broadcast)” 라고 한다.
-
ex)
A = np.array([[1,2,], [3,4,]])
B = np.array([10, 20])
A * B
위의 경우도 브로드캐스트로 B 가 [[10, 20], [10, 20]] 으로 변환되어 연산이 이루어진다.
1.5.6. 원소 접근
-
ex)
X = np.array([ [51,55], [14,19], [0,4] ])
X[0] # 0행, array([51, 55])
X[0][1] # 0행의 1번 원소, 55
for row in X:
print(row) # 0행, 1행, 2행이 출력
X = X.flatten() # X 를 1차원 배열로 변환
X[np.array([0, 2, 4])] # 인덱스가 0, 2, 4인 원소 얻기 -> array 안에 ndarray 를 주면 그 index 들의 value 가 array 형태로 나옴
X > 15 # bool 형태의 배열로 나옴
X[X>15] # 조건을 만족하는 조건의 값들이 나옴, array([51, 55, 19]) -> array 안에 true, false array 를 주면 조건에 맞는 value 가 array 형태로 나옴
-
파이썬 같은 동적 언어는 C, C++ 같은 정적 언어(컴파일 언어)보다 처리 속도가 느리다고 한다.
실제로 무거운 작업을 할 때는 C, C++ 로 작성한 프로그램을 쓰는 것이 좋다.
그래서 파이썬에서 빠른 성능이 요구될 경우 해당 부분을 C, C++ 로 구현하곤 한다.
그 때 파이썬은 중개자 역할을 한다.
넘파이도 주된 처리는 C, C++ 로 구현했다.
그래서 성능을 해치지 않으면서 파이썬의 편리한 문법을 사용할 수 있다.
1.6. matplotlib
1.6.1. 단순한 그래프 그리기
-
그래프를 그릴 떄는 pyplot 모듈을 이용한다.
ex)
import matplotlib.pyplot as plt
x = np.arange(0, 6, 0.1) # 0 부터 6 까지 0.1 간격으로 생성
y = np.sin(x)
plt.plot(x, y)
plt.show()
1.6.2. pyplot 의 기능
-
ex)
import matplotlib.pyplot as plt
x = np.arange(0, 6, 0.1) # 0 부터 6 까지 0.1 간격으로 생성
y1 = np.sin(x)
y2 = np.cos(x)
plt.plot(x, y1, label=“sin”)
plt.plot(x, y2, linestyle="--“, label=“cos”) # cos 는 점선으로 그림
plt.xlabel(“x”) # x축 이름
plt.ylabel(“y”)
plt.title(‘sin & cos’) # 제목
plt.legend() # legend 는 범례, 기호 설명표 라는 의미, - sin, -- cos 라는 설명표(박스)가 나온다
plt.show()
1.6.3. 이미지 표시하기
-
pyplot 에는 이미지를 표시해주는 메서드인 imshow() 도 준비되어 있다.
이미지를 읽을 떄는 matplotlib.image 모듈의 imread() 메서드를 이용한다.
ex)
import matplotlib.pyplot as plt
from matplotlib.image import imread
img = imread(‘lena.png’) # 이미지 읽어오기
plt.imshow(img)
plt.show()
1.7. 정리
-
파이썬은 간단하고 익히기 쉬운 언어이다.
파이썬은 오픈 소스여서 자유롭게 사용할 수 있다.
이 책은 딥러닝 구현에 파이썬3 버전을 이용한다.
외부 lib 로는 numpy 와 matplotlib 을 이용한다.
파이썬을 실행하는 방식에는 인터프리터와 스크립트 파일 두 가지가 있다.
파이썬에서는 함수와 클래스 같은 모듈로 구현을 정리할 수 있다.
넘파이는 다차원 배열을 다루는 편리한 메서드를 많이 제공한다.
'프로그래밍 놀이터 > 머신러닝, AI, 딥러닝' 카테고리의 다른 글
[머신러닝] #4 신경망 학습 #2 (0) | 2018.07.06 |
---|---|
[머신러닝] #4 신경망 학습 #1 (0) | 2018.07.05 |
[머신러닝] #3 신경망 #2 (0) | 2018.07.04 |
[머신러닝] #3 신경망 #1 (0) | 2018.07.03 |
[머신러닝] #2 퍼셉트론 (0) | 2018.07.02 |
댓글