神经网络设计与实现
上QQ阅读APP看书,第一时间看更新

2.4.3 XOR问题中的TensorBoard

TensorBoard默认情况下随TensorFlow一起使用,因此要启动TensorBoard,我们只需要在打开的控制台输入保存网络代码的位置即可:

我们将在屏幕上看到一个URL,可以通过它访问TensorBoard服务器。如果你遵循上述说明,URL应为http://localhost:6006/。它将读取logs文件夹中的文件,它可能暂时是空的,无法看到任何信息。

开始记录前,我们必须修改先前编写的代码。这里将使用函数。

回调只是在训练过程的给定阶段应用的一组函数。在训练过程中,我们可以使用它们来查看模型的内部状态和统计信息。要定义回调,我们需要运行以下命令:

然后,我们可以将回调列表(作为关键字参数)传递给Sequential和Model类中的fit方法。之后,在训练的每个阶段调用回调。

我们可以添加一个回调,显示模型的图:

先前编写的代码唯一需要更改的就是训练调用。它需要一个回调列表,以便可以在每个epoch结束时执行:

请注意,为了分析更多的数据,我们增加了epoch的数量。

现在,如果重新加载TensorBoard页面,我们将能够看到以下两个东西:

·我们的网络图

·损失在每个epoch中如何演变

让我们在以下TensorBoard页面上查看前面的内容(见图2-17)。

图 2-17

使用TensorBoard,可以可视化张量图及其计算从而查看潜在的瓶颈并优化性能(见图2-18)。

训练复杂的网络可能会持续数天甚至数周。在此期间,可能多个方面会出错,例如:机器内存不足或者硬件、电气故障。为了保护我们的工作,我们希望有一种方法可以保存当前的训练状态,以便以后可以重新打开。幸运的是,网络状态基本上就是连接神经元的权重。因此,保存训练状态很容易。要在训练期间以编程方式做到这一点,我们将再次使用回调,也就是使用称为checkpoint的东西:

图 2-18

现在,将其添加到回调中,我们可以告诉Keras来监控准确度,这需要将其作为指标添加:

同样,在我们拟合模型之后,它将给我们返回一个对象,其中包含所有历史记录,每个epoch的训练损失值和指标值的记录: