TensorFlow安裝及實例-(Ubuntu16.04.1 & Anaconda3)

TensorFlow安裝及實例-(Ubuntu16.04.1 & Anaconda3)

  1. Python-pip 和python-dev

Pip是python的默認包管理器,直接用pip安裝TensorFlow,安裝這兩個包

命令:apt-get install python-pip python-dev python-virtualenv

可以virtualenv 創建一個隔離的容器, 來安裝 TensorFlow. 這是可選的,這樣做能使排查安裝問題變得更容易。

  1. 安裝Anaconda3

命令:bash Anaconda3-4.3.1-Linux-x86_64.sh

Anaconda3是python的一個科學計算髮行版,內置了數百個Python經常會使用到的庫,也包括許多機器學習和數據挖掘的庫,容易Scikit-learn、NumPy、SciPy和Pandas等,另外還有一些TensorFlow的依賴庫,推薦安裝這個版本的python。

  1. Ubuntu(32位)安裝tensorflow報錯

export TF_BINARY_URL = https://storage.googleapis.com/tensorflow/linux/cpu/tensorflow-1.0.0rc0-cp35-cp35m-linux_x86_64.whl

pip install --upgrade $ TF_BINARY_URL

Tensorflow 不支持32位,只支持64位。這太坑爹,本人的電腦性能不行,一直用的是Virtualbox或是Vmware運行的32位Ubuntu(12.04),剛開始還以爲是Ubuntu版本太低,一直升級到Ubuntu16,發現還是不行,最後再查才發現TensorFlow只支持64位。

這絕對是一個大坑,謹慎勿入!

以下是報錯:

tensorflow-1.0.0rc0-cp35-cp35m-linux_x86_64.whl is not a supported wheel on this platform

出現此錯誤後,查看Ubuntu系統是32位的還是64位的:

命令: uname –m

提示i686則代表系統是32位版本的。

  1. Virtualbox安裝64位Ubuntu

Win7 上Vitualbox虛擬機默認是不支持安裝64爲虛擬機系統的,如下所示,只能選擇擇32位的安裝:

這是因爲PC的主板BIOS默認不開啓用主板虛擬化技術(Virtualization)。要運行一些操作系統,虛擬化軟件和虛擬機,硬件虛擬化就需要啓用。大多數情況下,不需要虛擬化技術的操作系統可以正常運行在啓用了虛擬化技術的系統,但有些需要這種技術的操作系統,必須啓用虛擬化技術才能運行。
所有最新的處理器和主板都支持虛擬化技術,檢查一下你的主板廠商是否支持並且要知道如何啓用或禁用BIOS中的VT。當在主板上啓用虛擬化技術後,操作系統能立即檢測到。

啓用主板虛擬化技術 ,聯想電腦(本人的)重啓系統按F2進入BIOS, 進入BIOS後 :

高級->CPU菜單-> inter(CR)  Virtualization

選擇enable,然後按F10保存,重啓電腦後可以VirtualBox就有64位系統的選項了,然後在Ubuntu官網下載最新的64位的操作系統鏡像ubuntu-16.04.2-desktop-amd64.iso

http://cn.ubuntu.com/download/

安裝ubuntu虛擬機就簡單了,這裏就不詳細說了。

  1. VirtualBox 共享文件夾

在宿主機(Windows)和虛擬機(Ubuntu)之間共享文件的重要性就不多說了,這裏簡單介紹如何設置共享文件夾。

在Windows任意盤符下建立一個共享的文件夾如E:\Shared,然後在Ubuntu系統中設置掛載點,掛載點目錄添加"Shared"目錄,接着執行"mount -t vboxsf Shared /mnt/share/",就能完成共享文件夾的設置。

重啓Ubuntu系統進入/media 目錄即可即看見sf_Shared目錄,也就是Windows的Shared共享目錄,如下:

這樣就可以方便的在Windows和Ubuntu虛擬機之間共享文件了。

設置自動掛載:

即etc/fstab中添加一項

