Что означает этот вывод в консоли, когда я запускаю model.fit_generator в Keras? - PullRequest
0 голосов
/ 31 мая 2019

Я новичок в работе с Keras. Код работает правильно, но я хотел бы знать значение значений, показанных в эпохах. Я использую следующий код.

Где написано 46/46 и 226/277, что означают эти числа? Почему 2 появляются, когда обычно появляется только, например, 100/100?

import sys
import os
from tensorflow.python.keras.preprocessing.image import ImageDataGenerator
from tensorflow.python.keras import optimizers
from tensorflow.python.keras.models import Sequential
from tensorflow.python.keras.layers import Dropout, Flatten, Dense, Activation
from tensorflow.python.keras.layers import  Convolution2D, MaxPooling2D
from tensorflow.python.keras import backend as K

K.clear_session()


data_entrenamiento = '/content/DatosEntrenamiento' #images

"""
Parameters
"""
epocas=20
longitud, altura = 28, 28
batch_size = 32
pasos = 1000
validation_steps = 300
filtrosConv1 = 32
filtrosConv2 = 64
tamano_filtro1 = (3, 3)
tamano_filtro2 = (2, 2)
tamano_pool = (2, 2)
clases = 3
lr = 0.0004


##Preparamos nuestras imagenes

generator = ImageDataGenerator(
    rescale=1. / 255,
    shear_range=0.2,
    zoom_range=0.2,
    horizontal_flip=True,
    )

test_datagen = ImageDataGenerator(rescale=1. / 255,validation_split=0.2)

entrenamiento_generador = generator.flow_from_directory(
    data_entrenamiento,
    target_size=(altura, longitud),
    batch_size=batch_size,
    class_mode='categorical',
    subset='training')

validacion_generador = test_datagen.flow_from_directory(
    data_entrenamiento,
    target_size=(altura, longitud),
    batch_size=batch_size,
    class_mode='categorical',
    subset='validation')

cnn = Sequential()
cnn.add(Convolution2D(filtrosConv1, tamano_filtro1, padding ="same", input_shape=(longitud, altura, 3), activation='relu'))
cnn.add(MaxPooling2D(pool_size=tamano_pool))

cnn.add(Convolution2D(filtrosConv2, tamano_filtro2, padding ="same"))
cnn.add(MaxPooling2D(pool_size=tamano_pool))

cnn.add(Flatten())
cnn.add(Dense(256, activation='relu'))
cnn.add(Dropout(0.5))
cnn.add(Dense(clases, activation='softmax'))

cnn.compile(loss='categorical_crossentropy',
            optimizer=optimizers.Adam(lr=lr),
            metrics=['accuracy'])

his = cnn.fit_generator(
    entrenamiento_generador,
    steps_per_epoch=pasos,
    epochs=epocas,
    validation_data=validacion_generador,
    validation_steps=validation_steps)

Вывод:

Found 7230 images belonging to 3 classes.
Found 1446 images belonging to 3 classes.

Epoch 1/20

46/46 [=========] - 1s 21ms/step...

226/226 [======] - 8s 36ms/step...

Epoch 2/20

46/46 [=========] - 1s 21ms/step ...

226/226 [=======] - 8s 35ms/step ... 

1 Ответ

0 голосов
/ 31 мая 2019

steps_per_epoch: Общее количество шагов (партий выборок), которые должны быть получены от генератора до объявления одной эпохи законченной и начала следующей эпохи.Обычно оно должно быть равно количеству уникальных выборок вашего набора данных, разделенному на размер пакета.

Для обучения у вас есть 7230 изображений, это означает 226 пакетов из 32 изображений.Это также steps_per_epoch, который обычно рассчитывается как steps_per_epoch = train_generator.n/batch_size.Но здесь вы объявляете steps_per_epoch=pasos (=1000), что больше, чем доступные обучающие партии, поэтому потребуется 226.

validation_steps: общее количество шагов (пакетов выборок), которые нужно получить из генератора validation_data до остановки в концекаждой эпохи.Обычно оно должно быть равно числу выборок вашего проверочного набора данных, деленному на размер пакета.Необязательно для последовательности: если не указано, будет использоваться len (validation_data) в качестве количества шагов.

Здесь снова вы объявляете validation_steps=300, что выше, чем доступные пакеты проверки (1446/32 =46 партий).Если вы не используете validation_steps, вы будете видеть только тренировку 226/226 [======] - 8s 36ms/step... каждую эпоху.

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