1. keras中生成tensorboard日志信息
由于tensorboard日志是记录并且可视化训练过程的各个指标和权重信息的,所以需要通过回调函数来实现训练过程中的记录,然后将相应的回调函数传给模型的fit方法即可。如下所示,tf.keras.callbacks中有现成的回调函数,然后将其传给fit方法的callback参数即可。训练完成后就会在logdir目录下生成相应的信息文件。
log_dir = "logs/fit/" + datetime.datetime.now().strftime("%Y%m%d-%H%M%S")
tensorboard_callback = tf.keras.callbacks.TensorBoard(log_dir=log_dir, histogram_freq=1)
model.fit(x=x_train,
y=y_train,
epochs=5,
validation_data=(x_test, y_test),
callbacks=[tensorboard_callback])
2. 打开tensorboard
在shell中执行如下命令,传入相应路径参数,端口可以随便设,只要不和当前机器上的服务端口冲突即可,如下默认端口为6006。
tensorboard --logdir logdir --port 6006
3. 建立服务器和本地的连接,实现端口转发
由于linux服务器上往往没有浏览器直接查看tensorboard,因此可以通过在本地建立和服务器的连接,并线进行端口转发,将linux服务器上tensorboard服务信息转发到本地,然后可以直接在本地浏览器中查看tensorboard。
本文介绍的实现连接的方式是通过xshell。xshell是一个连接管理远程服务器的工具,先通过xshell在本地登陆远程服务器,建立本地和服务器的连接,接下来就是通过xshell实现端口转发。
步骤是,先点击xshell界面中的属性设置按钮,如下圈红所示。
点击之后出现如下界面。
出现上述界面后,依次点击 连接 ---> SSH ---> 隧道,然后再点击 添加,会出现如下界面,这时需要在侦听端口处填写本地用来侦听服务器tensorboard的端口号,随便填写,只要不和本地服务端口冲突即可,比如12345;目标端口是侦听对象的服务端口,这个端口就是执行命令tensorboard --logdir logdir --port 6006中指定的端口,该端口表示启动tensorboard服务后用来交流信息的端口,因此本例中下面的目标端口就是6006,当然也可以填其他的,只要和tensorboard服务的端口保持一致即可。
隧道建立完成后,执行tensorboard命令后会出现一个类似 http://hostname:port/的url,这时将该url拷贝到本地浏览器中即可显示tensorboard。
需要注意的是,本地不一定可以解析该url的域名,因此如何直接拷贝行不通,则可以将你的远端服务器ip地址加端口号(如192.67.38.256:6006)输入浏览器,这样是可以保证监听到相应端口信息,从而查看tensorboard的。