Phi*_*nge 21 parameters generator data-fitting keras
我在Python中使用带有Tensorflow后端的Keras.更精确的tensorflow 1.2.1及其内置的contrib.keras lib.
我想使用fit_generator一个Sequential模型对象,但我对作为方法参数传递的内容感到困惑.
number of training batches = uniqueTrainingData / batchSize???; = uniqueValidationData /批量大小???如上所示??? 我真的不知道validation_steps是什么意思.我知道上面链接的doc(Number of steps to yield from validation generator at the end of every epoch)的定义,但这只会混淆我在给定的上下文中.从文档中我知道validation_data生成器必须生成数据,在表单中标记元组(inputs, targets).与此相反,上述陈述表明在每个时期结束时必须存在多个"从验证生成器产生的步骤",在这种情况下,这意味着在每个训练时期之后将产生多个验证批次.
关于的问题validation_steps:
uniqueValidationData / batches不是uniqueValidationData / epochs?例如,100个时期的100个验证批次而不是x验证批次,其中x可能小于或大于指定的时期数量,这不是更好吗?或者:如果你的验证批次比epoches的数量少得多,那么模型是否在没有验证剩余时期的情况下进行训练,或者验证集是否会重复使用/重新洗牌+重复使用?关于的其他问题use_multiprocessing:
Dan*_*ler 44
验证生成器与训练生成器完全相同.您可以定义每个时期将使用的批次数.
steps_per_epoch批次. validation_steps批次.但验证数据与培训数据完全无关.根据培训批次,没有必要单独验证批次(我甚至会说这样做是没有意义的,除非你有非常具体的意图).此外,训练数据中的样本总数与测试数据中的样本总数无关.
拥有多批次的目的只是为了节省计算机的内存,因此您可以一次测试一个较小的包.您可能会发现批量大小适合您的记忆或预期的训练时间并使用该大小.
也就是说,Keras为您提供了一个完全免费的方法,因此您可以根据需要确定培训和验证批次.
理想情况下,您一次使用所有验证数据.如果您仅使用部分验证数据,您将获得每个批次的不同指标,可能会让您认为您的模型实际上没有变得更糟或更好,您只是测量了不同的验证集.
这就是他们建议的原因validation_steps = total_validation_samples // validation_batch_size.从理论上讲,理论上你应该在每个时代训练你的整个数据.
所以,从理论上讲,每个时代都会产生:
steps_per_epoch = TotalTrainingSamples / TrainingBatchSize validation_steps = TotalvalidationSamples / ValidationBatchSize 基本上,两个变量是:每个时期会产生多少批次.
这确保了在每个时代:
然而,完全取决于您如何分离培训和验证数据.
如果你想有每一个时代不同批次(使用比你的整个数据少时期),它的确定,只是通过steps_per_epoch=1或validation_steps=1,例如.发电机每个时期后没有重置了,所以第二个时期将采取第二批,依此类推,直到它再次循环到第一批.
我更喜欢每个时期训练整个数据,如果时间太长,我会使用一个callback显示每批末尾的日志:
from keras.callbacks import LambdaCallback
callbacks = callbacks=[LambdaCallback(on_batch_end=lambda batch,logs:print(logs))]
Run Code Online (Sandbox Code Playgroud)
我永远无法使用use_multiprocessing=True它,它在第一个时代的开始时冻结.
我注意到这workers与从发电机预装了多少批次有关.如果您定义max_queue_size=1,您将workers预先加载完全数量的批次.
他们建议您在多处理时使用keras序列.序列几乎与生成器一样,但它跟踪每个批次的顺序/位置.
| 归档时间: |
|
| 查看次数: |
20457 次 |
| 最近记录: |