DeepLearning入门笔记(一),准备工作与注意事项
本文记录了安装theano、keras、tensorflow以及运行tutorial程序时遇到的一些问题,供后人参考。
实验机器:联想笔记本,i7-6700HQ,GTX960M,16G内存,SSD硬盘,64位Ubuntu 16.04 LTS
备注:
不推荐windows,会遇到各种不兼容问题。Ubuntu最好使用16.04这个版本,低版本的Ubuntu可能出现显卡驱动不支持等问题。
- Ubuntu16.04 装好后,注意将系统默认的显卡驱动改为nvidia的驱动,并更新显卡驱动,我用的是version 367.48。
TensorFlow的gpu版本安装比较麻烦,由于CUDA版本兼容问题,如果使用当前最新的CUDA 8.0,则需要自己重新编译TensorFlow源代码,然后本地安装。
建议先安装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入门笔记(一),准备工作与注意事项的更多相关文章
- React.js入门笔记
# React.js入门笔记 核心提示 这是本人学习react.js的第一篇入门笔记,估计也会是该系列涵盖内容最多的笔记,主要内容来自英文官方文档的快速上手部分和阮一峰博客教程.当然,还有我自己尝试的 ...
- MySQL入门笔记
MySQL入门笔记 版本选择: 5.x.20 以上版本比较稳定 一.MySQL的三种安装方式: 安装MySQL的方式常见的有三种: · rpm包形式 · 通用二进制 ...
- Python爬虫 小白[3天]入门笔记
笔记来源 Day-0 1.如果你还不了解Python的基础语法,可以移步|>>>Python 基础 小白 [7天] 入门笔记<<<|或自行学习. 简介 1.什么是爬 ...
- 每天成长一点---WEB前端学习入门笔记
WEB前端学习入门笔记 从今天开始,本人就要学习WEB前端了. 经过老师的建议,说到他每天都会记录下来新的知识点,每天都是在围绕着这些问题来度过,很有必要每天抽出半个小时来写一个知识总结,及时对一天工 ...
- ES6入门笔记
ES6入门笔记 02 Let&Const.md 增加了块级作用域. 常量 避免了变量提升 03 变量的解构赋值.md var [a, b, c] = [1, 2, 3]; var [[a,d] ...
- [Java入门笔记] 面向对象编程基础(二):方法详解
什么是方法? 简介 在上一篇的blog中,我们知道了方法是类中的一个组成部分,是类或对象的行为特征的抽象. 无论是从语法和功能上来看,方法都有点类似与函数.但是,方法与传统的函数还是有着不同之处: 在 ...
- redis入门笔记(2)
redis入门笔记(2) 上篇文章介绍了redis的基本情况和支持的数据类型,本篇文章将介绍redis持久化.主从复制.简单的事务支持及发布订阅功能. 持久化 •redis是一个支持持久化的内存数据库 ...
- redis入门笔记(1)
redis入门笔记(1) 1. Redis 简介 •Redis是一款开源的.高性能的键-值存储(key-value store).它常被称作是一款数据结构服务器(data structure serv ...
- OpenGLES入门笔记四
原文参考地址:http://www.cnblogs.com/zilongshanren/archive/2011/08/08/2131019.html 一.编译Vertex Shaders和Fragm ...
随机推荐
- NetworkComms V3 使用Json序列化器进行网络通信
刚才在网上闲逛,偶然看到一篇文章 C#(服务器)与Java(客户端)通过Socket传递对象 网址是:http://www.cnblogs.com/iyangyuan/archive/2012/12/ ...
- blade and soul zone overview
The world of Blade and Soul, is a vast extension of land containing two continents (the Southern Con ...
- android xfermode绘图
1.fermode:是来自 transfer-modes,在画笔中设置xfermode后,画笔在使用的时候就会应用设置的像素转换模式.就类似于ps中的选取功能,留下的选取是从原选区中去除还是合并,取交 ...
- 移动apache访问日志后如何立即生效
一次偶然测试发现移动了apache下的access_log日志后或者修改了access_log的名称,该移动的日志或修改名称的日志文件仍记录了apache访问信息,即没有实时生效,后来查了资料才知道: ...
- Delphi 中同类型方法的说明
对象的方法能定义成静态(static).虚拟(virtual).动态(dynamic)或消息处理(message).请看下面 的例子: TFoo = class procedure IAmAStati ...
- IOS Core Animation Advanced Techniques的学习笔记(四)
第五章:Transforms Affine Transforms CGAffineTransform是二维的 Creating a CGAffineTransform 主要有三种变 ...
- Dependency Scope
Dependency Scope <dependency>中还引入了<scope>,它主要管理依赖的部署.目前<scope>可以使用5个值: * compile,缺 ...
- Fibonacci(斐波那契)递归实现。容易看懂
#include<iostream>using namespace std;int fibonacci(int n){if(n<=0) return 0; else if(n==1) ...
- C#获取实体类属性名称
方法: public static string GetPropertyName(Expression<Func<SupplierInfos, string>> expr) { ...
- CSS 透明度 设置 兼容IE FF
filter:Alpha(Opacity=80);/*IE*/ -moz-opacity:0.8;/*FF*/ opacity: 0.8;/*所有元素*/ 参数设置说明: Alpha(Opacity= ...