Tensorflow #3 : 딥러닝의 흐름, 간단한 Model 학습

2025. 3. 31. 22:06·Bootcamp_zerobase/Tensorflow

2024.12.29

Part 11. 텐서플로

  • Chapter 03. 간단한 Model 학습 시키기
    01. Deep learning Flow
    02. Deep learning Flow-preprocessing
    03. Deep learning Flow-modeling
    04. Deep learning Flow-evaluation

 

Deep learning Flow

Flow 기본 및 Data 가져오기

 

딥러닝의 Flow는 대부분 위와 같다. 데이터를 확인하고 전처리, 증강(특히 이미지데이터)처리를 진행한다.

앞서 나왔지만, 증강은 대부분 데이터가 충분하지 않아서 데이터의 양을 늘리기 위해, 표준화/일반화를 위해 많이 진행한다. 그 후 모델구성 및 학습을 진행하게 된다.

 

 

데이터 받아오기. TesnorFlow의 keras.datasets 에 있는 MNIST 데이터를 받아온다.

 

 

 

 

 

어떤 형태의 데이터가 있는지 확인. Shape, 형태, 몇 개 데이터가 있는지 확인한다.

 

 

 

 

 

seaborn을 이용하면... 아래와 같이 표현할 수 있다. (hue 옵션 사용)

 

 

 

Transpose( ) 함수를 이용하면 이미지를 돌리거나 할 수 있다.

 

 

 

 

Deep learning Flow - Preprocessing

 

데이터 확인 및 검증

  • 데이터 중에 학습에 포함되면 안 되는 것이 있는가??
    • ex> 개인정보가 들어있는 데이터, 테스트용 데이터에 들어있는 것, 중복되는 데이터 등.
  • 학습 의도와 다른 데이터가 있는가??
    • ex> 얼굴을 학습하는데 발 사진이 들어가 있진 않은지?.. (가끔은 의도하고 일부러 집어넣는 경우도 존재)
  • 라벨값에 잘못된 데이터가 있는가??
    • ex> 7인데 1로 라벨링, 고양이인데 강아지로 라벨링 등..

 

mnist 데이터셋에서는 255보다 크거나 0보다 작은 값이 있으면 안 된다. 따라서 해당 값이 있는지 확인하는 함수를 생성하여 데이터 검증 작업을 진행.

 

 

 

전처리
  • 입력하기 전에 모델링에 적합하게 처리하는 것.
  • 대표적으로 Scaling, Resizing, label encoding 등이 있다.
  • dtype, shape 항상 체크!!!

One Hot Encoding 참고자료 :

https://velog.io/@ho3068/Basic-of-Deeplearning-2#onehotencoding-%EC%A7%84%ED%96%89

 

 

 

Scaling

 

 

 

Scale 함수를 통해서 모든 값을 0~1 사이 값으로 변경. 그래프를 통해 시각화하면...

 

시각화까지 하여, 해당 코드가 잘 작동하는지 검증하였다. 그럼 실제 테스트 데이터에 적용한다.

 

 

Flattening

 

 

reshape( )을 통해서 차원축소 진행 (Flatten)

 

 

Label Encoding (y값)

 

One-Hot Encoding을 통해서 y값 행렬로 변경.

 

 

Class 이용한 관리

 

보통 큰 작업을 하나의 클래스를 만들어서 관리.

 

 

위와 같이 Class를 통해 접근하여 함수관리를 진행하면 편리하고 재사용 가능한 코드로 관리할 수 있다.

Class에 대한 보충설명.

 

Deep learning Flow - Modeling

 

모델 정의

 

 

 

 

학습로직

 

 

 

학습 실행

 

 

 

 

Deep learning Flow - Evaluation

 

학습한 결과를 추적하고 확인하는 것.

model.fit( )을 진행하면 반환값이 생성된다. 통상 hist라는 변수명으로 설정한다.

hist = model.fit(prep_train_X, one_hot_y, epochs=50, batch_size=256)

=========================================================================================
Epoch 50/50
235/235 [==============================] - 1s 2ms/step - loss: 0.3071 - accuracy: 0.9164

 

 

그렇게 되면 아래처럼 hist 변수에서 각 epoch마다의 Loss 값과 Accuracy 값을 추적할 수 있다.

hist.history.keys()
=======================================================================
>> dict_keys(['loss', 'accuracy'])



