본문 바로가기
프로그래밍 놀이터/머신러닝, AI, 딥러닝

[머신러닝] #1 헬로 파이썬

by 돼지왕 왕돼지 2018. 7. 1.
반응형

[머신러닝]  #1 헬로 파이썬


"Deep Learning from Scratch” 책을 보고 제가 필요한 내용만 정리한 내용입니다.

자세한 내용은 책을 구매해서 보세요~

broadcast, caffe, chainer, Data Type, element wise product, element-wise sum, flatten, hello python, IMAGE, import numpy as np, imread, imshow, matplotlib, numpy, numpy dtype, numpy shape, numpy 다차원 배열, numpy.array, plt, pyplot, python array, python block, python class, python command line, python constructor, python dictionary, python for 문, python if 문, python indentation, python interpretor, python list, python self, python slicing, python string concat, python vs c, python vs c++, python vs compile 언어, python 들여쓰기, python 생성자, python 이미지 표시, python 처리 속도, python 행렬 계산, scipy, tensor, tensorflow, theano, type, [], [머신러닝] #1 헬로 파이썬, 넘파이, 넘파이 배열 생성, 넘파이 산술연산, 데이터 분석 배포판, 동적 자료형, 딥러닝 파이썬, 브로드캐스트, 사이파이, 아나콘다 배포판, 자료형, 체이너, 카페, 테아노, 텐서플로, 파이썬 그래프 라이브러리, 파이썬 동적 언어, 파이썬 인터프리터, 파이썬이란, 헬로 파이썬


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 을 이용한다.

파이썬을 실행하는 방식에는 인터프리터와 스크립트 파일 두 가지가 있다.

파이썬에서는 함수와 클래스 같은 모듈로 구현을 정리할 수 있다.

넘파이는 다차원 배열을 다루는 편리한 메서드를 많이 제공한다.




반응형

댓글