2016-12-15 2 views
4

Keras의 데이터 증가에 대한 자료를 읽었지만 나에게는 아직 모호합니다. 데이터 증가 단계에서 각 입력 이미지에서 생성 된 이미지 수를 제어하는 ​​매개 변수가 있습니까? this example에서 각 이미지에서 생성 된 이미지의 수를 제어하는 ​​매개 변수를 볼 수 없습니다.Keras 데이터 확대 매개 변수

예를 들어 아래 코드에서 각 입력 이미지에서 생성 된 이미지의 수를 제어하고 미리보기라는 폴더에 저장되는 매개 변수 (num_imgs)를 가질 수 있습니다. 실시간 데이터 증가에는이 목적을위한 매개 변수가 없습니다. 모든 입력 이미지가 한 번 생성 한 후 여기에

from keras.preprocessing.image import ImageDataGenerator, array_to_img, img_to_array, load_img 
num_imgs = 20 
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') 

img = load_img('data/train/cats/cat.0.jpg') # this is a PIL image 
x = img_to_array(img) # this is a Numpy array with shape (3, 150, 150) 
x = x.reshape((1,) + x.shape) # this is a Numpy array with shape (1, 3, 150, 150) 

# the .flow() command below generates batches of randomly transformed images 
# and saves the results to the `preview/` directory 
i = 0 
for batch in datagen.flow(x, batch_size=1, 
          save_to_dir='preview', save_prefix='cat', save_format='jpeg'): 
    i += 1 
    if i > num_imgs: 
     break # otherwise the generator would loop indefinitely 

답변

6

데이터 증가가 작동하는 소스 코드를 살펴 수 : 지정된 범위 내에서 무작위로 선택된 매개 변수를 각 학습 시대의 변환에 훈련 집합의 모든 원본 이미지에 적용됩니다. 에포크가 완료된 후, 즉 전체 학습 데이터 세트에 학습 알고리즘을 노출 한 후에, 다음 학습 이포크가 시작되고 원래의 훈련 데이터에 특정 변환을 적용하여 학습 데이터가 다시 한 번 증가된다.

그런 식으로 각 이미지가 증가 된 횟수는 학습 에포크의 수와 같습니다. 리콜 양식 the example that you linked :

# Fit the model on the batches generated by datagen.flow(). 
model.fit_generator(datagen.flow(X_train, Y_train, 
        batch_size=batch_size), 
        samples_per_epoch=X_train.shape[0], 
        nb_epoch=nb_epoch, 
        validation_data=(X_test, Y_test)) 

여기 datagen 객체가 modelnb_epoch 시간으로 설정 훈련을 노출되므로, 각각의 이미지가 nb_epoch 번 증대 될 것입니다. 이 방법으로 학습 알고리즘은 각기 다른 훈련 예가 무작위로 변형되기 때문에 정확히 두 개의 똑같은 훈련 예를 거의 볼 수 없습니다.

+0

도움 주셔서 감사합니다. 따라서 전적으로 1000 개의 이미지가있는 경우 각 신기원에서 1000 개의 새 이미지가 원래 이미지에서 생성되어 교육용 모델로 공급됩니다. 그런 다음, 다음 기점에서 1000 개의 새 이미지가 원본 이미지에서 생성되고 교육을 위해 모델로 공급됩니다. 따라서 모델이 원본 데이터를 보지 못했을 가능성이 있습니다. – SaraG

+0

또 다른 접근법은 새로운 이미지를 생성하고 저장 한 다음 그것을 사용하여 모델을 교육하는 것입니다. 예를 들어 각 입력 이미지에서 10 개의 이미지를 생성하면 10,000 개의 새 이미지가 생깁니다. 그래서 전적으로 교육을 위해 11,000 개의 이미지를 갖게 될 것입니다. 이 접근법 중 어느 것이 더 낫습니까? – SaraG

+1

예, 맞습니다. 모델에 원래 데이터가 표시되지 않을 수도 있습니다. 더 많은 변환이 적용될수록 모델이 원본 데이터를 볼 확률은 줄어 듭니다. 변환 매개 변수의 범위는 해당 확률에도 영향을줍니다. 두 번째 설명에서 제안한 접근법 또한 합리적인 것처럼 보입니다. 어느 것이 더 낳은 것인지 말하기는 어렵습니다. 두 가지 대안을 시도하고 가장 좋은 결과를 산출하는 것을 고를 것입니다! –

3

는 단지 각 입력 이미지에 대한 하나 개의 이미지를 생성, 어떻게 작동하는지 기본적으로, 그것은 다시 시작됩니다.

예를 들어 총 입력 이미지가 하나뿐이기 때문에 이미지가 20 개가 될 때까지 다른 버전의 이미지가 반복적으로 생성됩니다.

는 다음과 같이 여기

관련 문제