hist.history
=======================================================================
>> 
{'loss': [2.118561029434204,
  1.7614890336990356,
  1.4618910551071167,
  		.
        .
        .
 'accuracy': [0.33311668038368225,
  0.6435999870300293,
  0.7321333289146423,
  0.7749666571617126,

 

 

아래와 같이 그래프로도 확인할 수 있다

plt.figure(figsize=(12, 6))

plt.subplot(1, 2, 1)
plt.plot(hist.history['loss'], lw=3)
plt.xlabel("epoch")
plt.ylabel("Loss")
plt.grid()

plt.subplot(1, 2, 2)
plt.plot(hist.history['accuracy'], c='red', lw=3)
plt.xlabel("epoch")
plt.ylabel("Accuracy")
plt.grid()

plt.show()

 

 

 

evaluate

## evaluate

re_X_test = (X_test/255.0).astype(np.float32)
re_X_test = re_X_test.reshape((re_X_test.shape[0], -1))

re_y_test = tf.keras.utils.to_categorical(y_test, num_classes=10)


model.evaluate(re_X_test, re_y_test)

=======================================================================================
313/313 [==============================] - 1s 2ms/step - loss: 0.3007 - accuracy: 0.9169
[0.30070123076438904, 0.9168999791145325]

acc는 0.9정도 나오니 간단한 모델치고는 괜찮은 것 같다. 통상 이미지 데이터에 대한 분석은 CNN, ImageNet 등 더욱 복잡한 모델을 사용한다.

 

 

 

예측 ( Predict )

pred = model.predict(re_X_test[10:35])  # 10 ~ 19

pred[1].argmax()
>> 6

# 원핫 인코딩으로 인해서 0~9까지 총 10개 항목에 대한 확률을 반환한다
# 그렇기에 argmax()를 이용해서 가장 큰 값의 인덱스를 확인해야 예측값을 알 수 있다.
plt.figure(figsize=(10, 10))
n = 10

for i in range(25):

    plt.subplot(5, 5, i+1)
    plt.imshow(X_test[n + i], 'gray')
    plt.title(f'Predict : {pred[i].argmax()}, Label : {y_test[n + i]}')
    plt.axis('off')
plt.tight_layout()
plt.show()

 

샘플로 보았을 때는 1개를 잘못 예측했고, 정답값 4를 0으로 예측한 것을 알 수 있다.

 

 

'Bootcamp_zerobase > Tensorflow' 카테고리의 다른 글

SubClass 모델링 : SubClass 및 모델구현  (0) 2025.04.07
Functional Modeling : Functional API 및 간단한 ResNet 구현  (0) 2025.04.03
CNN (VGGNet) #1  (0) 2025.04.01
Tensorflow #2 : 선형회귀 및 Perceptron  (0) 2025.03.27
Tensorflow #1 : 텐서플로우 기본개념  (1) 2025.03.27
'Bootcamp_zerobase/Tensorflow' 카테고리의 다른 글
  • Functional Modeling : Functional API 및 간단한 ResNet 구현
  • CNN (VGGNet) #1
  • Tensorflow #2 : 선형회귀 및 Perceptron
  • Tensorflow #1 : 텐서플로우 기본개념
Loft_mind
Loft_mind
건축 전공자의 전공 갈아타기
  • Loft_mind
    오늘의 설계
    Loft_mind
  • 공지사항

    • 분류 전체보기 (37) N
      • Bootcamp_zerobase (36) N
        • Pytorch (12)
        • Image Augmentation (2)
        • YOLO & RNN (4)
        • Git & GitHub (2)
        • Tensorflow (11)
        • OpenCV (5) N
      • Architecture (0)
  • 블로그 메뉴

    • 홈
    • 태그
  • 태그

    역전파
    mnist
    subclass
    zerobase
    rnn
    제로베이스
    github
    CNN
    PIL
    pytorch
    정규표현식
    ResNet
    YOLO
    deeplearning
    tensorflow
    image augmentation
    RE
    ComputerVision
    컴퓨터 비전
    opencv
    bash
    autoencoders
    VGGNET
    git
  • hELLO· Designed By정상우.v4.10.3
Loft_mind
Tensorflow #3 : 딥러닝의 흐름, 간단한 Model 학습
상단으로

티스토리툴바