![机器学习实战:模型构建与应用](https://wfqqreader-1252317822.image.myqcloud.com/cover/359/44389359/b_44389359.jpg)
上QQ阅读APP看书,第一时间看更新
2.7 停止训练
到目前为止在每种情况下,我们都固定了训练的回合数。虽然这可行,但我们可能想要一直训练直到达到所需的准确率为止。因此,举例来说,如果我们想训练直到模型在训练集上达到95%的准确率而不知道这需要多少回合数,要怎么做呢?
最简单的方法是在训练中使用一个回调函数。我们来看看更新后使用回调函数的代码:
![](https://epubservercos.yuewen.com/A03276/23627497809544006/epubprivate/OEBPS/Images/049-2.jpg?sign=1738839793-uPoRb65b3Js47uyK0WS3Zdyo2sHpNv1d-0-586b569175bd0327730b8daa8c3cc1a8)
让我们看看做了什么改动。首先,我们创建了一个名为myCallback
的新类。它需要一个tf.keras.callbacks.Callback
作为参数。在它里面我们定义了on_epoch_end
函数,该函数将为我们提供有这个回合的记录的详细信息。在这些记录里有一个准确率值,所以我们要做的就是看看它是否大于0.95(或95%)。如果是,我们可以通过self.model.stop_training=True
来停止训练。
当我们指定了它,就创建了一个callbacks
对象作为myCallback
函数的实例。
现在来查看model.fit
语句。你会看到我已经更新了它来训练50个回合,然后添加一个callbacks
参数。为此,我传递了这个callbacks
对象。
训练时,回调函数将在每个回合结束后被调用。因此,每个回合结束后,你将检查准确率,并且大约34个回合后,你将会看到训练将结束,因为训练已经达到95%的准确率(由于开始的随机初始化,你的数字也许略有不同,但是它可能会很接近34):
![](https://epubservercos.yuewen.com/A03276/23627497809544006/epubprivate/OEBPS/Images/050-1.jpg?sign=1738839793-vaAqWVwYC5xjjfNEFIWIFxSClyVwIxXN-0-aeeef8ab5a3b676bfea702ca0ecb1a83)