Keras Callback之RemoteMonitor
概述
Keras提供了一系列的回调函数,用来在训练网络的过程中,查看网络的内部信息,或者控制网络训练的过程。BaseLogger
、ProgbarLogger
用来在命令行输出Log信息(默认会调用), EarlyStopping
、ReduceLROnPlateu
分别用来提前终止训练和自动调整学习率,改变网络训练过程;而今天要介绍的RemoteMonitor
则用来实时输出网络训练过程中的结果变化情况,包括训练集准确率(accu
)、训练集损失值(loss
)、验证集准确率(val_acc
)、验证集损失值(val_loss
),用户也可以自己修改需要显示的数据。一图胜千言,看看下面的结果图吧:
这个图是在浏览器中打开得到,Keras使用了Flask搭建了一个简单的服务器,然后采用D3.js来可视化数据。下面详细介绍可视化的过程吧
安装依赖
- 首先,你得安装Keras:
sudo pip install keras
或者没有管理员权限的话,执行:pip install --user keras
,下同 - 安装Flask网络框架:
sudo pip install Flask
- 安装gevent,gevent是一个并发框架,可以监听网络训练,并将结果传回网络服务,安装命令:
sudo pip install gevent
下载 Hualos
这是Keras作者写的Keras可视化的项目,其中包括了D3.js这些数据可视化库,也有一个简单的Flask app,即api.py文件,来运行我们的网络参数可视化。具体安装过程如下:
1 | git clone https://github.com/fchollet/hualos.git |
这样网络服务器就建立了,该服务会监听http://localhost:9000
端口,你打开浏览器访问该网址,会看到一个初始的页面,我们接下来要做的是在训练网络的时候增加回调函数RemoteMonitor,将网络参数显示到该网址的页面上。
在Keras训练网络中加入RemoteMonitor回调函数
这一步只需要在keras的代码里面增加3行即可:
1 | ## 1. import RemoteMonitor |
我修改了https://github.com/fchollet/keras/blob/master/examples/mnist_cnn.py,增加了以上3行,整个文件如下:
1 | '''Trains a simple convnet on the MNIST dataset. |
注意15、64和70行是我新加的。
修改完文件后,在命令行运行该文件,在浏览器打开http://localhost:9000
网址,就可以看到你训练时的参数了。注意结果是每个epoch输出一次。