![神经网络设计与实现](https://wfqqreader-1252317822.image.myqcloud.com/cover/765/38894765/b_38894765.jpg)
2.4.3 XOR问题中的TensorBoard
TensorBoard默认情况下随TensorFlow一起使用,因此要启动TensorBoard,我们只需要在打开的控制台输入保存网络代码的位置即可:
![](https://epubservercos.yuewen.com/96A46E/20422784308285606/epubprivate/OEBPS/Images/045-i.jpg?sign=1738940232-PCdUcpefgkRU5cL1A0UDfAC2FgrLxkqF-0-3cfc9eb4fde6e131b1eaae7ded3aab45)
我们将在屏幕上看到一个URL,可以通过它访问TensorBoard服务器。如果你遵循上述说明,URL应为http://localhost:6006/。它将读取logs文件夹中的文件,它可能暂时是空的,无法看到任何信息。
开始记录前,我们必须修改先前编写的代码。这里将使用函数。
回调只是在训练过程的给定阶段应用的一组函数。在训练过程中,我们可以使用它们来查看模型的内部状态和统计信息。要定义回调,我们需要运行以下命令:
![](https://epubservercos.yuewen.com/96A46E/20422784308285606/epubprivate/OEBPS/Images/045-2-i.jpg?sign=1738940232-VbxkN9gomrzZAUkYK6VAH7yAR4gua98E-0-ea49ffe261b7c6224f52bf841ae00c87)
然后,我们可以将回调列表(作为关键字参数)传递给Sequential和Model类中的fit方法。之后,在训练的每个阶段调用回调。
我们可以添加一个回调,显示模型的图:
![](https://epubservercos.yuewen.com/96A46E/20422784308285606/epubprivate/OEBPS/Images/045-3-i.jpg?sign=1738940232-1ukBEl6kfd33znJvDbLdKAPj0LzCLbfa-0-2061abb2e60093c853d819ac59f5d892)
先前编写的代码唯一需要更改的就是训练调用。它需要一个回调列表,以便可以在每个epoch结束时执行:
![](https://epubservercos.yuewen.com/96A46E/20422784308285606/epubprivate/OEBPS/Images/046-i.jpg?sign=1738940232-CIszcugZtAACJ4UVXZjxT9nTBCS9Rny2-0-77066e396c3e6cb681d53ed709a92272)
请注意,为了分析更多的数据,我们增加了epoch的数量。
现在,如果重新加载TensorBoard页面,我们将能够看到以下两个东西:
·我们的网络图
·损失在每个epoch中如何演变
让我们在以下TensorBoard页面上查看前面的内容(见图2-17)。
![](https://epubservercos.yuewen.com/96A46E/20422784308285606/epubprivate/OEBPS/Images/2-17.jpg?sign=1738940232-KADxQFGp05qCuIJjd7mbwHRaTHHH1EZK-0-584361ce3baa969a67929785315c8798)
图 2-17
使用TensorBoard,可以可视化张量图及其计算从而查看潜在的瓶颈并优化性能(见图2-18)。
训练复杂的网络可能会持续数天甚至数周。在此期间,可能多个方面会出错,例如:机器内存不足或者硬件、电气故障。为了保护我们的工作,我们希望有一种方法可以保存当前的训练状态,以便以后可以重新打开。幸运的是,网络状态基本上就是连接神经元的权重。因此,保存训练状态很容易。要在训练期间以编程方式做到这一点,我们将再次使用回调,也就是使用称为checkpoint的东西:
![](https://epubservercos.yuewen.com/96A46E/20422784308285606/epubprivate/OEBPS/Images/047-i.jpg?sign=1738940232-tdh4LmHcZpHSwkENvh6F5Av2gSwcgqZ1-0-eb688e9b5c436e196c7d93cfd9afb71a)
![](https://epubservercos.yuewen.com/96A46E/20422784308285606/epubprivate/OEBPS/Images/2-18.jpg?sign=1738940232-fzeLjZMJhyknScJNMN0VkEPEvxO9aAQ8-0-2da9af4c00940b8cfd79e83cc35edd53)
图 2-18
现在,将其添加到回调中,我们可以告诉Keras来监控准确度,这需要将其作为指标添加:
![](https://epubservercos.yuewen.com/96A46E/20422784308285606/epubprivate/OEBPS/Images/047-3-i.jpg?sign=1738940232-HhOWApA8zLogVNKyG0XOceF851001m6s-0-38a1f7c33f4cfa6c7d2bc847f982e0f1)
同样,在我们拟合模型之后,它将给我们返回一个对象,其中包含所有历史记录,每个epoch的训练损失值和指标值的记录:
![](https://epubservercos.yuewen.com/96A46E/20422784308285606/epubprivate/OEBPS/Images/047-4-i.jpg?sign=1738940232-HBYcrDcCSbNrQRSmgH8TrgzYeTjRm1Br-0-e881dec3b2f2890a0724083af086e5de)