Я новичок в работе с Керасом. Код работает корректно, но хотелось бы узнать значение показанных в эпохах значений. Я использую следующий код.
Где написано 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 ...
Можешь показать свой model.fit
?
@ShubhamPanchal Спасибо! и где я могу найти, почему 46 и 226? Я предполагаю, что это numberImages/batch_size
@ХаБом Да! добавлен
steps_per_epoch: Total number of steps (batches of samples) to yield from generator before declaring one epoch finished and starting the next epoch. It should typically be equal to the number of unique samples of your dataset divided by the batch size.
Для обучения у вас есть 7230 изображений, это означает 226 пакетов по 32 изображения. Это также steps_per_epoch
, который обычно рассчитывается по steps_per_epoch = train_generator.n/batch_size
. Но здесь вы объявляете steps_per_epoch=pasos (=1000)
, что больше, чем доступные тренировочные пакеты, поэтому потребуется 226.
validation_steps: Total number of steps (batches of samples) to yield from validation_data generator before stopping at the end of every epoch. It should typically be equal to the number of samples of your validation dataset divided by the batch size. Optional for Sequence: if unspecified, will use the len(validation_data) as a number of steps.
Здесь вы снова объявляете validation_steps=300
, который выше, чем доступные пакеты проверки (1446/32 = 46 пакетов). Если вы не используете validation_steps
, вы будете видеть только обучение 226/226 [======] - 8s 36ms/step...
каждую эпоху.
46/46 и 226/226 показывают партию, которая в данный момент обучается.