딥러닝에서 이용하는 라이브러리 설치
딥러닝(Deep Learning)
딥러닝은 머신러닝 알고리즘 중 하나로, 인공신경망을 기반으로 하는 머신러닝의 한 분야이다. 비정형의 대용량 데이터 학습에 뛰어난 성능을 나타내며, 이로 인해 작은 양의 데이터를 학습하면 오버피팅(Overfitting)이 발생할 확률이 높다.
정형 데이터와 비정형 데이터
정형 데이터: 정형 데이터는 명확한 속성과 구조에 따라 정리되어 있는 데이터
비정형 데이터: 규칙적인 구조가 없거나 복잡한 형태의 데이터 ex) 이미지, 자연어,음성
딥러닝은 이러한 비정형 데이터에 성능이 뛰어납니다.
but
딥러닝의 속도는 일반적으로 학습시간이 오래 걸릴 수 있지만, 최근 다양한 최적화 기법 및 효율적인 라이브러리들이 개발되어 속도 문제가 점차 개선되고 있다.
첫 번째 딥러닝 - MLP(Multi-Layer Perceptron) 구현
<정리>
첫 번째 딥러닝 - MLP 구현을 위해 준비한 데이터를 사용하고 Keras를 사용하여 모델을 정의하고 컴파일 한 다음, 훈련 시키고 평가하는 작업을 수행한다. 이 과정에서 Sequential 방식, Functional API 방식, Subclass 방식 등 다양한 방식을 활용하여 모델을 구축할 수 있다. 마지막으로 손실 함수, 최적화 기법, 평가 지표 등을 설정하여 모델을 컴파일하고 학습시킨다. 이렇게 생성된 모델은 테스트 데이터셋을 사용하여 일반화 능력을 평가할 수 있다.
<예제를 살펴보자>
import numpy as np
import tensorflow as tf
from tensorflow import keras
# 데이터 로드 및 정규화
(train_images, train_labels), (test_images, test_labels) = keras.datasets.mnist.load_data()
X_train = train_images.astype('float32') / 255
X_test = test_images.astype('float32') / 255
# 원-핫 인코딩
y_train = keras.utils.to_categorical(train_labels)
y_test = keras.utils.to_categorical(test_labels)
2.모델 구성: 적절한 모델(예: MLP, CNN)를 선택하고, 주요 하이퍼파라미터를 설정하여 모델을 구성한다. 입력층, 은닉층 그리고 출력층을 포함한 딥러닝 모델을 구축하는 것이다.
model = keras.Sequential([
keras.layers.InputLayer((28, 28)),
keras.layers.Flatten(),
keras.layers.Dense(256, activation='relu'),
keras.layers.Dropout(0.3),
keras.layers.Dense(128, activation='relu'),
keras.layers.Dropout(0.3),
keras.layers.Dense(10, activation='softmax')
])
model.compile(optimizer='adam',
loss='categorical_crossentropy',
metrics=['accuracy'])
history = model.fit(X_train, y_train, epochs=10, batch_size=100,
validation_split=0.3)
test_loss, test_accuracy = model.evaluate(X_test, y_test)
마지막
import numpy as np
# 새로운 샘플데이터
sample_data = X_test[:5]
# 이진 분류(binary classification)
binary_prediction = np.where(model.predict(sample_data) > 0.5, 1, 0).astype("int32")
# 다중클래스 분류(multi-class classification)
multi_class_prediction = np.argmax(model.predict(sample_data), axis=1)
import random
import numpy as np
import tensorflow as tf
from tensorflow import keras
# TensorFlow 버전 확인
print(tf.__version__)
2.13.0
# 시드 값 설정
np.random.seed(0)
tf.random.set_seed(0)
random.seed(0)
# 데이터셋 로드 및 분할
(train_image, train_label), (test_image, test_label) = keras.datasets.mnist.load_data()
# 훈련 및 테스트 데이터셋 형태
train_image.shape, train_label.shape, test_image.shape, test_label.shape
((60000, 28, 28), (60000,), (10000, 28, 28), (10000,))
# 데이터셋 정규화 및 전처리
X_train = train_image.astype("float32")/255
X_test = test_image.astype('float32')/255
# 레이블 원-핫 인코딩
y_train = keras.utils.to_categorical(train_label, num_classes=10)
y_test = keras.utils.to_categorical(test_label)
# Sequential 모델 정의
model = keras.Sequential([
keras.layers.InputLayer((28,28)),
keras.layers.Flatten(),
keras.layers.Dense(256),
keras.layers.ReLU(),
keras.layers.Dense(units=128),
keras.layers.ReLU(),
keras.layers.Dense(10),
keras.layers.Softmax()
])
# 모델 컴파일
model.compile(optimizer='adam',
loss='categorical_crossentropy',
metrics=['accuracy'])
# 모델 훈련
history = model.fit(X_train, y_train,
epochs=10,
batch_size=100,
validation_split=0.3)
# 테스트 데이터셋을 사용하여 모델 평가
result = model.evaluate(X_test, y_test)
# 새 데이터에 대한 예측 수행
X_new = X_test[:3]
pred = model.predict(X_new)