Как правильно вызывать и устанавливать аргументы для генератора Keras Fit - PullRequest
0 голосов
/ 14 мая 2019

Я новичок в Keras, поэтому я путаюсь между документацией Keras и примерами использования fit_generator другими людьми. Когда я тестировал этот код с целью обучения 32 изображений за раз, все изображения (в нашем случае 100) в каждую эпоху, и заново обучал данные (обозначенные 2 эпохами):

# Create generator that generate an image and a label one at a time (because loading all data into memory will freeze my laptop)

def generate_transform(imgs, lbls):
    while 1:       
        for i in range(len(imgs)):
            img = np.array(cv2.resize(imgs[i], (224, 224)))            
            lbl = to_categorical(lbls[i], num_classes=10)
            yield (img, lbl)  

history =  model.fit_generator(generate_transform(x[:100], y[:100]),
                                   steps_per_epoch=100/32,
                                   samples_per_epoch=100, 
                                   nb_epoch=2,
                                   validation_data=generate_transform(x_test[:100], y_test[:100]),
                                   validation_steps=100)
                                   #nb_val_samples=100)

Я получил это предупреждение пользователя:

D:\Users\jason\AppData\Local\Continuum\Anaconda3\lib\site-packages\ipykernel_launcher.py:8: UserWarning: The semantics of the Keras 2 argument `steps_per_epoch` is not the same as the Keras 1 argument `samples_per_epoch`. `steps_per_epoch` is the number of batches to draw from the generator at each epoch. Basically steps_per_epoch = samples_per_epoch/batch_size. Similarly `nb_val_samples`->`validation_steps` and `val_samples`->`steps` arguments have changed. Update your method calls accordingly.

D:\Users\jason\AppData\Local\Continuum\Anaconda3\lib\site-packages\ipykernel_launcher.py:8: UserWarning: Update your `fit_generator` call to the Keras 2 API: `fit_generator(<generator..., steps_per_epoch=100, validation_data=<generator..., validation_steps=100, epochs=2)`

И результат выглядел так:

Epoch 1/2
100/100 [==============================] - 84s 836ms/step - loss: 3.0745 - acc: 0.4500 - val_loss: 2.3886 - val_acc: 0.0300
Epoch 2/2
100/100 [==============================] - 86s 864ms/step - loss: 0.3654 - acc: 0.9000 - val_loss: 2.4644 - val_acc: 0.0900

Мои вопросы:

  1. Верен ли мой вызов с этими аргументами и их значениями?

  2. Тренировалась ли моя модель с 32 изображениями и метками на каждом шаге и обучалась ли она с шагом 100/32 за эпоху?

  3. Требуется ли использовать аргумент steps_per_epoch?

  4. Какой аргумент мне следует использовать: validation_steps или nb_val_samples?

  5. Будет ли моя модель проверять все 100 образцов генератора проверки достоверности (как указано x_test[:100]) 100 раз (как указано validation_steps=100), или она будет проверять только 100 раз по одной выборке каждая (поскольку только генератор проверки дать один образец за раз)? Почему на выходе не показывается количество шагов?

  6. Использовала ли моя модель тренировочный вес с первой эпохи для повторной тренировки тех же данных, поэтому точность обучения увеличилась с 0,45 в первой эпохе до 0,9 во второй?

Не могли бы вы помочь мне с вышеуказанными вопросами?

Заранее спасибо.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...