zoukankan      html  css  js  c++  java
  • 在ubuntu上用keras(theano backend, gpu)

    现在要做的东西需要用keras with theano backend在gpu上训练,坑非常多,因为貌似theano都停止更新了,但是follow的project是用theano backend写的,转到tensorflow上难度会很大 (不排除之后转去tensorflow backend的可能性)

    首先,如果需要查看服务器上当前账号使用的cuda和 cudnn版本,用以下命令:
    cuda: nvcc --version
    cudnn: cat /usr/local/cuda/include/cudnn.h | grep CUDNN_MAJOR -A 2

    坑1:
    修改keras backend
    这个很容易,只要在~/.keras/kears.json里修改
    "image_dim_ordering": "th"
    "backend": "theano"
    就可以了,修改完成之后打开python输入import keras就会出现Using Theano backend, 表示keras已经imported并且用上了Theano backend。

    坑2:
    就在认为keras都已经成功import了之后,还能出啥幺儿子呢?
    这时候就来了个AttributeError:’module’object has no attribute ‘ifelse’
    这个问题分析很顶:根据错误信息提示,错误是在theano_backend.py这个文件中发生,可见应该是keras的backend(后端) theano出现了问题,进一步查找发现是kera的版本和theano版本不匹配所致,即所使用的theano版本太新,而keras尚不支持该版本中theano的ifelse接口。可以这样解决:https://blog.csdn.net/xiaoyufei117122/article/details/78261231

    坑3:
    ModuleNotFoundError: No module named 'h5py'
    HDF(Hierarchical Data Format)指一种为存储和处理大容量科学数据设计的文件格式及相应库文件, python中处理这个文件的包是h5py,这个和keras没关系,嘻嘻。

    坑4:
    现在就要想着怎么用gpu跑keras了。tensorflow-gpu版本可以自动用gpu跑 ,theano要在~/.theanorc连设置一下,具体怎么设置看:
    https://www.jianshu.com/p/12af936e20ef
    https://www.jianshu.com/p/b67fd7140356
    设置完成之后打开python输入import keras,然后就出现
    Using Theano backend.
    Using cuDNN version 5005 on context None
    Mapped name None to device cuda: Tesla K40c (0000:03:00.0)
    表示已经成功调用theano backend而且成功输出使用的gpu名称

    坑5:
    这个是巨坑,打出来的error看都看不懂,猜测应该是cudnn版本不匹配的问题。
    网上看类似的error的解决方法是用cuda8.0+cudnn5.1的组合,之前服务器是cuda7.5.18 +cudnn5.0.5
    https://blog.csdn.net/jyl1999xxxx/article/details/85525911
    在网上找了几个教程,这两篇老哥最欧丽给了:

    1. https://www.cnblogs.com/deeplearning1314/p/8444352.html (和我的需求环境一模一样!)
    2. https://blog.csdn.net/wanzhen4330/article/details/81699769
    3. https://www.cnblogs.com/sddai/p/10278005.html。 (具体教了在实验室机器上一个CUDA,多个cuDNN,如何不冲突)
      按照他们的方法下载了cuda8.0的runfile后,发现自己tmd没权限,回家!

    坑6:
    找了实验室负责维护服务器的大叔,因为规章制度要求不能给我sudo权限(可以理解!我自己都怕我乱搞弄垮整个server)。所以只能麻烦人家给我装cuda8.0+cudnn5.1了。装完了之后发现显卡的driver不够新,所以还是用不了gpu的theano。最后又把显卡驱动删掉重新更新了。然后就可以正常运行了!gpu上训练的速度是cpu的大概10倍。
    小插曲 :刚刚装好的时候,第一次run还是出现了之前的错误,正在绝望的时候突然想到,虽然新的cuda和cudnn已经装好了,但是theano用哪个cuda和cudnn是要在~/.theanorc文件里自己修改的!参考以下链接:
    https://www.cnblogs.com/zangyu/p/5661953.html

    现在开始训练!一共10个epoch,每个大概80分钟的样子,大概明天早上来就能看到结果。

  • 相关阅读:
    Java设计模式-----装饰模式
    Java并发包中Lock的实现原理
    ThreadLocal,静态变量,实例变量,局部变量的线程安全
    ThreadLocal类详解
    SQL之LEFT JOIN,EIGHT JOIN,INSERT JOIN的区别
    Wireshark 、HTTPWatch、Fiddler的介绍
    TCP/IP、HTTP、Socket的区别
    我希望你并不幸福
    Autoregressive Convolutional Neural Networks for Asynchronous Time Series
    DRL Lecture1:Policy Gradient
  • 原文地址:https://www.cnblogs.com/fledlingbird/p/10637516.html
Copyright © 2011-2022 走看看