本文记录了安装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

最后训练完的词向量如图

DeepLearning入门笔记(一),准备工作与注意事项的更多相关文章

  1. React.js入门笔记

    # React.js入门笔记 核心提示 这是本人学习react.js的第一篇入门笔记,估计也会是该系列涵盖内容最多的笔记,主要内容来自英文官方文档的快速上手部分和阮一峰博客教程.当然,还有我自己尝试的 ...

  2. MySQL入门笔记

    MySQL入门笔记 版本选择: 5.x.20 以上版本比较稳定 一.MySQL的三种安装方式: 安装MySQL的方式常见的有三种: ·          rpm包形式 ·          通用二进制 ...

  3. Python爬虫 小白[3天]入门笔记

    笔记来源 Day-0 1.如果你还不了解Python的基础语法,可以移步|>>>Python 基础 小白 [7天] 入门笔记<<<|或自行学习. 简介 1.什么是爬 ...

  4. 每天成长一点---WEB前端学习入门笔记

    WEB前端学习入门笔记 从今天开始,本人就要学习WEB前端了. 经过老师的建议,说到他每天都会记录下来新的知识点,每天都是在围绕着这些问题来度过,很有必要每天抽出半个小时来写一个知识总结,及时对一天工 ...

  5. ES6入门笔记

    ES6入门笔记 02 Let&Const.md 增加了块级作用域. 常量 避免了变量提升 03 变量的解构赋值.md var [a, b, c] = [1, 2, 3]; var [[a,d] ...

  6. [Java入门笔记] 面向对象编程基础(二):方法详解

    什么是方法? 简介 在上一篇的blog中,我们知道了方法是类中的一个组成部分,是类或对象的行为特征的抽象. 无论是从语法和功能上来看,方法都有点类似与函数.但是,方法与传统的函数还是有着不同之处: 在 ...

  7. redis入门笔记(2)

    redis入门笔记(2) 上篇文章介绍了redis的基本情况和支持的数据类型,本篇文章将介绍redis持久化.主从复制.简单的事务支持及发布订阅功能. 持久化 •redis是一个支持持久化的内存数据库 ...

  8. redis入门笔记(1)

    redis入门笔记(1) 1. Redis 简介 •Redis是一款开源的.高性能的键-值存储(key-value store).它常被称作是一款数据结构服务器(data structure serv ...

  9. OpenGLES入门笔记四

    原文参考地址:http://www.cnblogs.com/zilongshanren/archive/2011/08/08/2131019.html 一.编译Vertex Shaders和Fragm ...

随机推荐

  1. java selenium (四) 使用浏览器调试工具

    在基于UI元素的自动化测试中, 无论是桌面的UI自动化测试,还是Web的UI自动化测试.   首先我们需要查找和识别UI元素. 在基于Web UI 自动化测试中, 测试人员需要了解HTML, CSS和 ...

  2. go语言环境搭建

    1.官网https://golang.org/dl/下载go语言的执行器 2.此处以Windows操作系统上安装go为例,安装go1.7.3.windows-amd64.msi 3.配置go环境变量, ...

  3. mongodb-replset安装

    节点分配 10.110.18.89 10.110.18.90 10.110.18.94 配置文件 systemLog: destination: file path: "/data/mong ...

  4. PHP字符串处理函数

    /* * 确定字符串长度 * int strlen(string str) * 比较两个字符串 * 1.strcmp函数对两个字符串进行二进制安全的比较,并区分大小写 * int strcmp(str ...

  5. mysql-5.6.17-win32的安装?

    官方mysql最新版本:http://cdn.mysql.com/Downloads/MySQL-5.6/mysql-5.6.17.tar.gz 解压后,以管理员的身份打开cmd.exe,切入安装目录 ...

  6. 浅谈对ionic项目的理解

    在思考怎么将客户端app连接到服务器的时候,就在想ionic项目的本质是什么,一开始因为ionic serve这一命令,我以为它自己就是个服务器,但是后来一细想又感觉不是这样,不然客户端又该怎么和服务 ...

  7. Python 面向对象[Day 06]

     面向对象编程(Object-Oriented Programming)  概述 面向过程:根据业务逻辑从上至下写代码,实现所需功能. 函数式:将某些功能代码封装至函数中,在需要时调用函数,函数式代码 ...

  8. open nms安装教程

    而在正式的任务,我被要求在Windows平台上部署开源网络管理系统.虽然工作的任务,我得到了一些问题,对此我无法在网上寻找解决的问题,我用的命中和试验方法得到了解决.然后我想就这些问题及其解决办法写. ...

  9. 在CDH5.5.0上安装Phoenix1.2

    1.下载CLABS版本的Phoenix CLABS_PHOENIX-4.5.2-1.clabs_phoenix1.2.0.p0.774-el6.parcel和manifest.json文件 2.将文件 ...

  10. golang调用EXE

    我是win7+go1.7+liteide,调用calc.exe package main import ( "os/exec" ) func main() { datapath : ...