Tensorflow : data 다루기 #3

2025. 4. 22. 22:34·Bootcamp_zerobase/Tensorflow

2025.04.19

 

Part.11 텐서플로

Chapter 07. Data 다루기

  • 05_ImageDataGenerator(1)
  • 06_ImageDataGenerator(2)
  • 07_ImageDataGenerator(3)

 

 

ImageDataGenerator

 

flow(  ) 함수

ImageDataGenerator 기능이란, 데이터를 불러오는 동시에 여러 가지 전처리를 쉽게 구현할 수 있는 tf.keras의 기능.

기본적으로 데이터를 모두 메모리에 저장하고 진행하는 기능.

## ImageDataGenerator

from tensorflow.keras.preprocessing.image import ImageDataGenerator


datagen = ImageDataGenerator(
    rotation_range = 20,
    width_shift_range = 0.2,
    height_shift_range = 0.2,
    horizontal_flip = True
)

 

 

 

 

ImageDataGenerator 객체생성 후, flow( ) 메서드를 이용해서 다룰 수 있다. 이는 데이터 증강의 한 가지 방법이다. (Data Augmentaion)

기본적으로 이미지 데이터의 수가 많지 않거나, Overfitting 방지하기 위해서 사용한다.

flow( ) 는 데이터를 모두 메모리에 불러두고 사용한다.

 

데이터는 Cifar10 데이터셋을 사용하고, 이전에 Class로 만들어두었던 파일을 .py 확장자 변경해서 바로 import 한다.

# 이전시간에 만들어두었던 class 바로 import (.py 파일로 변환)
from Cifar10DataLoader import Cifar10DataLoader

cifar10_loader = Cifar10DataLoader()
train_x, train_y = cifar10_loader.get_train_dataset()

 

 

 

 

 

 

불러와진 데이터셋에 아까 만들었던 ImageDataGenerator를 적용해보면...

next(iter(datagen.flow((train_x, train_y))))

 

 

 

 

 

이렇게 불러와지는 것을 알 수 있다. (train_x, train_y) 전체를 넣었지만, 결과는 32개만 나온 것을 알 수 있는데, 기본적으로 flow( ) 는 배치를 생성하고 아무 지정이 없을 때는 batch_size 32를 디폴트 값으로 한다.

 

 

 

 

이제 증강된 사진들과 원본 사진을 확인해 보면아래와 같다. ( flow( ) 에서는 shuffle=True가 디폴트값이기에, False를 지정해 줘야 순서가 변경되지 않는다 )

# 증강된 사진

for i in range(6):
    plt.subplot(2, 3, i+1)
    plt.imshow(x[i])
    plt.axis('off')

plt.tight_layout()
plt.show()

 

 

# 원본
for i in range(6):
    plt.subplot(2, 3, i+1)
    plt.imshow(train_x[i])
    plt.axis('off')

plt.tight_layout()
plt.show()

 

 

 

 

 

flow_from_directory(  )

데이터가 너무 커서 메모리에 한 번에 모두 올릴 수 없을 때 사용한다.

디렉터리 경로만 지정해 주면, ImageDataGenerator가 이미지를 순차적으로 불러오면서 학습을 진행한다.

 

다만, 전제조건이 아래와 같다

  • 최상위 디렉터리 안에 클래스별로 서브 폴더가 있어야 한다.
  • 각 서브 폴더 이름이 클래스 이름 또는 라벨 인덱스여야 한다.
  • 서브 폴더 안에는 해당 클래스에 해당하는 이미지들이 저장되어 있어야 한다.

 

 

 

 

해당 디렉터리를 기반으로 ImageDataGenerator를 진행하면.. 아래와 같이 실행된다.

input_shape = (28, 28, 1)
batch_size = 32

gen = datagen.flow_from_directory(
    mnnist_train_dir,
    target_size = input_shape[:2],
    batch_size = batch_size,
    color_mode = 'grayscale',    #1채널, 흑백
    shuffle = False

)