Shared /mnt/share vboxsf rw,gid=110,uid=1100,auto 0 0

 

  1. 安裝正確Anaconda3版本

在64位Ubuntu上Anaconda3必須安裝64位的Anaconda3即Anaconda3-4.3.1-Linux-x86_64.sh,如果不小心下載了32位的版本Anaconda3-4.3.1-Linux-x86.sh,在Ubuntu(64位)安裝:

命令:bash Anaconda3-4.3.1-Linux-x86.sh

會報以下錯誤: cannot execute native linux-32 binary, output from 'uname –a ' is

正確的是安裝64位的Anaconda3,即:

命令:bash Anaconda3-4.3.1-Linux-x86_64.sh

  1. 報錯tensorflow-1.0.0rc0-cp35-cp35m-linux_x86_64.whl is not a supported wheel on this platform

Ubuntu版本對了,在安裝tensorflow的時候仍然報錯:

 

說是pip版本低,於是按照提示執行: pip install –upgrade pip, 然後再次安裝tensorflow,仍然報以下錯誤,

於是通過命令python –version 查看當前安裝的Anaconda3的python版本,是Python 3.6.0

而我們要安裝的tensorflow是基於python 3.5的,這個可以通過命令安裝命令:pip install –upgrade https://storage.googleapis.com/tensorflow/linux/cpu/tensorflow-1.0.0rc0-cp35-cp35m-linux_x86_64.whl

可以看出,cp3、cp35m就是代表的python的版本是3.5的,和我們之前安裝的Anaconda3的python版本3.6.0不匹配,所以果斷修改tensorflow安裝命令爲:

pip install –upgrade https://storage.googleapis.com/tensorflow/linux/cpu/tensorflow-1.0.0rc0-cp36-cp36m-linux_x86_64.whl

下圖可以看到tensorflow就正確安裝了!

看大下面的提示就說明已經正確安裝tensorflow-1.0.0rc0:

  1. TensorFlow實例

下面講解通過一個實例講解TensorFlow的用法,以及如何通過它的訓練得到優化後的參數的。這個例子中y_data 爲實際的輸出,其中x_data 爲原始的訓練輸入數據,它的權重爲0.1,偏置爲0.3,也就是一條線性的直線,y爲訓練模型的預測值,tensorflow訓練要達到目的就是使得y和y_data也就是預測值和實際值的均方差loss最小,經過以系列訓練過後,如果訓練得到的Weights權重,和biases偏置逼近了0.1和0.3則就說明訓練達到了好的效果。

 
"""
Please note, this code is only for python 3+. If you are using python 2+, please modify the code accordingly.
"""
import tensorflow as tf
import numpy as np #科學計算的模塊
 
# create data
x_data = np.random.rand(100).astype(np.float32) #生成100個隨機數列,數據類型是float32,tf中大多數都用的是float32
y_data = x_data*0.1 + 0.3 #0.1爲權重,0.3爲偏置
 
### create tensorflow structure start ###
Weights = tf.Variable(tf.random_uniform([1], -1.0, 1.0))#用Variable初始化Weights權重變量-隨機數列生成-1到1的1維數據,
biases = tf.Variable(tf.zeros([1])) #偏置初始化爲0,
 
y = Weights*x_data + biases #所要預測的y,通過訓練使得y逼近真實的y_data,優化得到的參數變量就即Weights和biases
 
loss = tf.reduce_mean(tf.square(y-y_data)) #預測的y和實際的y_data的差別,即均方差
optimizer = tf.train.GradientDescentOptimizer(0.5) #用tf的梯度下降優化器減少誤差loss,提升參數的準確度,0.5爲學習效率(一般小於1)
train = optimizer.minimize(loss) #訓練以減少誤差
 
init = tf.initialize_all_variables() #初始化tf結構圖中的所有變量,這裏是Weights和biases
### create tensorflow structure end ###
 
sess = tf.Session() #激活創建的結構圖,Sesssion是神經網路的執行命令的對話控制
sess.run(init) #激活init,也就是所有結構
 
