कैसे करने के लिए सही ढंग से उपयोग 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 है करने के लिए सभी डेटा में प्रशिक्षण सहित सेट, मूल, गैर-संवर्धित छवियों और संवर्धित छवियों, और करने के लिए चक्र के माध्यम से यह कई बार/कदम (सही अब ऐसा लगता है कि यह करता है केवल एक कदम प्रति epoch)?

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

सबसे अच्छा जवाब

1

मुझे लगता है कि दस्तावेज काफी भ्रमित हो सकते हैं और मैं व्यवहार की कल्पना के आधार पर अलग है अपने ... बदलेगी देश और Keras संस्करण है । उदाहरण के लिए, यह पोस्ट, उपयोगकर्ता का वर्णन सही व्यवहार की उम्मीद कर रहे हैं. आम तौर पर, flow_from_directory() विधि की अनुमति देता है आप को पढ़ने के लिए छवियों से सीधे एक निर्देशिका और उन्हें बढ़ाने, जबकि अपने मॉडल प्रशिक्षित किया जा रहा है और के रूप में पहले से ही कहा गया है, यहाँ, यह दोहराता के लिए हर नमूने में प्रत्येक फ़ोल्डर के लिए हर युग में. निम्न का उपयोग कर उदाहरण के लिए, आप जाँच कर सकते हैं कि इस मामले में है (TF पर 2.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_directory के साथ tf.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 के चरणों के प्रति epoch आप 116.

2021-11-23 17:22:32

अन्य भाषाओं में

यह पृष्ठ अन्य भाषाओं में है

Русский
..................................................................................................................
Italiano
..................................................................................................................
Polski
..................................................................................................................
Română
..................................................................................................................
한국어
..................................................................................................................
Français
..................................................................................................................
Türk
..................................................................................................................
Česk
..................................................................................................................
Português
..................................................................................................................
ไทย
..................................................................................................................
中文
..................................................................................................................
Español
..................................................................................................................
Slovenský
..................................................................................................................

इस श्रेणी में लोकप्रिय

लोकप्रिय सवाल इस श्रेणी में