2018年,新的開始

希望自己能保持每週至少更新一次代碼的頻率,從這次開始

  • 安裝tensorflow、theano和keras的過程
  • 試運行代碼的注意事項

安裝tensorflow、theano和keras的過程

全文主要是爲了實現微軟研究院鄭宇的研究而做的努力

說明

  • 作者程序用的是2.7版本,下面安裝軟件用的都是3的版本,但思路是一致的
  • 2.7版本的話記得更新包
  • windows只能是python3.5及以上版本安裝TensorFlow,因此2.7版本建議theano1.2
  • 也可以將源代碼修改爲python3的版本
    import pickle
    for i in range(num):
    preprocessing下的ini.py

卸載

之前python3.6我僅安裝32位,須卸載。爲保證卸載完全,先用原安裝包(包括小版本號相同)修復之後再卸載
之前已有Anaconda則也需要卸載乾淨(並清理與python關聯)

Anaconda安裝

  • 下載python3.6_64和Anaconda_64;
  • 安裝Anaconda_64,配置環境路徑;
  • Pip安裝一些包(相當於測試,保證沒有和2.7有衝突);
  • 補充java的環境
  • Spyder模擬matlab的變量空間

安裝深度學習相關

安裝CUDA和CUDNN(CUDA 8.0 (安裝包和2補丁) & CuDnn 6.0)

驅動精靈保證驅動正確安裝
CUDA安裝包下載:https://developer.nvidia.com/cuda-80-ga2-download-archive

注意版本: All our prebuilt binaries have been built with cuDNN 6. We anticipate releasing TensorFlow 1.4 with cuDNN 7.
若顯示下圖錯誤-根據顯卡計算能力更改(750ti的cc爲5.0)
測試: 先通過VS版本build solution,然後cd C:\ProgramData\NVIDIACorporation\CUDA Samples\v8.0\bin\win64\Release(或debug文件夾)執行裏面的deviceQuery.exe文件

CuDNN安裝包下載:https://developer.nvidia.com/cudnn

  • 要註冊Nvidia用戶,並加入CuDNN開發組,填若干問卷就可以下載了.選擇下載版本時要注意和Cuda版本匹配。解壓後覆蓋至CUDA的安裝目錄下
  • Cudnn解壓後將bin,include,lib三個文件夾裏面的內容覆蓋至Cuda安裝目錄下,默認路徑爲C:\Program Files\NVIDIA GPUComputing Toolkit\CUDA\v8.0(記住不是替換,是把Cudnn文件裏的.dll文件添加到Cuda裏面)

安裝tensorflow版本(cpu版本,已支持3.6,最好pip);

部分說明要求配置環境,感覺像是內部建立小環境(root環境下的包不能用)-不需要

配置環境操作過程代碼

>>>conda create --name tensorflow python=3.6.3
>>>conda info --envs
>>>activate tensorflow
(運行)
>>>conda list
>>>pip install tensorflow-gpu
>>>conda install keras
>>>deactivate tensorflow

以上是在cmd環境下的配置過程

python測試代碼

# 測試程序一
import tensorflow as tf
hello = tf.constant('Hello,TensorFlow!')
sess = tf.Session(config=tf.ConfigProto(log_device_placement=True))
print (sess.run(hello))
a = tf.constant(10)
b = tf.constant(32)
print(sess.run(a + b))
# 測試程序二
import tensorflow as tf
# Creates a graph.
a = tf.constant([1.0, 2.0, 3.0, 4.0, 5.0, 6.0], shape=[2, 3], name='a')
b = tf.constant([1.0, 2.0, 3.0, 4.0, 5.0, 6.0], shape=[3, 2], name='b')
c = tf.matmul(a, b)
# Creates a session with log_device_placement set to True.
sess = tf.Session(config=tf.ConfigProto(log_device_placement=True))
# Runs the op.
print (sess.run(c))

安裝tensorflow-gpu版本

需要先裝CUDA和CUDNN,用於GPU加速(同版本,已安裝1.4.0,一定pip)

速度太慢可以考慮其他鏡像源,如清華和阿里雲,生成文件在C:\Users\hp\
版本不太新 / 掛vpn不加鏡像則下的快,但存在代理和版本不適應風險

conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free/

安裝Theano

通過安裝包(python setup.py install),1.0.1是最後更新版本

pip install theano keras
conda install -c mila-udem pygpu
conda install -c conda-forge pygpu
import theano可能出現各種錯誤!!!
# 檢查所有相應的包(儘量用conda裝)
conda install numpy scipy mkl mkl-service libpython m2w64-toolchain

可能存在問題

  • 安裝提示所需擴展包
  • 提示mkl_intel_thread.dll出錯,則將.\Lib\site-packages\numpy\core\下同名文件拷出替換
  • WARNING (theano.tensor.blas): Using NumPy C-API based implementation for BLAS
    更換上一個穩定版本(0.9)不報提示,但出現其他錯誤,所以不管
  • 檢查blas加速是否成功(FALSE表示成功,未成功)
import numpy
id(numpy.dot) == id(numpy.core.multiarray.dot)
# 配置文件C:\Users\hp\.theanorc.txt
# 添加路徑D:\Anaconda3\Library\mingw-w64\bin
# 測試
import theano.tensor as T
from theano import function
x = T.dscalar('x')
y = T.dscalar('y')
z = x + y
f = function([x, y], z)
f(2, 3)

通過安裝包(python setup.py install)安裝Keras

作者建議安裝1.2版本(我安裝最新2.1.2版本暫未出錯)
按照要求更改配置文件:C:\Users\hp.keras\keras.json(更改爲2.+theano)

[global]
device = cuda0
floatX = float32
cxx=D:\Anaconda3\Library\mingw-w64\bin\g++.exe
compiler_bindir=C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\bin
[dnn]
enabled = True
include_path=C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v8.0\include
library_path=C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v8.0\lib\x64

安裝HDF5和h5py

測試CUDA與cuDNN

測試tenseoflow環境下是否工作正常:

查詢GPU是否支持CUDA:https://developer.nvidia.com/cuda-gpus

原有臺式機若是Intel(R) HD Graphics(集成顯卡,CPU自帶),不被支持
visible gpu device (device: 0, name: GeForce GT 420, pci bus id: 0000:01:00.0) with Cuda compute capability 2.1. The minimum required Cuda capability is 3.0.

第一種判斷(最常見,但我總是無法調出)
第二種修改(依舊無法得到結果)

import os
os.environ['TF_CPP_MIN_LOG_LEVEL']='3'
import tensorflow as tf
sess = tf.Session(config=tf.ConfigProto(log_device_placement=True)) 

第三種實驗(可以證明)

import tensorflow as tf
with tf.device('/gpu:0'):
    a = tf.constant([1.0, 2.0, 3.0, 4.0, 5.0, 6.0], shape=[2, 3], name='a')
    b = tf.constant([1.0, 2.0, 3.0, 4.0, 5.0, 6.0], shape=[3, 2], name='b')
c = tf.matmul(a, b)
with tf.Session() as sess:
print (sess.run(c)) 
tf = tf.Session(config=tf.ConfigProto(log_device_placement=True))
tf.list_devices()

測試theano環境下是否工作正常(重要)

  • theano-cache purge #清理緩存
  • 使用theano_gpu.py測試程序
  • 測試keras/examples/
    python mnist_cnn.py(下載數據時間較長)

作者源代碼試運行

安裝並下載數據

測試數據集(spyder好用)

import deepst
import h5py
f = h5py.File('C:\\Users\\hp\\Desktop\\zheng\\TestDeep\\DeepST-master\\data\\TaxiBJ\\BJ13_M32x32_T30_InOut.h5')
for ke in f.keys():
    print(ke, f[ke].shape)    
from deepst.datasets import stat; 
stat('C:\\Users\\hp\\Desktop\\zheng\\TestDeep\\DeepST-master\\data\\TaxiBJ\\BJ13_M32x32_T30_InOut.h5')

運行模型

沒有gpu下運算速度很慢(未能成功安裝tensorflow-gpu或者theano gpu版本)
在gpu下成功運行速度加快
作者的源代碼只跑模型,不輸出結果,需要重寫程序讀取數據和輸出可視化結果
進出流量應該是網格的進出流量,而非OD流量


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章