for step in range(201):#讓神經網絡一步一步的訓練 201步
sess.run(train) # 開始訓練
if step % 20 == 0: #每間隔20步打印以下訓練得到的變量值
print(step, sess.run(Weights), sess.run(biases))

訓練效果:

我們看到每個20步打印了訓練的權重和偏置,並且隨着訓練的進行權重和偏置逐漸的逼近0.1和0.3,說明模型通過了訓練達到了良好的效果。

  1. 實例警告處理

我們同時看到運行過程中有一些警告:

WARNING:tensorflow:From tf_exam1.py:23: initialize_all_variables (from tensorflow.python.ops.variables) is deprecated and will be removed after 2017-03-02.

Instructions for updating:

Use `tf.global_variables_initializer` instead.

意思是initialize_all_variables即將要被棄用,推薦用global_variables_initializer()函數來代替。所以根據提示之際用新的函數代替即可。

 

W tensorflow/core/platform/cpu_feature_guard.cc:45] The TensorFlow library wasn't compiled to use SSE4.2 instructions, but these are available on your machine and could speed up CPU computations.  

W tensorflow/core/platform/cpu_feature_guard.cc:45] The TensorFlow library wasn't compiled to use AVX instructions, but these are available on your machine and could speed up CPU computations

 

這些warings的意思是說:你的機器上有這些指令集可以用,並且用了他們會加快你的CPU運行速度,但是你的TensorFlow在編譯的時候並沒有用到這些指令集。

 

我的tensorflow在安裝的時候採用的pip install指令,這種安裝方式會存在這種問題。主要有兩種解決方法,一種是修改警告信息的顯示級別,使這種信息不再出現,另外一種就是自己重新編譯安裝tensorflow,在編譯的時候使用這些指令集。這裏我嘗試第二種解決方法。並且由於我的機器上沒有高效的GPU,所以我嘗試安裝的是CPU版本。

這裏因爲不影響實驗就不處理這個warning,所以修改了第一個warning之後的程序變成:

"""
Please note, this code is only for python 3+. If you are using python 2+, please modify the code accordingly.
"""
import tensorflow as tf
import numpy as np #科學計算的模塊
 
# create data
x_data = np.random.rand(100).astype(np.float32) #生成100個隨機數列,數據類型是float32,tf中大多數都用的是float32
y_data = x_data*0.1 + 0.3 #0.1爲權重,0.3爲偏置
 
### create tensorflow structure start ###
Weights = tf.Variable(tf.random_uniform([1], -1.0, 1.0))#用Variable初始化Weights權重變量-隨機數列生成-1到1的1維數據,
biases = tf.Variable(tf.zeros([1])) #偏置初始化爲0,
 
y = Weights*x_data + biases #所要預測的y,通過訓練使得y逼近真實的y_data,優化得到的參數變量就即Weights和biases
 
loss = tf.reduce_mean(tf.square(y-y_data)) #預測的y和實際的y_data的差別,即均方差
optimizer = tf.train.GradientDescentOptimizer(0.5) #用tf的梯度下降優化器減少誤差loss,提升參數的準確度,0.5爲學習效率(一般小於1)
train = optimizer.minimize(loss) #訓練以減少誤差
 
init = tf.global_variables_initializer() #初始化tf結構圖中的所有變量,這裏是Weights和biases
### create tensorflow structure end ###
 
sess = tf.Session() #激活創建的結構圖,Sesssion是神經網路的執行命令的對話控制
sess.run(init) #激活init,也就是所有結構
 
for step in range(201):#讓神經網絡一步一步的訓練 201步
sess.run(train) # 開始訓練
if step % 20 == 0: #每間隔20步打印以下訓練得到的變量值
print(step, sess.run(Weights), sess.run(biases))

運行的效果:

這次沒有了第一個警告。

例子程序存放在oschina上:

http://git.oschina.net/wjiang/tensorflow_python3

git clone http://git.oschina.net/wjiang/tensorflow_python3

 

 

 

 

 

發佈了27 篇原創文章 · 獲贊 98 · 訪問量 19萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章