Day16 Caffe可视化方法

《21天实战Caffe》学习笔记第16天

数据可视化

把书上的matlab代码敲出来即可,对mnist手写数字数据集和cifar10图片数据集的数据做可视化。

模型可视化

网络结构可视化

安装依赖

用以下命令安装的python-devel,还是2.7版本的。(那我前面装python 3.7是白忙活了?)

1
yum install python-devel

numpy和/caffe/python/requirements.txt清单里的包,均用pip3安装的。

安装时报错

1
2
ERROR: matplotlib 3.1.0 has requirement python-dateutil>=2.1, but you'll have python-dateutil 1.5 which is incompatible.
ERROR: pandas 0.24.2 has requirement python-dateutil>=2.5.0, but you'll have python-dateutil 1.5 which is incompatible.

因为清单里要求python-dateutil的版本不能大于2,所以出现上述问题。但只是不兼容,而上述三个包都装上了,所以先这样。

编译

不知道为什么,要重新编译一次caffe。

1
2
3
cd ~/caffe
make clean
make -j

编译时报错。(我不记得之前编译有没有报错了)

改用

1
make

编译通过。

编译pycaffe。

1
make pycaffe

报错,找不到numpy名下的头文件。

(通过pip安装numpy还是没法直接用)

yum里python-numpynumpy

1
yum install numpy

之后pycaffe编译成功。

运行与画图
1
2
cd ~/caffe/python
python3 draw_net.py ../models/bvlc_reference_caffenet/train_val.prototxt caffenet.png

不行,用python执行也不行,但报错信息不一样。

直接在命令行下调用python,测试

1
import caffe

无论是python3还是python,都不行,同样报错信息不一样。

(完蛋…)

检查报错

报错内容

python3调用draw_net.py和控制台import caffe的报错都指向同一个问题,大概是“有冲突”?

python调用上述两者似乎也是指向同一个问题,找不到xxx.io

虽然caffe已经支持Python3,但从报错信息上看,似乎是用Python2更加靠谱一点。下面解决Pyhon2的报错。

缺失的包

报错提示的缺失文件指向一个Python包,那个包我已经安装了。安装的时候我使用pip3安装的,看到报错后又用pip装了一次,但似乎对那个包没什么改动,倒是依赖的限制版本的python-dateutil给强制升级了。

装完了仍是同样的报错。

在Github的issue上有人说需要将~/caffe/python添加至环境变量,但我添加后仍是同样的报错。

而在stackoverflow上甚至有人在python脚本里写了import ...,但仍有同样的报错。

所以结论应该很明显了,类似numpy,即使用pip给python装了相应的包,也要用yum再装一次?

但无论是...还是python-...都找不到那个包…

而且官方教程中也仅有Ubuntu下的安装命令…

换个思路

从编译文件入手

从caffe的编译文件makefile.config入手,看懂了makefile.config文件,发现在编译时忽略了对Python路径的依赖,而我又怕改路径改出乱子。所以根据makefile.config中的注释,将需要的文件复制到对应位置,使makefile.config的默认路径有效。

主要一点就是,默认路径指向usr/lib,而caffe编译所需的Pyhon相关文件,我这边是在usr/lib64里。

另外就Python包——site packages和dist packages的问题。

重新安装依赖

解决了前述路径问题,自然要重新编译一次,然后也搞明白了目前的pippip3命令都指向Python3(这也回答了https://yimino.github.io/2019/06/27/g-cmake-python/的疑问),所以在安装了Python2的pip后

1
yum install python-pip

重新安装其他依赖包。

在前面有不同包之间相互依赖,导致版本冲突的问题,所以这次按照/caffe/python/requirements.txt的内容,重写了requirements.txt,把里面的>=改成==,能安装低版本就尽量安装低版本。

然后再编译caffe和pycaffe。

至此,import caffe终于正常了。

(虽然有个warning,但应该无伤大雅。)

再次画图

执行,

1
python draw_net.py ../models/bvlc_reference_caffenet/train_val.prototxt caffenet.png

报错。

1
OSError: [Errno 2] "dot" not found in path.

根据https://github.com/BVLC/caffe/issues/4911,需要安装graphviz包。

1
yum install graphviz

至此,draw_net.py脚本得以正常运行,网络结构图get!

网络权值可视化

安装Matlab

虚拟机复制文件的缓存

首先解决一下主机与虚拟机之间复制文件的缓存问题。

从虚拟机向主机复制文件,缓存于Windows主机的C:\Users\"User Name"\AppData\Local\Temp\vmware-"User Name"\VMwareDnD中,直接删除即可。

从主机向虚拟机复制文件,缓存于Linux虚拟机的/root/.cache/vmware/drag_and_drop中,查看日期信息,

1
2
cd /root/.cache/vmware/drag_and_drop
ls -lht

查看文件大小,

1
du -h --max-depth=0 /root/.cache/vmware/drag_and_drop/*

删除缓存。

1
rm -rf /root/.cache/vmware/drag_and_drop/*

(但我由主机向虚拟机复制文件后,虚拟机所在磁盘的容量似乎减少了复制文件大小的两倍,在清除虚拟机缓存后也是如此…是我的错觉吗…)

安装过程

(看安装包里的教程即可)

挂载iso。

1
mount -t auto -o loop $PATH$/R2018b_glnxa64_dvd1.iso /mnt/iso

若提示

1
mount: /dev/loop0 is write-protected, mounting read-only

1
2
cd /
chmod 755 mnt

挂载成功后,不要进入挂载目录,而是在随便的另外一个目录下执行安装命令。

1
/mnt/iso/install

我这里提示了

1
cp: cannot stat ‘/mnt/iso/sys/java/jre/glnxa64/jre/man/ja_JP.UTF-8’: Input/output error

但似乎没发现什么问题。

然后即可进入图像安装界面,按提示操作即可。

学习曲线

这个先放一放,之前用matlab神经网络工具箱时看过类似的曲线,而且又没有进一步理解曲线的经验和知识。