在Keras中,可以选择将验证集批次的大小设置为1:
valid_batches = ImageDataGenerator().flow_from_directory(valid_path, ... batch_size=1)
模型是否正确使用验证数据中的一个对象在每个训练数据时代之后验证模型?如果是这种情况,那么我的模型不应该得到非常好的验证分数。但是当我运行模型时,它运行没有任何问题,不断改进,似乎使用许多验证对象进行评估。有人可以解释一下吗?谢谢。
答案 0 :(得分:1)
你真的在那里给我们提供的信息很少,所以我会尝试给你提供你需要的信息,以便理解并自己解决。
valid_batches = ImageDataGenerator().flow_from_directory(valid_path, ... batch_size=1)
这为您提供了一个发电机。它会执行python生成器所做的事情:产生批量的验证数据,这些批次的大小将为1。
但是,当你这样做时:
model.fit_generator(train_batches, validation_data=valid_batches, ... )
keras做的是使用您的生成器获取一些验证数据。但是在调用valid_batches之后它不会停止,它会产生几个setps。批量不是您的整个验证集,keras假定您将按批次为其提供验证数据集。所以它会根据问题多次迭代你的validation_data生成器。
在一个验证步骤中指定要生成批次的次数的方法是使用validation_steps
参数,如下所示:
model.fit_generator(train_batches, validation_data=valid_batches, validation_steps=10... )
这样,您的验证将针对每次执行的验证使用validation_steps * batch_size = 10 * 1 = 10
个样本。
我希望它有所帮助:-)如果没有,请更具体地说明您的代码。一个好的堆栈溢出问题应包含一个可重现的错误代码。