![神经网络设计与实现](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=1739427606-t7QCDZiToCE7irjaDid7DZ7TyWNaMmot-0-f8c50145372dc9e8ed7dd7e64808c130)
我们将在屏幕上看到一个URL,可以通过它访问TensorBoard服务器。如果你遵循上述说明,URL应为http://localhost:6006/。它将读取logs文件夹中的文件,它可能暂时是空的,无法看到任何信息。
开始记录前,我们必须修改先前编写的代码。这里将使用函数。
回调只是在训练过程的给定阶段应用的一组函数。在训练过程中,我们可以使用它们来查看模型的内部状态和统计信息。要定义回调,我们需要运行以下命令:
![](https://epubservercos.yuewen.com/96A46E/20422784308285606/epubprivate/OEBPS/Images/045-2-i.jpg?sign=1739427606-skU1D3oq0QhJKtsAQctMpoaMog1Jt24x-0-0820d100cc66a64405db44706c23276b)
然后,我们可以将回调列表(作为关键字参数)传递给Sequential和Model类中的fit方法。之后,在训练的每个阶段调用回调。
我们可以添加一个回调,显示模型的图:
![](https://epubservercos.yuewen.com/96A46E/20422784308285606/epubprivate/OEBPS/Images/045-3-i.jpg?sign=1739427606-AKW4UPZAfMgs5kYWhbDT36gWUOqB96dG-0-4c81ee6ffe5c1fc444fac21dd4cb0bc9)
先前编写的代码唯一需要更改的就是训练调用。它需要一个回调列表,以便可以在每个epoch结束时执行:
![](https://epubservercos.yuewen.com/96A46E/20422784308285606/epubprivate/OEBPS/Images/046-i.jpg?sign=1739427606-VbC7jKo7abmR3n6napfcgOdGcvg3FKqM-0-2b537c83a8e898f3a3d964de7aeebe37)
请注意,为了分析更多的数据,我们增加了epoch的数量。
现在,如果重新加载TensorBoard页面,我们将能够看到以下两个东西:
·我们的网络图
·损失在每个epoch中如何演变
让我们在以下TensorBoard页面上查看前面的内容(见图2-17)。
![](https://epubservercos.yuewen.com/96A46E/20422784308285606/epubprivate/OEBPS/Images/2-17.jpg?sign=1739427606-gEkKAO08bLootm7gMbpcflssOGBHmCuO-0-6f2e5bbefa1275ee262692cb9d400c39)
图 2-17
使用TensorBoard,可以可视化张量图及其计算从而查看潜在的瓶颈并优化性能(见图2-18)。
训练复杂的网络可能会持续数天甚至数周。在此期间,可能多个方面会出错,例如:机器内存不足或者硬件、电气故障。为了保护我们的工作,我们希望有一种方法可以保存当前的训练状态,以便以后可以重新打开。幸运的是,网络状态基本上就是连接神经元的权重。因此,保存训练状态很容易。要在训练期间以编程方式做到这一点,我们将再次使用回调,也就是使用称为checkpoint的东西:
![](https://epubservercos.yuewen.com/96A46E/20422784308285606/epubprivate/OEBPS/Images/047-i.jpg?sign=1739427606-9jvFGMHCjCJBZTyDi4y6xmg2Kap5EYot-0-e016d98a1e5b0101c905e3e417f734dd)
![](https://epubservercos.yuewen.com/96A46E/20422784308285606/epubprivate/OEBPS/Images/2-18.jpg?sign=1739427606-psOTfgXZaq1odLpxT0GkzA2LR9oTiMvY-0-3cc0e52206e24f018676c80e45031c5c)
图 2-18
现在,将其添加到回调中,我们可以告诉Keras来监控准确度,这需要将其作为指标添加:
![](https://epubservercos.yuewen.com/96A46E/20422784308285606/epubprivate/OEBPS/Images/047-3-i.jpg?sign=1739427606-aEk39s1QnhAQOv5QwpE8XTcbAsewCNjJ-0-0bda34b69e68a2d072272e6bc08562ba)
同样,在我们拟合模型之后,它将给我们返回一个对象,其中包含所有历史记录,每个epoch的训练损失值和指标值的记录:
![](https://epubservercos.yuewen.com/96A46E/20422784308285606/epubprivate/OEBPS/Images/047-4-i.jpg?sign=1739427606-qgQXn5DoEoBQppqmUb0WHWqNgmPcUyim-0-181d57c6aad7704671bb912cc84438e8)