UOMOP

기본적인 케라스(keras)모델 구현 본문

Ai/DL

기본적인 케라스(keras)모델 구현

Happy PinGu 2022. 1. 30. 23:39
# 기본적인 케라스 모델을 만들어보도록 하자.

from tensorflow import keras

# 데이터 불러오기
(train_input, train_target), (test_input, test_target) = keras.datasets.fashion_mnist.load_data()

# input, target data의 크기 확인
print("train_input의 크기 : {}".format(train_input.shape))
print("train_target의 크기 : {}".format(train_target.shape))
print("*" * 40)
print("test_input의 크기 : {}".format(test_input.shape))
print("test_target의 크기 : {}\n\n".format(test_target.shape))

train_scaled = train_input / 255
test_scaled = test_input / 255
# input data를 0~1로 정규화

train_scaled = train_scaled.reshape(-1, 28*28)
test_scaled = test_scaled.reshape(-1, 28*28)
# model의 훈련시킬 수 있는 2차원 배열로 변환

from sklearn.model_selection import train_test_split

train_scaled, val_scaled, train_target, val_target = train_test_split(train_scaled, 
                                                          train_target, test_size = 0.2)
# 훈련 셋에서 20%를 검증 셋으로 분리

print("train_scaled의 shape : {}".format(train_scaled.shape))
print("train_target의 shape : {}".format(train_target.shape))
print("*"*45)
print("val_scaled의 shape : {}".format(val_scaled.shape))
print("val_scaled의 shape : {}\n\n".format(val_target.shape))

dense = keras.layers.Dense(10, activation = "softmax", input_shape = (784,))
# 출력층의 객체 선언
# 출력층의 유닛(클래스)는 10개,
# 다중분류이므로 소프트맥스로 활성화, 
# 입력 data의 shape은 길이가 784인 1차원배열
# 만약 이진 분류라면 activation = "sigmoid"로 선언

model = keras.Sequential(dense)
# 전체 모델을 만들고 매개변수로 출력층인 dense 객체를 지정.

model.compile(loss = "sparse_categorical_crossentropy", metrics = "accuracy")
# 모델을 훈련하기 전에 손실함수와 성능평가지표를 설정해준다.

# 이진분류 : loss = "sparse_binary_crossentropy"
# 다중분류 : loss = "sparse_categorical_crossentropy"
# 만약 target data의 label이 정수로 labeling되어 있다면 loss에 sparse를 붙여줘야한다.
# 만약 target data가 원핫 인코딩(해당 target만 1, 나머지는 0)되어 있다면 sparse가 없어도 된다.

model.fit(train_scaled, train_target, epochs = 5)
# 5반 반복 훈련

print("\n\n")

model.evaluate(val_scaled, val_target)
# 검증 셋으로 성능확인

Comments