밑바닥부터 시작하는 딥러닝 깃허브:https://github.com/WegraLee/deep-learning-from-scratch
개발자가 직접 클래스를 정의하면 독자적인 자료형을 만들 수 있다. 그리고 클래스만의 전용 함수와 속성을 정의할 수 있다.
다음 코드는 간단한 클래스 Man코드이다.
def Man:
def __init__(self, name):
self.name = name
print("Initialized!")
def hello(self):
print("Hello " + self.name + "!")
def goodbye(self):
print("Good-bye " + self.name + "!")
m = Man("David")
m.hello()
m.goodbye()
Initialized!
Hello David!
Good-bye David!
인스턴스 변수는 인스턴스별로 저장되는 변수이다. 위 코드에서 self.name처럼 self 다음에 속성 이름을 써서 인스턴스 변수를 작성하거나 접근할 수 있다.
넘파이의 배열 클래스는 딥러닝을 구현할 때 필요한 배열과 행열 연산에 편리한 메서드를 많이 제공하기 때문에 사용한다.
import numpy as np # 넘파이 import
x = np.array([1, 2, 3]) # 넘파이 1차원 배열 선언
print(x)
[1 2 3]
넘파이 배열 선언시 np.array() 메서드를 사용하고 파이썬의 리스트를 인수로 받아 특수한 형태의 배열(numpy.ndarray)을 반환한다.
넘파이 배열은 두 배열 x, y의 원소 수가 같다면 산술 연산을 각 원소에 대해서 행한다. 원소 수가 다르면 오류가 발생한다.
x = np.array([1, 2, 3])
y = np.array([2, 4, 6])
x + y # array([3, 6, 9])
x - y # array([-1, -2, -3])
x / y # array([0.5, 0.5, 0.5])
x * y # array([ 2, 8, 18])
넘파이는 1차원 배열뿐 아니라 다차원 배열도 작성할 수 있다.
A = np.array([[1, 2], [3, 4]])
print(A)
print(A.shape)
print(A.dtype)
[[1 2]
[3 4]]
(2, 2)
dtype('int64')
행렬의 형상은 shape으로, 행렬의 원소 자료형은 dtype으로 알 수 있다.
넘파이에선 형상이 다른 배열끼리 계산이 가능하다.
A = np.array([[1, 2], [3, 4]])
B = np.array([10, 20])
A * B
array([[ 10, 40],
[ 30, 80]])
x = np.array([[51, 55], [14, 19], [0, 4]])
X[0] # array([51, 55])
X[0][1] # 55
for row in X:
print(row)
[51 55]
[14 19]
[0 4]
인덱스를 배열로 지정해 한 번에 여러 원소에 접근할 수 있다.
X = X.flatten() # X를 1차원 배열로 변환(평탄화)
print(X)
X[np.array([0, 2, 4])] # 인덱스가 0, 2, 4인 원소 얻기
[51 55 14 19 0 4]
array([51, 14, 0])
matplotlib는 그래프를 그려주는 라이브러리이다.
다음 코드는 matplot의 pyplot 모듈을 이용해 sin 함수를 그리는 예이다.
import numpy as np
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()
다음 이미지는 위 코드의 실행 결과이다.
위 그림에 추가로 cos 함수를 그려보고 제목과 각 축의 이름(레이블) 표시 등을 해본다.
import numpy as np
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") # y축 이름
plt.title('sin & cos') # 제목
plt.legend()
plt.show()
pyplot에는 이미지를 표시해주는 메서드 imshow()가 있다.
import matplotlib.pyplot as plt
from matplotlib.image import imread
img = imread("./image/images.jpg")
plt.imshow(img)
plt.show()
다음은 실행 결과이다.