频道栏目
首页 > 网络 > 云计算 > 正文
“Tensorflow+OpenCV“容器进行CNN数字识别训练
2017-04-17 09:46:46           
收藏   我要投稿

“Tensorflow+OpenCV“容器进行CNN数字识别训练

1. 在Docker中配置“Tensorflow+OpenCV“组合镜像

2. 容器与本地的数据卷volume共享

只要涉及到样本的训练的相关内容,就要考虑数据的存储、共享等。

(1) docker引入了数据卷(volume)机制,volume是存在于一个或多个容器中的特定文件或文件夹,这个目录以独立于联合文件系统的形式在宿主机中存在,并为数据的共享与持久化提供了如下便利:

volume在容器创建的时候就会初始化,在容器运行时可以使用其中的文件; volume能在不同的容器间共享和重用; 对volume中的数据操作会立马生效; 对volume中的数据操作不会影响到镜像本身; volume的生存周期独立于容器的生存周期,即使删除容器,volume仍然会存在,没有任何容器使用的volume也不会被docker删除。

(2)创建数据卷共享容器

sudo docker run -it -v vol_tfcv5:/data --name=tfcv5 tensorflow:tensorflowCV /bin/bash

对以上命令的解释:

docker run表示新建容器时 加上-v 命令为创建数据卷,也可以先用 $ docker create --name vol_simple 创建数据卷,再用run命令。 -it 也可以写成 -i -t, 表示申请一个伪终端tty控制台与容器进行数据交互; vol_tfcv5:/data 创建一个指定名字的volume数据卷为vol_tfcv5,并挂载到容器的/data目录下; --name=tfcv5 容器的名称; tensorflow:tensorflowCV 构建容器的源镜像名称; /bin/bash 使用/bin/bash来执行解释脚本

实际上:Docker 在创建volume的时候会在宿主机/var/lib/docker/volumes 中创建一个以volume ID为名的目录,并将volume中的内容存储在名为_data的目录下。

使用docker volume inspect命令可以获得该volume包括其在宿主机中该文件夹的位置等信息。

$ sudo docker volume inspect vol_tfcv5

[sudo] password for mingchen:

[

{

"Name": "vol_tfcv5",

"Driver": "local",

"Mountpoint": "/var/lib/docker/volumes/vol_tfcv5/_data",

"Labels": null,

"Scope": "local"

}

]

在容器内查看/data目录下的数据:

root@1451fcc1ad4f:/# ls

bin data etc lib media notebooks proc run sbin sys usr

boot dev home lib64 mnt opt root run_jupyter.sh srv tmp

root@1451fcc1ad4f:/# ls data

root@1451fcc1ad4f:/#

发现为空,下面我们就向主机上的共享目录中拷入数据。

(3)向共享目录/var/lib/docker/volumes/vol_tfcv5/_data中拷入数据

我的图片及代码数据都在/home/mingchen/Desktop/tf_pic_auto/, “*“表示此目录下的所有文件。

