本博客主要内容为使用Keras实例化深度学习模型,并对在这个过程中遇到的问题进行总结,主要参考《Keras中文文档》,在配置环境、安装软件以及调试的过程中遇到的各种问题主要参考各个网页,这些网页会在必要时给出参考。
如本篇博客没有解决你的问题可在评论区留言,如果能帮上的一定会帮助;如果觉得解决了你的问题请在最下面顶一下;也欢迎积极留言~~~~
Keras作为一种深度学习框架对初学者具有良好的实用性,使用者只需将所用的模块像搭积木一样搭起来既可以实现预期的功能。虽然Keras可以使用TensorFlow作为后端,但是在调用TensorBoard时会出现不报错,但是也无法显示训练曲线的问题。因此本文的主要目的在于正确安装Keras&TensoFlow两种主流的深度学习框架,并正确配置环境已实现在Keras中调用TensorBoard绘制训练曲线的目的。在完成改目的的过程中还会介绍博主在安装过程中遇到的问题及调试办法。
请注意在本文中使用的电脑是一台刚刚重装过系统,里面任何软件没有配置过的电脑。具体配置为64位英文版 Ubuntu16.04 ,Python2.7,显卡 GT635(因此仅安装TensorFlow的CPU版本),没有AVX2指令集。
首先为电脑安装深度学习必备的软件,这部分主要参考《Keras中文文档》 Keras安装和配置指南(Linux)。在这里要首先注意阅读其中“关于计算机的硬件配置说明”,根据自己电脑的实际配置选择对应的安装方式。
根据上述内容,本文所采用的机器为刚刚重装的系统且GPU较为落后的电脑,因此安装CPU版。
首先安装开发包,打开“终端”(Terminal)输入
# 系统升级
sudo apt update
sudo apt upgrade
# 安装python基础开发包
sudo apt install -y python-dev python-pip python-nose gcc g++ git gfortran vim
之后安装运算加速库,打开“终端”输入
# 系统升级
sudo apt install -y libopenblas-dev liblapack-dev libatlas-base-dev
之后跳过“CUDA开发环境的搭建”和“加速库cuDNN”,因为这两部分都需要GPU的支持。
可能会遇到的错误 :在系统升级的过程中,运行sudo apt update
的过程中可能会出现如下的报错
Reading package lists... Done
E: Problem executing scripts APT::Update::Post-Invoke-Success
'if /usr/bin/test -w /var/cache/app-info -a -e /usr/bin/appstreamcli;
then appstreamcli refresh > /dev/null;
fi'
E: Sub-process returned an error code
修改这种错误采用的方法如该博客,具体方法如下
sudo pkill -KILL appstreamcli
wget -P /tmp https://launchpad.net/ubuntu/+archive/primary/+files/appstream_0.9.4-1ubuntu1_amd64.deb https://launchpad.net/ubuntu/+archive/primary/+files/libappstream3_0.9.4-1ubuntu1_amd64.deb
sudo dpkg -i /tmp/appstream_0.9.4-1ubuntu1_amd64.deb /tmp/libappstream3_0.9.4-1ubuntu1_amd64.deb
执行完上述命令之后再次运行sudo apt-get update就不会再出现上面的错误。
在Ubuntu的环境下安装 TensorFlow 是最简单的一种安装方式,但是网上有着各种各样的教程令人眼花缭乱,但实际上只需要参考TensorFlow中文社区的“二进制安装”方法即可
# 仅使用 CPU 的版本
$ pip install https://storage.googleapis.com/tensorflow/linux/cpu/tensorflow-0.5.0-cp27-none-linux_x86_64.whl
在安装TensorFlow的过程中主要有以下几点 需要注意 :
W tensorflow/core/platform/cpu_feature_guard.cc:45] The TensorFlow library wasn't compiled to use SSE4.1 instructions, but these are available on your machine and could speed up CPU computations.
W tensorflow/core/platform/cpu_feature_guard.cc:45] The TensorFlow library wasn't compiled to use SSE4.2 instructions, but these are available on your machine and could speed up CPU computations.
W tensorflow/core/platform/cpu_feature_guard.cc:45] The TensorFlow library wasn't compiled to use AVX instructions, but these are available on your machine and could speed up CPU computations.
这段警告的实际含义是,在你的电脑中存在着SSE4.1,SSE4.2,AVX三种指令集,这三种指令集可以加速你得CPU计算,但是你没有使用。在网上搜索相关的解决办法大多是建议你在电脑中安装 Bazel,这是一种解决办法,但是也有一点需要注意:安装 Bazel 后,在执行Keras程序的过程中也是需要 AVX2、FMA 指令集的,但是如果你的电脑没有这种指令集就会无法执行程序。
言而总之,是否安装 Bazel 根据你的电脑中是否同时具有AVX2、FMA 指令集(一般的 SSE4.1,SSE4.2,AVX 都有)。如果已经安装了,我并没有发现完全卸载的办法,所以我重新装了一下系统,如果有卸载的办法请在评论区留言,万分感谢~
cd /usr/local/lib/python2.7/dist-packages/tensorboard
将目光转回到《Keras中文文档》 Keras安装和配置指南(Linux),继续安装 Keras,刚刚对于TensorFlow的安装主要是为了使用其中的TensorBoard功能。而这里我们将安装一个作为Keras后端的TensorFlow,再安装 Keras,具体过程如下
sudo pip install -U --pre tensorflow ## CPU版本
sudo pip install -U --pre keras
安装完毕后,在终端中输入python
,然后输入
import tensorflow
import keras
无错输出即表明已经安装成功。但是有的时候会出现 如下的报错
mportError: No module named protobuf
这时因为protobuf
的版本比较旧了,所以采取的办法是先将其卸载,再将tensorflow
卸载,最后再重新安装tensorflow
即可,具体如下
sudo pip uninstall protobuf
sudo pip uninstall tensorflow
sudo pip install -U --pre tensorflow
再重新输入
import tensorflow
import keras
若没有报错,则证明已经成功安装了 Keras & TensorFlow。
在这里假设大家已经通过 Keras 搭建好了自己的神经网络,并可以通过程序对神经网络进行训练了。这里主要参考的是《Keras中文文档》 花式自动编码器首先我们需要在程序的最开始部分导入回调函数(callbacks),即
from keras.callbacks import TensorBoard
之后在后面的fit
的参数callbacks
给出记录神经网络输出情况的文件夹
model.fit(train_data, train_labels,
nb_epoch=400, batch_size=32,
callbacks=[TensorBoard(log_dir='mytensorboard/3')])
注意其中callbacks是存放输出文件的文件夹。训练结束后,训练过程中产生的数据会存放在log_dir
所对应的文件夹中。
之后打开终端,首先进入单独安装的TensorBoard(即第一个安装的TensorFlow所对应的TensorBoard)的安装目录,才能正常使用TensorBoard,即
cd /usr/local/lib/python2.7/dist-packages/tensorboard
之后在终端中输入
tensorboard --logdir='/home/lib321/my_keras/mytensorboard/3'
打开返回结果的链接即可在浏览器中观察对应曲线。要注意在这里TensorFlow所绘制的训练曲线是logdir文件夹内所有文件的曲线,比如说你对模型进行了多次的训练,并且把这些不同的训练结果都放在了同一个文件夹,则不同训练过程的相同指标会画在同一条直线上,所以为了区别每一次训练曲线的不同,虽好每次输出到不同的文件夹内。
欢迎提问、建议、讨论等~期待大家的留言~~~