“Tensorflow+OpenCV“容器进行CNN数字识别训练
1. 在Docker中配置“Tensorflow+OpenCV“组合镜像
参考:http://blog.youkuaiyun.com/chenming_hnu/article/details/70184543
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/Deskt