我已经在Keras训练了几种模型。我的训练集中有39、592个样本,而验证集中有9,899个样本。我使用的批量大小为2。
在检查代码时,我发现生成器可能丢失了一些数据。
这是我的生成器的代码:
train_datagen = ImageDataGenerator(
rescale=1. / 255,
shear_range=0.2,
zoom_range=0.2,
horizontal_flip=True)
val_datagen = ImageDataGenerator(rescale=1. / 255)
train_generator = train_datagen.flow_from_directory(
train_dir,
target_size=(224, 224)
batch_size=batch_size,
class_mode='categorical')
validation_generator = val_datagen.flow_from_directory(
val_dir,
target_size=(224, 224),
batch_size=batch_size,
class_mode='categorical')
我四处寻找发电机的行为,并找到以下答案: what if steps_per_epoch does not fit into numbers of samples?
我以这种方式计算了steps_per_epoch和validation_steps:
steps_per_epoch = int(number_of_train_samples / batch_size)
val_steps = int(number_of_val_samples / batch_size)
使用此链接中的代码以及我自己的批次大小和样本数量,我得到了以下结果: 对于train_generator是“缺少最后一批”,对于val_generator是“奇怪的行为”。
恐怕我不得不再次训练我的模型。我应该为steps_per_epoch和validation_steps选择什么值?有没有一种方法可以对这些变量使用确切的值(除了将batch_size设置为1或删除一些样本之外)?我还有其他几个带有不同样本数量的模型,我认为它们都缺少了一些批次。任何帮助将非常感激。
两个相关问题:
1-关于我已经训练的模型,它们是否可靠且经过适当训练?
2-如果我使用以下值设置这些变量,将会发生什么:
steps_per_epoch = np.ceil(number_of_train_samples / batch_size)
val_steps = np.ceil(number_of_val_samples / batch_size)
在训练和验证期间,我的模型会在每个时期多次看到一些图像吗?还是这是我问题的解决方案?!
答案 0 :(得分:0)
由于Keras数据生成器旨在无限循环,因此steps_per_epoch
表示您将在单个时期内从生成器中提取新批次的次数。因此,如果您仅购买steps_per_epoch = int(number_of_train_samples / batch_size)
,那么您的最后一批将少于batch_size
个项目,并且将被丢弃。但是,在您的情况下,每个训练时期丢失1张图像并不是什么大问题。验证步骤也是如此。综上所述:由于丢失的元素数量很少,因此模型正确[几乎:)接受了训练。
与实现ImageDataGenerator
https://keras.io/preprocessing/image/#imagedatagenerator-class相对应,如果您的步骤数大于预期,则在达到最大样本数后,由于数据被循环,您将从头开始接收新的批次。在您的情况下,如果steps_per_epoch = np.ceil(number_of_train_samples / batch_size)
,则每个时期您将另外收到一批,其中包含重复的图像。
答案 1 :(得分:0)
除了 Greeser 的回答, 为避免丢失一些训练样本,您可以使用此函数计算步骤:
def cal_steps(num_images, batch_size):
# calculates steps for generator
steps = num_images // batch_size
# adds 1 to the generator steps if the steps multiplied by
# the batch size is less than the total training samples
return steps + 1 if (steps * batch_size) < num_images else steps