kaggle Dogs vs Cats Dataset - https://www.kaggle.com/c/dogs-vs-cats
[주요 코드 리뷰]
from tensorflow.keras.preprocessing.image import ImageDataGenerator
base_dir = '/tmp/cats_and_dogs_filtered'
train_dir = os.path.join(base_dir, 'train')
train_datagen = ImageDataGenerator( rescale = 1.0/255. )
train_generator = train_datagen.flow_from_directory(train_dir, batch_size=20, class_mode='binary', target_size=(150, 150))
history = model.fit(train_generator,
validation_data=validation_generator,
steps_per_epoch=100,
epochs=15,
validation_steps=50,
verbose=2)
ImageDataGenerator는 keras의 preprocessing module에서 이미지 데이터 전처리로 많이 하는 작업들이 미리 함수로 구현되어있는 클래스이다.
이를 통해 이미지 전처리 방법들은 인자로 줄 수 있다.
위의 flow_from_directory는 첫 인자로 파일 경로를 받으며 해당 경로 안에 각 클래스 명으로 된 폴더들이 존재하고 해당 폴더안에 각 클래스의 train data가 위치한 형태로 폴더가 구성되어있어야 한다.
batch_size는 generator가 데이터를 읽어오는 배치 단위가 되며 class_mode는 'binary'와 'categorical'의 옵션이 있고 target_size는 해당 픽셀 차원으로 이미지를 선형 보간하는 것으로 보인다.
이를 통해 대용량 데이터를 한번에 읽어오는게 아닌 generator를 통해 원하는 배치만큼 읽어올 수 있게된다.
fit 혹은 fit_generator의 옵션에서는 steps_per_epoch의 경우 한 에폭당 이루어지는 step수를 의미한다.
즉 steps_per_epoch이 100이면 1epoch에서 1번에 20 batch_size를 학습하는 step이 100번 이루어진다고 생각하면 된다.
validation_step도 마찮가지 이다.
from tensorflow.keras.preprocessing.image import img_to_array, load_img
visualization_model = tf.keras.models.Model(inputs = model.input, outputs = successive_outputs)
우선 load_img같은 경우 이미지 파일의 경로를 인자로 주면 tensor로 해당 이미지를 읽어온다.
img_to_array에는 tensor로 되어있는 이미지 데이터를 넣어주면 numpy로 바꾸어 준다
keras model은 layer와 input을 attribute로 가지며 model.input과 같이 했을 때 해당 model의 input 차원의 keras input을 가져오게 된다.
layer의 경우 output을 attribute로 가진다.
keras model의 경우 fit을 통해 학습이 이루어지면 각 epoch의 loss와 metrics 값들이 딕셔너리 형태로 검색이 가능하다.
대용량 데이터를 load할때 되게 유용하며 상속받아서 method를 만들거나 변형해서 사용하면 되게 유용하다.
tf.keras.preprocessing.image docu
https://www.tensorflow.org/api_docs/python/tf/keras/preprocessing/image
my github repo - https://github.com/han811/tensorflow