$ sudo cp -r /home/mingchen/Desktop/tf_pic_auto/* /var/lib/docker/volumes/vol_tfcv5/_data

切换到容器窗口,再查看:

root@1451fcc1ad4f:/# ls data

src

root@1451fcc1ad4f:/# cd data

root@1451fcc1ad4f:/data# ls src

bin_con_pic.py cnn_iden_pic.pyc pic_con_bin.py test_gray.bin

bin_con_pic.pyc digit_num pic_con_bin.pyc tfcnn_idenpic_main.py

cnn_iden_pic.py model readme write_num

可以发现容器的/data目录以及与主机的/var/lib/docker/volumes/vol_tfcv5/_data 数据已经同步了,能够在容器内访问。而且,经过实验,当在容器内对数据进行更改的时候,比如对代码修改,宿主机中/var/lib/docker/volumes/vol_tfcv5/_data 的数据也会进行同步修改。

3. 在容器内进行数字识别训练

(1)在容器的终端运行主程序

root@b77dc7af73ae:/data/src# python tfcnn_idenpic_main.py

发现有有报错:

root@b77dc7af73ae:/data/src# python tfcnn_idenpic_main.py

libdc1394 error: Failed to initialize libdc1394

/usr/local/lib/python2.7/dist-packages/matplotlib/font_manager.py:273: UserWarning: Matplotlib is building the font cache using fc-list. This may take a moment.

warnings.warn('Matplotlib is building the font cache using fc-list. This may take a moment.')

Traceback (most recent call last):

File "tfcnn_idenpic_main.py", line 12, in

import bin_con_pic #将二进制文件转为图片模块

File "/data/src/bin_con_pic.py", line 12, in

from matplotlib import pyplot as plt

File "/usr/local/lib/python2.7/dist-packages/matplotlib/pyplot.py", line 114, in

_backend_mod, new_figure_manager, draw_if_interactive, _show = pylab_setup()

File "/usr/local/lib/python2.7/dist-packages/matplotlib/backends/__init__.py", line 32, in pylab_setup

globals(),locals(),[backend_name],0)

File "/usr/local/lib/python2.7/dist-packages/matplotlib/backends/backend_tkagg.py", line 6, in

from matplotlib.externals.six.moves import tkinter as Tk

File "/usr/local/lib/python2.7/dist-packages/matplotlib/externals/six.py", line 199, in load_module

mod = mod._resolve()

File "/usr/local/lib/python2.7/dist-packages/matplotlib/externals/six.py", line 113, in _resolve

return _import_module(self.mod)

File "/usr/local/lib/python2.7/dist-packages/matplotlib/externals/six.py", line 80, in _import_module

__import__(name)

File "/usr/lib/python2.7/lib-tk/Tkinter.py", line 42, in

raise ImportError, str(msg) + ', please install the python-tk package'

ImportError: No module named _tkinter, please install the python-tk package

(2)看到最后一条,应该是缺少一个依赖包:(根据主程序中的import packages的情况,报错需要安装哪个就安装哪个)

root@b77dc7af73ae:/data/src# sudo apt-get install python-tk

安装完毕。

(3)再次运行:

root@b77dc7af73ae:/data/src# python tfcnn_idenpic_main.py

libdc1394 error: Failed to initialize libdc1394

The test_gray.bin file is OK!

WARNING:tensorflow:From /data/src/cnn_iden_pic.py:109 in run_training.: initialize_all_variables (from tensorflow.python.ops.variables) is deprecated and will be removed after 2017-03-02.

Instructions for updating:

Use `tf.global_variables_initializer` instead.

CNN identified the number:9

--------------------------------------------------

The process time: 0:00:02.530348

虽然成功运行,但依然有Failed报错信息,google一下,找到解决方案的网站;https://stackoverflow.com/questions/29274638/opencv-libdc1394-error-failed-to-initialize-libdc1394

第一条回答即是:sudo ln /dev/null /dev/raw1394。

root@b77dc7af73ae:/data/src# sudo ln /dev/null /dev/raw1394

root@b77dc7af73ae:/data/src# python tfcnn_idenpic_main.py

The test_gray.bin file is OK!

WARNING:tensorflow:From /data/src/cnn_iden_pic.py:109 in run_training.: initialize_all_variables (from tensorflow.python.ops.variables) is deprecated and will be removed after 2017-03-02.

Instructions for updating:

Use `tf.global_variables_initializer` instead.

CNN identified the number:9

--------------------------------------------------

The process time: 0:00:01.705953

虽然warning,但影响不大。

实验多次:

root@b77dc7af73ae:/data/src# python tfcnn_idenpic_main.py

The test_gray.bin file is OK!

WARNING:tensorflow:From /data/src/cnn_iden_pic.py:109 in run_training.: initialize_all_variables (from tensorflow.python.ops.variables) is deprecated and will be removed after 2017-03-02.

Instructions for updating:

Use `tf.global_variables_initializer` instead.

CNN identified the number:9

--------------------------------------------------

The process time: 0:00:00.882266

root@b77dc7af73ae:/data/src# python tfcnn_idenpic_main.py

The test_gray.bin file is OK!

WARNING:tensorflow:From /data/src/cnn_iden_pic.py:109 in run_training.: initialize_all_variables (from tensorflow.python.ops.variables) is deprecated and will be removed after 2017-03-02.

Instructions for updating:

Use `tf.global_variables_initializer` instead.

CNN identified the number:9

--------------------------------------------------

The process time: 0:00:00.898039

root@b77dc7af73ae:/data/src#

运行时间基本在0.9秒左右。

(4)用宿主机上的Pycharm开发工具处理同样的数据,运行同样的代码,结果如下:

/usr/bin/python2.7 /home/mingchen/PycharmProjects/tf_pic_auto/src/tfcnn_idenpic_main.py

The test_gray.bin file is OK!

WARNING:tensorflow:From /home/mingchen/PycharmProjects/tf_pic_auto/src/cnn_iden_pic.py:109 in run_training.: initialize_all_variables (from tensorflow.python.ops.variables) is deprecated and will be removed after 2017-03-02.

Instructions for updating:

Use `tf.global_variables_initializer` instead.

CNN identified the number:0

--------------------------------------------------

The process time: 0:00:00.845535

Process finished with exit code 0

截图:

这里写图片描述

(5)对比发现,其实时间差不多,但是当数据量较多,多个客户端需要处理相似任务的时候,我们可以“一键生成“很多个容器处理,利用容器技术能够给予为未来的任务处理提供更多可行、有效的解决方案。

点击复制链接 与好友分享!回本站首页
上一篇:sparkRDD算子(一)parallelize,makeRDD,textFile
下一篇:Nginx反向代理 建立Google镜像
相关文章
图文推荐
点击排行

关于我们 | 联系我们 | 广告服务 | 投资合作 | 版权申明 | 在线帮助 | 网站地图 | 作品发布 | Vip技术培训 | 举报中心

版权所有: 红黑联盟--致力于做实用的IT技术学习网站