"Keras:데이터 전처리"의 두 판 사이의 차이

Pywiki
둘러보기로 가기 검색하러 가기
잔글
61번째 줄: 61번째 줄:
 
         batch_size=20,
 
         batch_size=20,
 
         class_mode='binary')
 
         class_mode='binary')
 +
</syntaxhighlight>
 +
|-
 +
|이미지 증식
 +
|이미지의 학습엔 많은 이미지가 필요한데, 천당 단위의 수준으론 너무 적다. 때문에 회전, 반전 등을 통해 이미지를 증폭한다.
 +
(나중에 이용할 때 제대로 찾아 정리하자...)
 +
 +
 +
근본적으로 원본 이미지에서 달라진 게 아니기 때문에 과적합의 문제를 피해갈 수는 없다.
 +
|<syntaxhighlight lang="python">
 +
datagen = ImageDataGenerator(
 +
      rotation_range=40,        # 회전
 +
      width_shift_range=0.2,    # 가로이동
 +
      height_shift_range=0.2,  # 세로이동
 +
      shear_range=0.2,          # 전단변환
 +
      zoom_range=0.2,          # 확대
 +
      horizontal_flip=True,    # 좌우반전
 +
      fill_mode='nearest')      # 빈 공간을 어떻게 채울지.(nearest는 주변픽셀로 채운다.)
 
</syntaxhighlight>
 
</syntaxhighlight>
 
|}
 
|}
 
[[분류:Keras]]
 
[[분류:Keras]]
 
[[분류:데이터 전처리]]
 
[[분류:데이터 전처리]]

2021년 12월 7일 (화) 17:31 판

1 개요

케라스 자체적으로도 데이터 전처리를 제공한다.

2 전처리

의도 설명 방법
정규화 평균 0, 표준편차 1로 정규화한다.
from tensorflow.keras.layers import Normalization

training_data = np.random.randint(0, 256, size=(64, 200, 200, 3)).astype("float32")  # 예시데이터

normalizer = Normalization(axis=-1)     # 정규화 객체 생성.
normalizer.adapt(training_data)         # 정규화 방법 지정.
normalized_data = normalizer(training_data) # 데이터에 정규화 진행.
이미지 전처리 이미지를 처리할 땐 이미지를 자르거나 수치의 제한을 설정하는 과정이 필요할 때가 있다.


케라스에선 이미지처리를 위한 도구가 있다.

from tensorflow.keras.layers import CenterCrop
from tensorflow.keras.layers import Rescaling

# Example image data, with values in the [0, 255] range
training_data = np.random.randint(0, 256, size=(64, 200, 200, 3)).astype("float32")

cropper = CenterCrop(height=150, width=150)
scaler = Rescaling(scale=1.0 / 255)

output_data = scaler(cropper(training_data))
print("shape:", output_data.shape)  # 64개의 150,150 크기의 3채널 데이터임을 알려준다.
print("min:", np.min(output_data))  # 가장 작은 데이터는 0
print("max:", np.max(output_data))  # 가장 큰 데이터는 1
이미지 사진파일을 읽고, 컨텐츠를 RGB로 디코딩, 텐서로 변환, 픽셀 정규화를 한번에 해주는 도구가 있다.
from keras.preprocessing.image import ImageDataGenerator

# 모든 이미지를 1/255로 스케일을 조정합니다
train_datagen = ImageDataGenerator(rescale=1./255)
test_datagen = ImageDataGenerator(rescale=1./255)

train_generator = train_datagen.flow_from_directory(
        train_dir,  # 타깃 디렉터리
        target_size=(150, 150),  # 모든 이미지를 150 × 150 크기로 바꿉니다
        batch_size=20,
        class_mode='binary')  # binary_crossentropy 손실을 사용할 땐 이진 레이블.

validation_generator = test_datagen.flow_from_directory(
        validation_dir,
        target_size=(150, 150),
        batch_size=20,
        class_mode='binary')
이미지 증식 이미지의 학습엔 많은 이미지가 필요한데, 천당 단위의 수준으론 너무 적다. 때문에 회전, 반전 등을 통해 이미지를 증폭한다.

(나중에 이용할 때 제대로 찾아 정리하자...)


근본적으로 원본 이미지에서 달라진 게 아니기 때문에 과적합의 문제를 피해갈 수는 없다.

datagen = ImageDataGenerator(
      rotation_range=40,        # 회전
      width_shift_range=0.2,    # 가로이동
      height_shift_range=0.2,   # 세로이동
      shear_range=0.2,          # 전단변환
      zoom_range=0.2,           # 확대
      horizontal_flip=True,     # 좌우반전
      fill_mode='nearest')      # 빈 공간을 어떻게 채울지.(nearest는 주변픽셀로 채운다.)