n.s*_*.st 6 machine-learning keras tensorflow
如果我想用train_generator训练模型,选择之间有明显的区别
和
目前,我正在训练10个纪元,因为每个纪元都需要很长时间,但是任何显示改进的图形看起来都非常“跳跃”,因为我只有10个数据点。我想如果我使用100个纪元,我可以获得一个更平滑的图形,但是我想首先知道这个图形是否有不利之处
Chr*_*arr 11
根据您所说的,这听起来好像您需要一个更大的batch_size,当然,这可能会影响steps_per_epoch和时期数。
解决跳车
批量较大的含义
何时减少时代
何时调整每个时期
每个纪元的步数与纪元无关。
当然,如果你的生成器在 1 epoch 中一次性通过所有训练数据,那么你会想要什么。为了实现这一点,您应该为每个时期提供等于批次数的步骤,如下所示:
steps_per_epoch = int( np.ceil(x_train.shape[0] / batch_size) )
Run Code Online (Sandbox Code Playgroud)
从上式可知, 越大batch_size, 越低steps_per_epoch。
接下来,您将根据所选验证选择纪元。(选择你认为最好的)
steps_per_epoch告诉网络一个纪元中包含多少个批次。
根据定义,epoch当数据集完整地运行过模型一次后,就被认为是完整的。换句话说,这意味着所有的训练样本都已经跑遍了模型。(为了进一步讨论,我们假设训练示例的大小为“m”)。
同样根据定义,我们知道“批量大小”在 [1, m] 之间。
以下是TensorFlow 页面的内容steps_per_epoch
如果您只想对此数据集中的特定数量的批次运行训练,则可以传递steps_per_epoch参数,该参数指定模型在进入下一个纪元之前应使用此数据集运行多少个训练步骤。
现在假设您的training_sizem = 128和batch_size b = 16,这意味着您的数据被分为8个批次。根据上面的引用,您可以分配的最大值steps_per_epoch是 8,如@Ioannis Nasios 的答案之一中计算的那样。
但是,您不必仅将该值设置为 8(如我们的示例中所示)。您可以选择 1 到 8 之间的任何值。您只需要注意,训练将仅使用此数量的批次进行。
正如@Chris Farr 在这个答案中正确提到的那样,错误值跳跃的原因可能是批次的大小。
如果这样做,数据集不会在每个时期结束时重置,而是我们只是继续绘制下一批。数据集最终会耗尽数据(除非它是无限循环的数据集)。
低值的优点steps_per_epoch是不同的时期使用不同的数据集进行训练(一种正则化)。但是,如果训练规模有限,那么仅使用堆栈的子集将不是我们想要的。这是一个人必须做出的决定。
| 归档时间: |
|
| 查看次数: |
7609 次 |
| 最近记录: |