1.前言
之前在一家AI算法公司呆了一小阵,虽然自己不是做算法这一块的,不过对tensorflow也是久闻大名了。 最近有些时间,就尝试着跑一下官方的例子,试试味道。
tensorflow训练部分用的语言主要是python,所以我是先大概浏览下python的语法的。
2.环境搭建
然后就是搭建tensorflow环境了。 由于懒,所以我还是打算用现成的docker 镜像。
在https://hub.docker.com/ 搜索了下发现有tensorflow 的官方镜像:
https://hub.docker.com/r/tensorflow/tensorflow/
docker源码在tensorflow的GitHub源码里面有,我尝试了下编译源码里面的dockerfile,没有成功,所以还是直接用现成镜像了。
官方的启动说明是这样的
docker run -it -p 8888:8888 tensorflow/tensorflow
Go to your browser on http://localhost:8888/
不过如果这样启动的话,tensorboard的端口没有导出,没办法使用tensorboard。 我修改了下启动的命令,加了点私货。并写成了一个脚本,方便启动。
#!/bin/bash
sudo docker run --name tensorflow_test --rm -it -p 8888:8888 -p 6006:6006 -v ~/workspacke/tensorflow_notebooks:/notebooks tensorflow/tensorflow
其中tensorflow_notebooks是我host机的一个目录,绑定到notebooks目录下。 这样Jupyter Notebook 的文件就会直接保存在本地。
PS:这个官方tensorflow docker 镜像的运行环境是个Jupyter Notebook 。
运行
......
[I 08:53:12.631 NotebookApp] Use Control-C to stop this server and shut down all kernels (twice to skip confirmation).
[C 08:53:12.632 NotebookApp]
Copy/paste this URL into your browser when you connect for the first time,
to login with a token:
http://localhost:8888/?token=294123c9afa199856c63dc9eb29266c79ac55c02c92f3a8a
得到了一个网址,直接浏览器打开http://localhost:8888/?token=294123c9afa199856c63dc9eb29266c79ac55c02c92f3a8a
就可以来到Jupyter界面了。
3.测试官方例子
下面就来测试下官方的例子。
1.将tensorflow官方源码拷贝到刚才绑定的tensorflow_notebooks 文件夹下。
2.在浏览器的Jupyter 右上角点击new -> terminal ,打开一个终端。
3.运行 tensorflow/tensorflow/examples/tutorials/mnist/fully_connected_feed.py
PS: 这是一个前馈神经网络训练代码。MNIST是机器学习领域的一个经典问题,指的是让机器查看一系列大小为28x28像素的手写数字灰度图像,并判断这些图像代表0-9中的哪一个数字。
mnist目录下还有其他很多例子,读者可以自行尝试。
然后就能看到训练过程:
Step 900: loss = 0.39 (0.003 sec)
Training Data Eval:
Num examples: 55000 Num correct: 47368 Precision @ 1: 0.8612
Validation Data Eval:
Num examples: 5000 Num correct: 4344 Precision @ 1: 0.8688
Test Data Eval:
Num examples: 10000 Num correct: 8686 Precision @ 1: 0.8686
Step 1000: loss = 0.55 (0.007 sec)
Step 1100: loss = 0.66 (0.077 sec)
Step 1200: loss = 0.50 (0.005 sec)
Step 1300: loss = 0.44 (0.006 sec)
Step 1400: loss = 0.39 (0.003 sec)
Step 1500: loss = 0.43 (0.004 sec)
Step 1600: loss = 0.41 (0.004 sec)
Step 1700: loss = 0.49 (0.004 sec)
Step 1800: loss = 0.45 (0.005 sec)
Step 1900: loss = 0.47 (0.003 sec)
Training Data Eval:
Num examples: 55000 Num correct: 49413 Precision @ 1: 0.8984
Validation Data Eval:
Num examples: 5000 Num correct: 4517 Precision @ 1: 0.9034
Test Data Eval:
Num examples: 10000 Num correct: 9031 Precision @ 1: 0.9031
到此,跑官方例子基本没有问题了。
4.tensorboard
然后再尝试下tensorboard。 那tensorboard是什么呢?
为了更方便 TensorFlow 程序的理解、调试与优化,我们发布了一套叫做 TensorBoard 的可视化工具。你可以用
TensorBoard 来展现你的 TensorFlow 图像,绘制图像生成的定量指标图以及附加数据。
要看tensorboard,首先要找到log输出的目录。 通过查看fully_connected_feed.py 源码,我们发现一下参量:
parser.add_argument(
'--log_dir',
type=str,
default=os.path.join(os.getenv('TEST_TMPDIR', '/tmp'),
'tensorflow/mnist/logs/fully_connected_feed'),
help='Directory to put the log data.'
)
可以确定log目录在/tmp/tensorflow/mnist/logs/fully_connected_feed
在Jupyter 终端执行命令
# tensorboard --logdir=/tmp/tensorflow/mnist/logs/fully_connected_feed
Starting TensorBoard 55 at http://3f831751e0b2:6006
(Press CTRL+C to quit)
其中3f831751e0b2是docker容器的ID ,需要替换为本地地址。
打开http://localhost:6006/ 就可以看到tensorboard的内容了。
end
好了,至此,第一次运行tensorflow训练代码的就完成了。