本文记录了安装theano、keras、tensorflow以及运行tutorial程序时遇到的一些问题,供后人参考。

实验机器:联想笔记本,i7-6700HQ,GTX960M,16G内存,SSD硬盘,64位Ubuntu 16.04 LTS

备注:

  1. 不推荐windows,会遇到各种不兼容问题。Ubuntu最好使用16.04这个版本,低版本的Ubuntu可能出现显卡驱动不支持等问题。

  2. Ubuntu16.04 装好后,注意将系统默认的显卡驱动改为nvidia的驱动,并更新显卡驱动,我用的是version 367.48。
  3. TensorFlow的gpu版本安装比较麻烦,由于CUDA版本兼容问题,如果使用当前最新的CUDA 8.0,则需要自己重新编译TensorFlow源代码,然后本地安装。

  4. 建议先安装Theano和Keras,流程相对容易,早点跑出“hello world”,增强信心。

安装Theano作为后端的Keras:

详细流程可参见

http://keras-cn.readthedocs.io/en/latest/getting_started/keras_linux/

流程中安装CUDA和cuDNN时,应选择CUDA 8.0和cuDNN 5.0,安装完毕后,一定要记得重启电脑!否则运行tutorial代码会提示no CUDA-capable device is detected

按照教程运行mnist_mlp.py,会有如下提示,说明GPU加速成功,每次Epoch需要1s,如果是CPU版本的训练,则一次Epoch需要70s左右。

Using Theano backend.
Using gpu device : GeForce GTX 960M (CNMeM is enabled with initial size: 80.0% of memory, cuDNN )

安装Tensorflow:


在官方教程里,有编译好的whl给我们直接安装(通过pip install),比如我的机器就选下面这个

# Ubuntu/Linux -bit, GPU enabled, Python 2.7
# Requires CUDA toolkit 8.0 and CuDNN v5. For other versions, see "Install from sources" below.
$ export TF_BINARY_URL=https://storage.googleapis.com/tensorflow/linux/gpu/tensorflow-0.11.0rc1-cp27-none-linux_x86_64.whl

但实际操作后会遇到报错,具体报错信息我没保存,今天反思了一下,估计是因为我的CUDA安装路径不是TensorFlow默认的"/usr/local/cuda",而是"/usr/local/cuda-8.0",可能把文件名改一下就好了的。当时我实际的解决方案是git clone TensorFlow源代码,然后自己配置环境并重新编译。。。

编译TensorFlow也比较麻烦,最靠谱的安装教程应该是这个

http://textminingonline.com/dive-into-tensorflow-part-iii-gtx-1080-ubuntu16-04-cuda8-0-cudnn5-0-tensorflow

首先需要安装JDK,虽然Ubuntu自带了OpenJDK,但还是按照网上教程,卸载了OpenJDK,装了Oracle JDK并配置好环境变量。然后就是安装Google内部使用的build工具Bazel,中间应该是有报错的,我记得是提示有依赖包没有安装,google一下可以找到解决方案,然后成功安装好bazel之后,就可以进行编译了。

编译之前,要先git clone TensorFlow,这里我直接下载了master版本,所以后面发现版本太新,无法与keras兼容。。不过先暂时这样吧。下载好之后,要cd到TensorFlow源代码主目录,然后./configure配置环境,这里面最重要的就是设置好CUDA和cuDNN的版本和路径,注意TensorFlow默认的CUDA路径是“/usr/local/cuda”,而CUDA 8.0的默认安装路径是“/usr/local/cuda-8.0”,所以配置的时候一定要手动修改一下。

配置完毕之后,按照教程用bazel编译即可。编译大概要十多分钟,结束之后得到whl文件,然后用pip install,大功告成。此时再在python里import tensorflow,可以看到以下信息

>>> import tensorflow
I tensorflow/stream_executor/dso_loader.cc:] successfully opened CUDA library libcublas.so.8.0 locally
I tensorflow/stream_executor/dso_loader.cc:] successfully opened CUDA library libcudnn.so locally
I tensorflow/stream_executor/dso_loader.cc:] successfully opened CUDA library libcufft.so.8.0 locally
I tensorflow/stream_executor/dso_loader.cc:] successfully opened CUDA library libcuda.so. locally
I tensorflow/stream_executor/dso_loader.cc:] successfully opened CUDA library libcurand.so.8.0 locally

