목차
1. 라이브러리 정의
2. 데이터 수집 및 정규화
3. 심층신경망(Deep Neural Network, DNN)
4. 훈련 출력방법 지정
5. 모델 추가 정보
6. 시각화 하기
사용할 라이브러리 정의🦄
import tensorflow as tf
from tensorflow import keras
import matplotlib.pyplot as plt
import numpy as np
from sklearn.model_selection import train_test_split
"""실행 결과를 동일하게 하기 위한 처리(완전 동일하지 않을 수도 있음)"""
tf.keras.utils.set_random_seed(42)
"""연산 고정"""
tf.config.experimental.enable_op_determinism()
데이터 수집 및 정규화 🦄
패션 MNIST 데이터 읽어들이기(훈련 및 테스트 데이터)
(train_input, train_target), (test_input, test_target) = keras.datasets.fashion_mnist.load_data()
print(train_input.shape , train_target.shape)
print(test_input.shape , test_target.shape)
(60000, 28, 28) (60000,)
(10000, 28, 28) (10000,)
정규화하기
train_scaled_255 = train_input / 255.0
test_scaled_255 = test_input / 255.0
train_scaled_255.shape, test_scaled_255.shape
((60000, 28, 28), (10000, 28, 28))
훈련 및 검증으로 분류하기
train_scaled, val_scaled, train_target, val_target = train_test_split(train_scaled_255, train_target,
test_size=0.2,
random_state=42)
print(train_scaled.shape, train_target.shape)
print(val_scaled.shape, val_target.shape)
print(test_scaled_255.shape, test_target.shape)
(48000, 28, 28) (48000,)
(12000, 28, 28) (12000,)
(10000, 28, 28) (10000,)
심층신경망(Deep Neural Network, DNN) 🦄
* 인공신경망(Artificial Neural Network, ANN)
- 계층이 1개인 경우 또는 은닉계층이 없는 경우
* 심층신경망(Deep Neural Network, DNN)
- 은닉계층을 가지고 있는 경우
모델 생성시키는 함수 생성하기
- 함수이름 : model_fn
→ 매개변수 : a_layer 매개변수
→ 은닉계층이 있는 경우 계층자체를 매개변수로 받아서 아래에서 추가
- 모델생성
- 입력층(1차원 전처리계층) 추가
- 100개의 출력을 담당하는 은닉계층 추가, 활성화 함수 relu
- 추가할 은닉계층이 있으면 추가, 없으면 건너띄기
- 출력층
- 모델 반환
def model_fn(a_layer = None):
"""모델 생성"""
model = keras.Sequential()
"""입력층(1차원 전처리계층) 추가"""
model.add(keras.layers.Flatten(input_shape = (28,28)))
"""100개의 출력을 담당하는 은닉계층 추가, 활성화 함수 relu"""
model.add(keras.layers.Dense(100, activation="relu"))
"""추가할 은닉계층이 있는 경우만 실행됨"""
if a_layer:
model.add(a_layer)
"""출력층"""
model.add(keras.layers.Dense(10, activation="softmax"))
"""모델 반환"""
return model
"""모델 생성 계층 확인하기"""
print(f"{model.summary()}")
※ 함수 초기값 설정 : a_layer = None
은닉계층 여러개를 받고 싶다면 매개변수 초기값을 리스트 형태로 받아서 리스트를 for문 돌려야 함
은닉계층 추가하기
hidden_layer = keras.layers.Dense(50, activation="relu", name = "hidden_layer")
model_fn(hidden_layer)
함수 호출하기
model5 = model_fn()
model5
* 모델 생성계층 확인하기 summary()
- param = (입력크기 * 출력크기) + 출력크기
78500 = (784*100) + 100
1010 = (100*10) + 10
모델 설정하기(compile)
model5.compile(loss = "sparse_categorical_crossentropy",
metrics="accuracy")
훈련하기(fit)
model5.fit(train_scaled, train_target, epochs=5)
훈련 출력방법 지정🦄
* 훈련 출력방법 지정
- verbose : 출력방법 지정
: 0은 아무것도 안나옴(훈련은 되고 있음, 1000~10000번 정도 돌릴때 사용)
: 1은 프로그래스바와 함께 loss와 accuracy (디폴트 값)
: 2는 loss이 accuracy만 출력(프로그래스바 안나옴)
훈련 출력방법 지정
model5.fit(train_scaled, train_target, epochs=5, verbose=0)
model5.fit(train_scaled, train_target, epochs=5, verbose=1)
model5.fit(train_scaled, train_target, epochs=5, verbose=2)
모델 추가 정보 🦄
모델 추가 정보 - epoch
* epoch : 우리가 몇 번씩 수행했는지에 대한 인덱스 값
history5.epoch
[0, 1, 2, 3, 4]
모델 추가 정보 - history
* history : 딕셔너리 형태의 loss데이터, accuracy데이터 5개씩
history5.history
{'loss': [0.20462632179260254, 0.2030731588602066, 0.2021009773015976, 0.19699999690055847, 0.1929694563150406],
'accuracy': [0.9308958053588867, 0.932812511920929, 0.9330833554267883, 0.9358958601951599,
0.9361249804496765]}
시각화 하기 🦄
시각화 하기 - 손실율
*
Loss
: 손실율
import matplotlib.pyplot as plt
plt.title("Epoch5 - Loss")
plt.plot(history5.epoch, history5.history["loss"])
plt.xlabel("epoch")
plt.ylabel("loss")
plt.grid()
"""이미지로 저장 시키기"""
plt.savefig("./saveFig/Epoch5-loss.png")
plt.show()
시각화 하기 - 정확도
* history : 딕셔너리 형태의 loss데이터, accuracy데이터 5개씩
"""정확도 시각화 하기"""
plt.title("Epoch5 - accuracy")
plt.plot(history5.epoch, history5.history["accuracy"])
plt.xlabel("epoch")
plt.ylabel("accuracy")
plt.grid()
"""이미지로 저장 시키기"""
plt.savefig("./saveFig/Epoch5-accuracy.png")
plt.show()
시각화 함수화 하기
*
손실율, 정확도 그래프 동시에 나오도록 함수화
def loss_accuracy_plt():
import matplotlib.pyplot as plt
graph = ["loss", "accuracy"]
for i in graph:
plt.title(f"Epoch5 - {i}")
plt.plot(history5.epoch, history5.history[f"{i}"])
plt.xlabel("epoch")
plt.ylabel(f"{i}")
plt.grid()
"""이미지로 저장 시키기"""
plt.savefig(f"./saveFig/Epoch5-{i}.png")
plt.show()
* 함수 실행
loss_accuracy_plt()
'인공지능 > 딥러닝' 카테고리의 다른 글
[딥러닝DL] DNN 회귀데이터 사용 (1) | 2024.01.05 |
---|---|
[딥러닝DL] 심층신경망 훈련 및 성능향상2 - 성능규제(Dropout), 모델 저장 및 불러오기, 콜백함수(ModelCheckpoint, EarlyStopping) (1) | 2024.01.05 |
[딥러닝] 신경망계층 추가방법 및 성능향상방법 - 옵티마이저 (1) | 2024.01.03 |
[딥러닝] 인공신경망 훈련모델 맛보기 (1) | 2023.12.29 |
[딥러닝]딥러닝 환경설정하기 + 가상환경 생성 (0) | 2023.12.29 |