一 TensorBoard简介
TensorBoard是Tensorflow提供的可视化工具,TensorBoard可以有效地展示Tensorflow在运行过程中的计算图、各种指标随着时间的变化趋势以及训练中使用到的图像等信息。TensorBoard不需要额外的安装过程,在Tensorflow安装完成时,TensorBoard会被自动安装。
TensorBoard通过Tensorflow程序运行过程中输出的日志文件,可视化Tensorflow程序的运行状态。
下面开始一个简单的Tensorflow程序,并且使用TensorBoard进行可视化。
要使用TensorBoard,添加以下语句:
writer = tf.summary.FileWriter('./graphs', sess.graph)
创建一个writer对象,将操作写入日志文件,并存放在文件夹logs_dir,比如 “./graphs”
import tensorflow as tf
a = tf.constant(2)
b = tf.constant(3)
x = tf.add(a,b)
with tf.Session() as sess:
#添加writer对象
writer = tf.summary.FileWriter('./graphs', sess.graph)
print (sess.run(x))
# 关闭
writer.close()
接下来,运行python文件:
$ python [yourprogram].py
启动TensorBoard,运行下面的命令会启动一个服务,这个服务的端口默认为6006。
$ tensorboard --logdir="./graphs"
通过浏览器打开 localhost:6006 即可。
在graph栏,可以查看上面程序Tensorflow计算图的可视化结果,如下有三个结点:
“Const”和”Const_1”分别对应于a和b,结点”Add”对应于x。这样的可读性显然不是很高,要想使TensorBoard显示操作的名字,必须在定义时明确命名。即:
a = tf.constant(2,name='a')
b = tf.constant(3,name='b')
x = tf.add(a,b)
现在,计算图如下:
计算图定义操作(ops)和依赖(dependencies),并没有显示values。
二 远程访问Tensorboard
我是采用ssh连接实验室的服务器来跑模型(有和我一样的小伙伴可以参考~),如何远程访问TensorBoard。
先说方法,参考Stack overflow:
-
实验室的服务器和我的电脑连接在同一个局域网内,所以我只需要浏览器中输入(即可启动Tensorboard):
服务器ip:端口
#即:服务器ip:6006 -
使用SSH进行端口转发
ssh -L 16006:127.0.0.1:6006 user@hostname
在连接SSH时创建端口转发,浏览器输入 127.0.0.1:16006就可以了。
三 关于SSH端口转发
也是因为这个问题,我也算是了解了SSH可以实现端口转发。
下面简单记录一下(参考):
ssh 主要用于通过网络远程访问另一个主机,并且提供做大的保护。
ssh会自动加密和解密所有ssh客户端和服务端之间的网络数据。除此之外,ssh还提供了端口转发的功能,能够将其他TCP端口的网络数据通过ssh链接来转发,并且自动提供了相应的加密及解密服务。
因为ssh为其他TCP链接提供了一个安全的通道来进行传输,这一过程也被叫作”隧道”。
ssh端口转发能够提供两大功能:
- 加密ssh client端至ssh server端之间的通讯数据。
- 突破防火墙的限制完成一些之前无法建立的TCP连接。
如上图所示,使用了端口转发之后,TCP端口A和B之间现在并不是直接通讯,而是转发到了ssh客户端和服务端来通讯,从而自动实现了数据加密并同时绕过了防火墙的限制。
本地端口转发
命令格式:
ssh -L <local port>:<remote host>:<remote port><SSH hostname>
在LdapClientHost上执行如下命令即可建立一个SSH的本地端口转发,例如:
$ ssh -L 7001:localhost:389 LdapServerHost
上例中,使用7001端口作为本地的监听端口。(在选择端口时需要注意非管理员账号无权绑定1-1023端口,一般选用一个1024-65535之间的且尚未被使用的端口号即可)
注意:
- SSH 端口转发是通过 SSH 连接建立起来的,我们必须保持这个 SSH 连接以使端口转发保持生效。一旦关闭了此连接,相应的端口转发也会随之关闭。
- 我们只能在建立 SSH 连接的同时创建端口转发,而不能给一个已经存在的 SSH 连接增加端口转发。
本地转发:
LdapClientHost 同时是应用的客户端,也是 SSH Client,这两个连接都从它指向 LdapServertHost(既是LDAP 服务端,也是 SSH Server)。