는 방법을 올바르게 사용하는 ImageDataGenerator 에 Keras?

0

질문

내가 연주로의 확대에서 데이터 Keras 요즘을 사용하고 기본 ImageDataGenerator. 나는 하드 방법을 배운 실제로 발생기,아 반복기(기 type(train_aug_ds)<class 'keras.preprocessing.image.DirectoryIterator'> 나는 생각은 그것이 반복기). 또한 확인 블로그를 사용하는 방법에 대해,그러나 그들이 응답하지 않는 모든 내 질문이 있습니다.

그래서 나는 내로드 데이터는 다음과 같다:

train_aug = ImageDataGenerator(
    rescale=1./255,
    horizontal_flip=True,
    height_shift_range=0.1,
    width_shift_range=0.1,
    brightness_range=(0.5,1.5),
    zoom_range = [1, 1.5],
)
train_aug_ds = train_aug.flow_from_directory(
    directory='./train',
    target_size=image_size,
    batch_size=batch_size,
)

고 훈련하는 나의 모델 나는 다음과 같다:

model.fit(
    train_aug_ds,
    epochs=150,
    validation_data=(valid_aug_ds,),
)

고 일했다. 내가 조금 어떻게 작동하기 때문에, train_aug_ds 는 발전기,그게 무한히 큰합니다. 와 문서를 말한다:

전달할 때는 무한 반복되는 데이터 집합을 지정해야 합니다 steps_per_epoch 인수입니다.

는 하지 않았다,그러나,그것은 작동합니다. 그것은 어떻게든 추정 번호의 단계는 무엇일까요? 또한,그것에만 사용하는 증강,데이터 또는 그것 또한 사용하는 비-증강현 이미지 배치에서?

그래서 기본적으로,제 질문은 사용하는 방법이 올바르게 발전기와 기능 fit 하는 모든 데이터에서 훈련을 설정함을 원래,비-증강현 이미지와 증강지,그리고 사이클 그것을 통해서 여러 번/계(오른쪽 지금은 그것이 단지 하나의 단계별대)?

keras python tensorflow
2021-11-23 11:26:56
1

최고의 응답

1

나는 생각한 문서 매우 혼동 될 수 있습니다 내가 상상하는 동작이에 따라 다 Tensorflow 및 Keras 버전입니다. 예를 들어,이 ,사용자가를 설명하는 정확한 동작합니다. 일반적으로, flow_from_directory() 는 방법을 읽을 수 있습에서 직접 이미지를 디렉토리고 확장하는 동안 모델이 훈련되고 이미 언급되었듯이 여기에,그것은 반복하는 모든 샘플에서 각각의 폴더에 모든 시대. 다음 예제를 사용하여 확인할 수 있습니다 이런 경우(에 TF2.7)하여 단계별로 시대에서 진행됩:

import tensorflow as tf

BATCH_SIZE = 64

flowers = tf.keras.utils.get_file(
    'flower_photos',
    'https://storage.googleapis.com/download.tensorflow.org/example_images/flower_photos.tgz',
    untar=True)

img_gen = tf.keras.preprocessing.image.ImageDataGenerator(
    rescale=1./255,
    horizontal_flip=True,
)

train_ds = img_gen.flow_from_directory(flowers, batch_size=BATCH_SIZE, shuffle=True, class_mode='sparse')
num_classes = 5

model = tf.keras.Sequential([
  tf.keras.layers.Conv2D(16, 3, padding='same', activation='relu', input_shape=(256, 256, 3)),
  tf.keras.layers.MaxPooling2D(),
  tf.keras.layers.Conv2D(32, 3, padding='same', activation='relu'),
  tf.keras.layers.MaxPooling2D(),
  tf.keras.layers.Conv2D(64, 3, padding='same', activation='relu'),
  tf.keras.layers.MaxPooling2D(),
  tf.keras.layers.Flatten(),
  tf.keras.layers.Dense(128, activation='relu'),
  tf.keras.layers.Dense(num_classes)
])

model.compile(optimizer='adam',
              loss=tf.keras.losses.SparseCategoricalCrossentropy(from_logits=True))

epochs=10
history = model.fit(
  train_ds,
  epochs=epochs
)
Found 3670 images belonging to 5 classes.
Epoch 1/10
 6/58 [==>...........................] - ETA: 3:02 - loss: 2.0608

당신 랩 flow_from_directorytf.data.Dataset.from_generator 다음과 같다:

train_ds = tf.data.Dataset.from_generator(
    lambda: img_gen.flow_from_directory(flowers, batch_size=BATCH_SIZE, shuffle=True, class_mode='sparse'),
    output_types=(tf.float32, tf.float32))

다는 것을 알 수 있 진행 표시줄처럼 보이기 steps_per_epoch 되지 않은 명시적으로 정의:

Epoch 1/10
Found 3670 images belonging to 5 classes.
     29/Unknown - 104s 4s/step - loss: 2.0364

면 이 매개 변수를 추가,당신은 단계를 진행됩:

history = model.fit(
  train_ds,
  steps_per_epoch = len(from_directory),
  epochs=epochs
)
Found 3670 images belonging to 5 classes.
Epoch 1/10
 3/58 [>.............................] - ETA: 3:19 - loss: 4.1357

마지막으로,당신의 질문:

를 사용하는 방법이 올바르게 발전기와 기능에 맞게 모든 데이터에서 훈련을 설정함을 원래,비-증강현 이미지 증강현 이미지,그리고 사이클 그것을 통해서 여러 번/단계입니까?

당신은 단순히 증가 steps_per_epoch 를 넘어 number of samples // batch_size 을 곱하여 어떤 요인에 의하여:

history = model.fit(
  train_ds,
  steps_per_epoch = len(from_directory)*2,
  epochs=epochs
)
Found 3670 images belonging to 5 classes.
Epoch 1/10
  1/116 [..............................] - ETA: 12:11 - loss: 1.5885

지금 대신 58 단계별로 시대를 116.

2021-11-23 17:22:32

다른 언어로

이 페이지는 다른 언어로되어 있습니다

Русский
..................................................................................................................
Italiano
..................................................................................................................
Polski
..................................................................................................................
Română
..................................................................................................................
हिन्दी
..................................................................................................................
Français
..................................................................................................................
Türk
..................................................................................................................
Česk
..................................................................................................................
Português
..................................................................................................................
ไทย
..................................................................................................................
中文
..................................................................................................................
Español
..................................................................................................................
Slovenský
..................................................................................................................