# shuffle은 True하는게 맞지만, 원본데이터와 증강데이터를 비교하기 위해서 False처리

성공 메세지

 

 

 

 

잘 진행되었는지 아래처럼 조회할 수 있다.

 

 

 

 

 

flow_from_DataFrame(  )

데이터 로드부터 다시 시작한다. 폴더의 path를 지정하는 것은 위와 동일하지만 이번에는 pandas로 확인한다.

cifar 데이터의 csv파일에는 각 사진데이터에 대한 경로데이터와 클래스에 대한 데이터가 저장되어 있다.

# 경로 설정
datasets_path = "G:\Zerobase_data_1(24)\class\zerobase_datasciences_school__class__part__11__15__230120
                   \Part11__tensorflow_and_Part12__pytorch\deeplearning_frameworks_zerobaseDSS
                   \datasets/"


# 폴더 내 파일, 폴더 리스트 조회
import os
os.listdir(datasets_path + '/cifar')
	>> ['labels.txt', 'test', 'test_dataset.csv', 'train', 'train_dataset.csv']

# pd.read_csv 적용
import pandas as pd
train_dataset_raw = datasets_path + '/cifar/train_dataset.csv'
train_dataset_pd = pd.read_csv(train_dataset_raw)
train_dataset_pd.head()

 

 

 

 

동일하게 ImageDataGenerator를 설정한다.

from tensorflow.keras.preprocessing.image import ImageDataGenerator

datagen = ImageDataGenerator(
    rotation_range = 20,
    width_shift_range = 0.2,
    height_shift_range = 0.2,
    horizontal_flip = True
)

gen = datagen.flow_from_dataframe(
    train_dataset_pd,
    x_col = 'path',
    y_col = 'class_name',
    target_size = (32, 32),
    color_mode = 'rgb',
    class_model = 'categorical',
    batch_size = 32
)

 

 

 

잘 들어와 졌는지 확인해 보면.... 아래와 같이 shape을 통해 확인할 수 있다. 클래스도 10개 자동으로 분류되었다.

x, y = next(iter(gen))

x.shape, y.shape
	>> ((32, 32, 32, 3), (32, 10))

 

 

 

확인하였으면 아래와 같이 학습 진행 할 수 있다.

## 모델 학습

hist = model.fit(gen, epochs=2, steps_per_epoch=len(gen))

 

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

Tensorflow : data 다루기 #2  (0) 2025.04.19
Tensorflow : data 다루기 #1  (2) 2025.04.19
Evaluation : Tensorboard 및 모델의 Save, Load  (0) 2025.04.16
Model 학습 : 텐서플로 모델학습 (fit( ) vs Training Logic)  (0) 2025.04.13
SubClass 모델링 : SubClass 및 모델구현  (0) 2025.04.07
'Bootcamp_zerobase/Tensorflow' 카테고리의 다른 글
  • Tensorflow : data 다루기 #2
  • Tensorflow : data 다루기 #1
  • Evaluation : Tensorboard 및 모델의 Save, Load
  • Model 학습 : 텐서플로 모델학습 (fit( ) vs Training Logic)
Loft_mind
Loft_mind
건축 전공자의 전공 갈아타기
  • Loft_mind
    오늘의 설계
    Loft_mind
  • 공지사항

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

    • 홈
    • 태그
  • 태그

    bash
    제로베이스
    PIL
    image augmentation
    mnist
    YOLO
    autoencoders
    ComputerVision
    컴퓨터 비전
    rnn
    deeplearning
    subclass
    git
    CNN
    pytorch
    ResNet
    opencv
    tensorflow
    RE
    zerobase
    역전파
    VGGNET
    github
    정규표현식
  • hELLO· Designed By정상우.v4.10.3
Loft_mind
Tensorflow : data 다루기 #3
상단으로

티스토리툴바