본 내용은 도서 '딥러닝 텐서플로 교과서'의 내용을 참고했습니다.
출처 : http://www.yes24.com/Product/Goods/100295267?OzSrank=1
텐서플로 : 데이터 흐름 그래프(data flow graph)를 사용하여 데이터의 수치 연산을 하는 오픈 소스 소프트웨어 프레임워크
텐서플로의 특징 및 장점
- 코드 수정 없이 데스크톱, 서버, 모바일 디바이스에서 CPU나 GPU를 사용하여 연산을 구동할 수 있음
- 분산 환경에서 실행 가능
- 단순한 아이디어 테스트부터 서비스 단계까지 모두 이용 가능
- GradientTape를 사용하여 자동으로 미분을 계산할 수 있음
- 구글에서 공식 배포하였기 대문에, 다양한 학습 자료가 제공됨
- 사용하기 편리함. 텐서플로 2.x부터는 데이터를 훈련하고 예측하는 과정이 매우 단순해졌음
- 코드 수정 없이 CPU/GPU 모드로 동작 가능
- 직관적이고 접근하기 쉬운 파이썬 인터페이스 제공
텐서플로 아키텍처
텐서플로 2.x 기초 문법
임의 데이터셋 사용
임의의 데이터들을 Dataset으로 만든 후, 텐서(tf.tensor)로 변환하여 사용한다.
# 텐서플로 라이브러리 호출
import tensorflow as tf
# (100, 3) 형태의 무작위 난수 생성
x = np.random.sample(100, 3))
# 일반 이미지나 배열을 list 형식으로 dataset에 넣어 준다.
dataset = tf.data.Dataset.from_tensor_slices(x)
텐서플로에서 제공하는 데이터셋 사용
tensorflow_dataset이라는 패키지는 텐서플로에서 제공하는 별도의 데이터셋이다.
>>> pip install tensorflow-datasets
pip 명령어로 패키지를 설치한 후, tfds 이름으로 tensorflow_datasets 패키지를 호출한다.
import tensorflow_datasets as tfds
ds = tfds.load('mnist', split = 'train', shuffle_files = True)
케라스에서 제공하는 데이터셋 사용
텐서플로에서 제공하는 케라스 모듈을 사용한다.
import tensorflow as tf
# 케라스를 이용하여 MNIST 데이터셋을 내려받기
data_train, data_test = tf.keras.datasets.mnistload_data()
# 훈련 데이터셋 정의
(images_train, labels_train) = data_train
# 검증 데이터셋 정의
(images_test, labels_test) = data_test
인터넷에서 데이터셋을 로컬 컴퓨터에 내려받아 사용
tf.keras.utils.get_file 메서드를 이용하자
import tensorflow as tf
url = 'https://storage.googleapis.com/download.tensorflow.org/data/illiad/butler.txt'
text_path = tf.keras..utils.get_file('butler.txt', origin = url)
모델 정의하기
모델을 정의하는 방법은 크게 세 가지이다.
초보자 : Sequential API, 전문가용 : Functional API, Model Subclassing API 이다.
Sequential API는 직관적이고 간결하다.
from tensorflow.keras import models, Dense
model = tf.keras.sequential()
계층은 x를 입력으로 받아 y를 출력하는 형태의 계산을 표현한다. 이러한 계산을 위해서는 딥러닝의 기본층인 밀집층(dense layer)를 사용한다. add 메서드를 이용하여 모형에 계층을 추가한다.
model.add(Dense(4, activation = 'sigmoid', input_shape(4,), weights = (w, b), name = 'dense1'))
하지만, 단순히 층을 여러 개 쌓는 형태이기에 복잡한 모델을 생성할 때에는 한계가 있다.
Functional API 는 복잡한 모델을 생성할 떄의 한계를 극복할 수 있다. 입출력을 사용자가 정의해서 모델 전체를 규정하는 형태이다.
예시 코드
from tensorflow.keras.layers import input, Dense
from tensorflow.keras.models import Model
# 입력층(열(특성) 다섯 개를 입력으로 받음)
inputs = Input(shape = (5,))
# 은닉층 1
x = Dense(8, activation = 'relu')(inputs)
# 은닉층 2
x = Dense(4, activation = 'relu')(x)
# 출력층
x = Dense(1, activation = 'softmax')(x)
model = Model(inputs, x)
Model Subclassing API 이용하기
class ResNet(tf.keras.Model):
def __init__(self):
super(ResNet, self).__init__()
self.block_1 = layers.Dense(32, activation = 'relu')
self.block_2 = layers.Dense(num_classes, activation = 'sigmoid')
def call(self, inputs):
x = self.block_1(input)
return self.block_2(x)
모델 컴파일
모델 훈련 전, 하이퍼파라미터들을 정의해야한다.
- 옵티마이저(optimizer) : 데이터와 손실 함수를 바탕으로 모델의 업데이트 방법을 결정함
- 손실 함수(loss function) : 훈련하는 동안 출력과 실제 값(정답) 사이의 오차를 측정함
- 지표(metrics) : 훈련과 검증 단계를 모니터링하여 모델의 성능을 측정함
다음은 모델 컴파일 예시코드이다.
model.compile(optimizer = 'adam', loss = 'sparse_categorical_crossentropy', metrics = ['accuracy'])
모델 훈련
앞의 과정을 통해 train을 한다. 모델 훈련 예시는 다음과 같다.
model.fit(x_train, y_train, epochs=10, batch_size=100, validation_data=(x_test, y_test), verbose=2)
- 입력 데이터 : x_train
- 결과(label) 데이터 : y_train
- 학습 데이터 반복 횟수 : epochs=10
- 한 번에 학습할 때 사용하는 데이터 개수 : batch_size=100
- 검증 데이터 : validation_data=(x_test, y_test)
- 학습 진행 상황을 보여 줄지 결정하는 것. 1로 설정하면 진행 상황을 볼 수 있음
모델 평가
주어진 검증 데이터셋을 사용하여 모델을 평가한다. 코드는 아래와 같다.
model.evaluate(x_test, y_test, batch_size = 32)
- 검증 데이터셋 : x_test
- 결과(label) 데이터셋 : y_test
- 한 번에 학습할 때 사용하는 데이터 개수 : batch_size = 32
훈련 과정 모니터링
텐서보드를 이요해서 학습에 사용되는 각종 파라미터 값이 어떻게 변화하는지 손쉽게 시각화할 수 있다.
log_dir = "logs/fit/"
tensorboard_callback = tf.keras.callbacks.TensorBoard(log_dir=log_dir, histogram_freq=1)
# model.fit() 안에 callbacks를 옵션으로 넣어 준다
model.fit(x=x_train,
y=y_train,
epochs=5,
validation_data=(x_test, y_test),
callbacks=[tensorboard_callback])
tensorboard_callback 파라미터를 알아보자
- log_dir : 로그가 저장될 디렉터리 위치를 지정
- histogram_freq : 1로 설정하면 모든 에폭마다 히스토그램 계산을 활성화한다. 0은 비활성화 이다.
다음 명령어를 통해 텐서보드를 실행할 수 있다.
>>> tensorboard --logdir=./logs/fit/
모델 사용
훈련된 모델을 사용하여 실제 예측을 해보자
model.predict(y_test)
'Deep Learning > 딥러닝 텐서플로 교과서' 카테고리의 다른 글
3-2. 머신 러닝 핵심 알고리즘 - 비지도학습 (0) | 2022.08.02 |
---|---|
3-1. 머신 러닝 핵심 알고리즘 - 지도학습 (0) | 2022.08.02 |
1. 머신러닝과 딥러닝 (0) | 2022.08.01 |