用TensorFlow跑MNIST数据集:

这个算是我们的hello world吧。按照官方教程,只需要下面两条命令就可以跑起来并得到不错的分类结果

$ cd tensorflow/models/image/mnist
$ python convolutional.py

但实际运行的时候,会发现terminal没有任何输出,原因是程序需要先下载MNIST数据集,数据源在国外,不翻墙的话很慢。用gedit打开convolutional.py,可以找到数据源的地址,以及下载存放的路径,我们可以翻墙自己下载数据,然后根据需要修改一下

源代码里的文件路径即可。如果有GPU加速,会看到以下信息:

I tensorflow/core/common_runtime/gpu/gpu_device.cc:] Found device  with properties:
name: GeForce GTX 960M
major: minor: memoryClockRate (GHz) 1.176
pciBusID ::00.0
Total memory: .95GiB
Free memory: .57GiB
I tensorflow/core/common_runtime/gpu/gpu_device.cc:] DMA:
I tensorflow/core/common_runtime/gpu/gpu_device.cc:] : Y
I tensorflow/core/common_runtime/gpu/gpu_device.cc:] Creating TensorFlow device (/gpu:) -> (device: , name: GeForce GTX 960M, pci bus id: ::00.0)
Initialized!
Step (epoch 0.00), 7.8 ms
Minibatch loss: 12.054, learning rate: 0.010000
Minibatch error: 90.6%
Validation error: 84.6%
Step (epoch 0.12), 16.6 ms
Minibatch loss: 3.297, learning rate: 0.010000
Minibatch error: 6.2%
Validation error: 7.5%
Step (epoch 0.23), 16.5 ms
Minibatch loss: 3.459, learning rate: 0.010000
Minibatch error: 12.5%
Validation error: 3.9%
.......(后面的print信息被我省略掉了)

用TensorFlow跑word2vec:


官方教程在这里

https://www.tensorflow.org/versions/r0.11/tutorials/word2vec/index.html#vector-representations-of-words

我们运行 tensorflow/examples/tutorials/word2vec/word2vec_basic.py ,它还是要先自动下载数据,如果很慢的话,同样可以自己下载搞定。然后训练完毕之后会用TSNE对词向量做可视化,这里需要再安装几个matplotlib,sklearn,scipy这三个python包,注意matplotlib还需要安装Tkinter,可以用下面的命令

apt-get install python-tk

最后训练完的词向量如图

最新文章

  1. 《CSS3实战》读书笔记 第2章 层叠样式表(CSS)
  2. 关于Highcharts图表组件动态修改属性的方法(API)总结之Series
  3. adb不响应
  4. 多个UITableView横向切换的简单实现(有点类似网易新闻)
  5. bzoj1875
  6. IOS—通过ChildViewController实现view的切换
  7. java基础day7
  8. poj 2155 matrix 二维线段树
  9. JS中window.document对象
  10. android 视图设置多个setTag数据
  11. 1613: [Usaco2007 Jan]Running贝茜的晨练计划
  12. windows phone 8.1常用启动器实例
  13. cisco交换机实现端口聚合
  14. blaze介绍
  15. Cocos Creator JS 时间戳日期转换
  16. getParameter和getAttribute的区别
  17. 吴恩达课后作业学习2-week3-tensorflow learning-1-基本概念
  18. 001-电脑操作规范-2019年03月.doc
  19. MetaMask/json-rpc-middleware-stream
  20. 【转】Python操作MongoDB数据库

热门文章

  1. Linux虚拟机中 Node.js 开发环境搭建
  2. clearfix清除浮动
  3. spark2.0.1 安装配置
  4. mybatis3.2.3+spring3 控制台打印sql解决办法
  5. Maven搭建SSH环境
  6. 浅谈Extjs radiogroup change事件与items下的checked属性
  7. 初学mongodb笔记
  8. Xcode 7如何 免费 真机调试iOS应用
  9. c++虚函数和内联构造函数
  10. 用Python获取沪深两市上市公司股票信息,提取创近10天股价新高的、停牌的、复牌不超过一天或者新发行的股票,并存入mysql数据库