티스토리 뷰
본격적으로 인공지능을 실습하기 전 Python의 여러 라이브러리를 소개합니다.
해당 라이브러리에 대한 실습 및 사용 예시들은 따로 작성해 추가할 예정입니다.
Python(파이썬)은 머신러닝 프로젝트의 언어로 많이 선택되는 대표적인 언어입니다. 파이썬의 여러 라이브러리를 이용해 우리는 상위 레벨에서 쉽게 딥러닝까지 다룰 수 있습니다.
Numpy
Numpy(넘파이)는 과학 및 공학 분야에서 널리 사용되는 파이썬의 오픈소스 라이브러리입니다. 기존 파이썬에서 제공하는 리스트보다 빠른 계산 속도를 가진 ndarray(다차원 배열) 배열을 사용할 수 있도록 해줍니다. 리스트는 굉장히 강력한 자료구조이지만 데이터가 비연속적인 위치에 저장되기 때문에, 딥러닝과 같이 대량의 데이터를 처리해야 하는 경우에는 효율적이지 않습니다. 넘파이는 벡터 및 행렬, 선형대수 연산과 같은 다양한 수학적인 행렬 연산을 수행하는 데에 유용합니다. 때문에 넘파이는 인공지능의 분야 외에도 Pandas, Matplotlib 등 많은 데이터 과학 패키지의 근간에서 사용되고 있습니다.
+ 2022.09.01 추가
Matplotlib
matplotlib(맷플롯립)은 데이터를 각종 그래프로 시각화하는데에 사용되는 라이브러리입니다. 학습 전 데이터를 이해하기 위한 시각화나 학습 후 결과를 시각화하기 위해 주로 사용됩니다.
Scikit-learn
Scikit-learn(사이킷런)은 전통적인 머신러닝 라이브러리입니다. 베이즈분류나 서포트 벡터 머신(SVM), 결정 트리와 같은 다양한 분류 방법, 회귀, 클러스터링 등 대체로 클래식한 머신러닝 모듈을 포함하고 있습니다. 앞서 살펴본 MLP까지 지원하며, 대표적인 데이터 셋인 붓꽃(iris) 데이터나 당뇨병 데이터 등도 제공합니다.
+ 2022.09.07 추가
Tensorflow
Tensorflow(텐서플로우) 구글이 만든 머신러닝 라이브러리로 후술 할 심층 신경망(DNN), 컨벌루션 신경망(CNN) 등의 딥러닝 모듈들을 지원합니다. 내부적으로는 C/C++로 구현되어있고 파이썬을 비롯해 여러가지 언어에서 접근할 수 있도록 인터페이스를 제공하고 있습니다. 신경망구현이 다소 복잡하여 사용이 어렵습니다.
+ Tensorflow는Tensor(물리학에서 다차원배열을 의미)와 Flow(데이터플로우를 의미)가 합쳐진 이름이다!
Keras
Keras(케라스)는 좀 더 추상화된 고수준 딥러닝 API로, 텐서플로우보다 좀 더 쉽게 코드를 짤 수 있도록 만들어진 라이브러리입니다. 여러 백엔드를 선택할 수 있지만 보통 텐서플로우를 사용합니다. (텐서플로우를 설치하면 케라스가 자동 설치된다!) 빠른 실험를 중점에 두고 개발되었기 때문에 쉽고 빠른 프로토타이핑이 가능하며, CPU와 GPU 실행을 지원합니다. 또 여러 신경망의 다양한 조합을 지원한다는 특징이 있습니다.
케라스의 핵심 구조는 모델(model)입니다. 모델이란 신경망의 층, 즉 레이어를 구성하는 방법으로 그중 가장 간단한 기본모델인 Sequential(선형 스택 모델)을 사용하면 신경망을 레고 조립하듯이 차례대로 쌓아 구현할 수 있습니다. 입력데이터로는 넘파이배열과 TensorFlow Dataset 객체, 파이썬 제너레이터를 허용합니다. 케라스를 이용한 신경망 구축에 필요한 요소들은 다음과 같습니다.
모델 : 하나의 신경망
레이어 : 신경망을 이루는 하나의 층
입력데이터 : (다차원 배열의 형식을 가진 데이터를 준비한다.)
손실함수 : 신경망의 출력과 정답 레이블간의 차이(손실)을 측정하는 함수
옵티마이저(optimizer) : 학습률과 모멘텀을 동적으로 변경하는 최적화 알고리즘
다음은 케라스로 MLP를 구현하고 XOR 연산을 학습하는 코드 예시입니다.
import numpy as np
import tensorflow as tf
# 입력데이터
X = np.array([[0,0], [0,1],[1,0],[1,1]])
y = np.array([[0],[1],[1],[0]])
# Sequential 모델을 생성
model = tf.keras.models.Sequential()
#Sequential 모델에 add() 함수를 이용하여 필요한 레이어를 추가
model.add(tf.keras.layers.Dense(units=2, input_shape=(2,), activation='sigmoid'))
model.add(tf.keras.layers.Dense(units=1, activation='sigmoid'))
# compile() 함수를 호출하여서 Sequential 모델을 컴파일
model.compile(loss='mean_squared_error', optimizer=tf.keras.optimizers.SGD(lr=0.3))
# fit()를 호출하여서 학습을 수행한다.
model.fit(X, y, batch_size=1, epochs=10000)
# predict()를 호출하여서 모델을 테스트한다
print(model.predict(X))
+ 2022.09.16 추가
이 외에도 텐서플로우의 라이벌 격이었던 머신러닝 라이브러리 PyTorch(현재는 개발이 활발히 이루어지지 않는 상태)와 Numpy와 같이 데이터 정제 및 분석에 널리 사용되는 pandas가 있습니다.
위 공식 사이트들에서는 머신러닝 가이드를 제공하고 있습니다. 모두 이해하기에는 내용이 많고 처음 접해보시는 분들은 생소할 수 있으나 정확하고 깊은 이해를 위해서는 피할 수 없는 과정이라고 생각합니다. 이어서 연습문제를 바탕으로 라이브러리의 기본적인 사용법이나 실습한 내용을 작성해 보도록 하겠습니다.
감사합니다.
공부한 내용을 복습/기록하기 위해 작성한 글이므로 내용에 오류가 있을 수 있습니다.
'인공지능' 카테고리의 다른 글
[인공지능] Numpy로 경사하강법 구현하기 (0) | 2022.09.07 |
---|---|
[인공지능] Numpy 기본 사용 + 딥러닝 express 연습문제 2장 (0) | 2022.09.01 |
[인공지능] 하이퍼 파라미터 (에포크/배치/학습률/옵티마이저/손실함수/활성화함수) (0) | 2022.08.09 |
[인공지능] 다층 퍼셉트론 (MLP)과 역전파 알고리즘 (1) | 2022.08.08 |
[인공지능] 인공신경망의 시작, 퍼셉트론 (0) | 2022.08.02 |