当我在Keras中运行model.fit_generator时,此输出在控制台中的含义是什么?

时间:2019-05-30 21:17:09

标签: python tensorflow keras deep-learning conv-neural-network

我是与Keras合作的新手。该代码可以正常工作,但是我想知道时代中显示的值的含义。我正在使用以下代码。

46/46226/277处的这些数字是什么意思?为什么通常只出现100/100时出现2?

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 :(得分:0)

  

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...