Tensorflow開發環境配置及其基本概念

来源:http://www.cnblogs.com/vipyoumay/archive/2017/09/04/7474435.html
-Advertisement-
Play Games

TensorFlow™ 是一個採用數據流圖(data flow graphs),用於數值計算的開源軟體庫 ...


1.1. 安裝Tensorflow開發環境

1.1.1. 安裝pycharm

Pycharm目前是機器學習中最普遍,最收歡迎的工具之一,它強大,具有親和力,正如它的名字一樣魅力無窮。Pycharm官網上有專業版和社區版,社區版是免費的,僅做數據科學方面的研究的話社區版也足夠開發使用了,Windows系統的下載地址為:https://www.jetbrains.com/pycharm/download/#section=windows, 下載完成後就可以安裝了,安裝無需做特別的設置,預設安裝就可以了。

1.1.2. 安裝python3.6

tensorflow需要運行在python3.4及以上版本,在這個問題上我就出錯過一次。之前我電腦上的python版本為2.7,一開始我沒有註意到這種情況,我就直接在pycharm中打開File > Default Setting > Project Interpreter,查找tensorflow然後點擊安裝,結果報錯了(如圖1-1,1-2所示),錯誤的提示信息也讓人摸不著頭腦,查閱了一些資料猛的才發現是我的python版本出了問題,於是毫不猶豫的去下載python3.6(目前已更新到3.6.2版本了),下載地址為官網:https://www.python.org/getit/, 註意python3.6版本已經不支持Win32位的系統了,只有Win64位的安裝包,下載如圖1-3所示的紅色框中的安裝包。

2017-08-29-09-31-41
圖1-1

2017-08-29-09-33-07
圖1-2

2017-08-29-09-33-49
圖1-3

下載完成後開始安裝,在正式安裝之前一定要記得勾選“Add Python 3.6 to PATH”,如圖1-4所示,意思是把python的安裝路徑加入到系統的環境變數中。接著可根據自己需要選擇預設安裝或自定義安裝,不管怎樣都要記住安裝路徑,方便後續相關設置。

2017-08-29-09-38-03
圖1-4

2017-08-29-09-46-30
圖1-5

圖1-5所示的安裝成功後,我們再來驗證一下是否真正安裝成功。打開cmd,輸入py,回車,可以看到出現了python3.6版本的相關信息(圖1-6所示),證明安裝成功。接著查看一下python的安裝路徑是否已經加入到了系統的環境變數中,打開控制面板 > 所有控制面板項 > 系統 > 高級系統設置 > 高級 > 環境變數,可以看到python的安裝路徑已經加入到了系統環境變數中,圖1-7所示。如果沒有路徑信息,可能是安裝python3.6之前忘記勾選“Add Python 3.6 to PATH”這一步,這個時候就只能自己手動添加了,把你之前記住的安裝路徑在新建環境變數裡面填寫清楚就可以了。

2017-08-29-09-49-18
圖1-6

2017-08-29-09-54-24
圖1-7

1.1.3. 安裝Tensorflow

Pycharm,以及Python3.6都安裝完畢,接著打開Pycharm,在File > Default Setting > Project Interpreter中點擊設置圖片按鈕,選擇Create VirtualEnv,如圖1-8所示,表示新建一個虛擬環境。建立虛擬環境的目的是為了方便以後便捷、快速的安裝各種庫或插件,以及以後的程式執行等都在該虛擬環境下運行。點擊“Create VirtualEnv”後跳出新建虛擬環境對話框,圖1-9所示,在“Name”處為虛擬環境命名,“Location”是指虛擬環境的安裝路徑,註意不要與python3.6的安裝目錄相同,“Base interpreter”處選擇python3.6的安裝目錄下的python.exe文件,設置完成後,Pycharm會為你新建好一個3.6版本的虛擬環境,如圖1-10所示。

2017-08-29-10-03-30
圖1-8

2017-08-29-10-09-04
圖1-9

2017-08-29-10-13-30
圖1-10

初始建立好的虛擬環境已經有pip工具了,接著還是按照最初的步驟安裝Tensorflow。點擊圖1-10上綠色的“+”號鍵,表示新安裝一個庫或插件,然後在出現的搜索框中搜索tensorflow,找到後點擊“Install Package”就好了,圖1-11所示,而不需要你親自碼代碼 pip install tensorflow,真的是方面快捷。

2017-08-29-10-21-53
圖1-11

提示安裝完成後,我們最後來驗證是否真正安裝成功,File > New Project,新建一個名字為tensorflow的項目,圖1-12,註意“Interpreter”處已經有了剛剛建立的虛擬環境,在該虛擬環境下新建一個項目,並開展相關的數據挖掘工作就是我們以後將要做的事情了。接著在該項目下新建一個test.py的文件,輸入import tensorflow,沒有報錯的話證明Tensorflow安裝成功。

2017-08-29-10-35-59
圖1-12

至此,我們的工具,環境都已經安裝,配置好了,下麵的章節我們將瞭解Tensorflow的概念和用法,開始我們的數據科學之旅。

1.2. Tensorflow基本概念

1.2.1. 聲明Tensor

在Tensorflow中,tensor是數據的核心單元,也可以稱作向量或多維向量,一個tensor組成了一個任意維數的數組的初始值模型,而一個tensor的秩(rank)是就是它的維數,這裡有一些例子。

3  #秩為0的tensor,是一個標量,shape[]
[1., 2., 3.]  #秩為1的tensor,是一個向量,shape[3]
[1., 2., 3.], [4., 5., 6.]]  #秩為2的tensor,是一個矩陣,shape[2,3]
[[[1., 2., 3.]], [[7., 8., 9.]]]  #秩為3的tensor,shape[2, 1, 3]

如何聲明一個tensor?請參見如下代碼。

import tensorflow as tf

#聲明固定tensor
zero_tsr = tf.zeros([2, 3])  #聲明一個2行3列矩陣,矩陣元素全為0
filled_tsr = tf.fill([4, 3], 42)  #聲明一個4行3列的矩陣,矩陣元素全部為42
constant_tsr = tf.constant([1, 2, 3])  #聲明一個常量,行向量[1 2 3]

#聲明連續tensor
linear_tsr = tf.range(start=6, limit=15, delta=3)  #[6, 9, 12]

#聲明隨機tensor
randnorm_tsr = tf.random_normal([2, 3], mean=0.0, stddev=1.0)  #[[ 0.68031377  1.2489816  -1.50686061], [-1.37892687 -1.04466891 -1.21666121]]

註意,tf.constant()函數可以用來把一個值傳播給一個數組,比如通過這樣的聲明tf.constant(42, [4, 3])來模擬tf.fill([4, 3], 42)的行為。

1.2.2. 變數和占位符

1.2.2.1. 變數

變數是演算法的參數,Tensorflow追蹤這些變數併在演算法中優化他們。Variable()函數用來聲明一個變數,並把一個tensor作為輸入,同時輸出一個變數。使用該函數僅僅是聲明瞭變數,我們還需要初始化變數,以下代碼是關於如果聲明和初始化一個變數的例子。


my_var = tf.Variable(tf.zeros([2,3]))   
init = tf.global_variables_initializer()
print(sess.run(init))
print(sess.run(my_var))

---result

[[ 0.  0.  0.]
 [ 0.  0.  0.]]

這裡請註意一個問題,當你調用tf.constant()函數的時候,聲明的常量就已經被初始化了,它們的值永遠不變。而相反,當你調用tf.Variable()函數的時候,變數並沒有被初始化,為了初始化所有的變數,你必須要運行一次如下代碼:


init = tf.global_variables_initializer()
sess.run(init)

#init是初始化所有的全局變數,在沒有調用sess.run()之前,變數都沒有被初始化。

1.2.2.2. 占位符

占位符是一個對象,你可以對它賦予不同類型和維度的數據,它依賴於計算圖的結果,比如一個計算的期望輸出。占位符猶如它的名字一樣僅僅為要註入到計算圖中的數據占據一個位置。聲明占位符用tf.placeholder()函數,以下是一個例子:

x = tf.placeholder(tf.float32, shape=[2,2])
y = tf.identity(x)
x_vals = np.random.rand(2,2)
sess.run(y, feed_dict={x: x_vals})

---result

[[ 0.11068643  0.57449234]
 [ 0.26858184  0.83333433]]

1.2.3. 計算圖(The Computational Graph)

Tensorflow是一個通過計算圖的形式來表述計算的編程系統,計算圖也叫數據流圖,可以把計算圖看做是一種有向圖,Tensorflow中的每一個計算都是計算圖上的一個節點,而節點之間的邊描述了計算之間的依賴關係。Tensorflow在創建Tensor的同時,並沒有把任何值都加入到計算圖中。

看如下代碼清單:

import tensorflow as tf
node1 = tf.constant(3.0, dtype=tf.float32)
node2 = tf.constant(4.0) # also tf.float32 implicitly
print(node1, node2)

---result
Tensor("Const:0", shape=(), dtype=float32) Tensor("Const_1:0", shape=(), dtype=float32)

可以看到輸出的並不是我們所期望的3.0 和 4.0 數字,而是一個node,通過sesson可計算出node的實際值。

sess = tf.Session()
print(sess.run([node1, node2]))

---result
[3.0, 4.0]

我們還可以通過操作符構建各種複雜的Tesnor Nodes

node3 = tf.add(node1, node2)
print("node3:", node3)
print("sess.run(node3):", sess.run(node3))

---result
node3: Tensor("Add:0", shape=(), dtype=float32)
sess.run(node3): 7.0

2017-08-28-16-57-51

上面的計算我們都是建立在靜態的數據上,Tensorflow還提供了palceholder用於後期輸入值的一個占位符


a = tf.placeholder(tf.float32)
b = tf.placeholder(tf.float32)
adder_node = a + b  # + provides a shortcut for tf.add(a, b)

print(sess.run(adder_node, {a: 3, b: 4.5}))
print(sess.run(adder_node, {a: [1, 3], b: [2, 4]}))

---result

7.5
[ 3.  7.]

還可以再上面的計算途中加入更多操作,見下代碼清單:


add_and_triple = adder_node * 3.
print(sess.run(add_and_triple, {a: 3, b: 4.5}))

---result
22.5

2017-08-28-17-05-03

在機器學習中,我們希望看到一個可隨意輸入的模型,就像上面代碼清單一樣,為讓模型可以訓練,我們需要能夠修改圖獲得新的輸出。Variables允許添加可訓練參數,如果使用如下代碼清單:

W = tf.Variable([.3], dtype=tf.float32)
b = tf.Variable([-.3], dtype=tf.float32)
x = tf.placeholder(tf.float32)
linear_model = W * x + b
init = tf.global_variables_initializer()
sess.run(init)
print(sess.run(linear_model, {x: [1, 2, 3, 4]}))

---result

[ 0.          0.30000001  0.60000002  0.90000004]

接下來我們將計算圖變得更為複雜,代碼清單如下:


sess = tf.Session()

my_array = np.array([[1., 3., 5., 7., 9.], [-2., 0., 2., 4., 6.], [-6., -3., 0., 3., 6.]])
x_vals = np.array([my_array, my_array + 1])
x_data = tf.placeholder(tf.float32, shape=(3, 5))

m1 = tf.constant([[1.], [0.], [-1.], [2.], [4.]])
m2 = tf.constant([[2.]])
a1 = tf.constant([[10.]])

prod1 = tf.matmul(x_data, m1)
prod2 = tf.matmul(prod1, m2)
add1 = tf.add(prod2, a1)

for x_val in x_vals:
    print(sess.run(add1, feed_dict={x_data: x_val}))


---result 

[[ 102.]
 [  66.]
 [  58.]]
[[ 114.]
 [  78.]
 [  70.]]

接下來我們來看下代碼如何運行,placeholder 在運行時送入(feed in)數據,從計算圖中可以看到,要執行Add操作,需要首先執行prod1,然後執行prod2,最後才執行Add操作。

2017-08-29-15-01-44

1.2.4. 矩陣操作

許多的演算法依賴於矩陣的操作,Tensorflow給我們提供了非常方便,快捷的矩陣運算。

# 生成對角線矩陣
identity_matrix = tf.diag([1.0, 1.0, 1.0])
# 隨機填充2行3列矩陣
A = tf.truncated_normal([2, 3])
# 填充5 到一個2行3列矩陣
B = tf.fill([2, 3], 5.0)
# 填充三行兩列的隨機數矩陣
C = tf.random_uniform([3, 2])
# 將numpy的矩陣轉換
D = tf.convert_to_tensor(np.array([[1., 2., 3.], [-3., -7., -1.], [0., 5., -2.]]))
sess = tf.Session()
print(sess.run(identity_matrix))
print(sess.run(A))
print(sess.run(B))
print(sess.run(C))
print(sess.run(D))

---result

[[ 1.  0.  0.]
 [ 0.  1.  0.]
 [ 0.  0.  1.]]

[[ 0.08475778 -0.81952369 -0.40169609]
 [-0.6406377  -0.67895085 -1.13811123]]

[[ 5.  5.  5.]
 [ 5.  5.  5.]]

[[ 0.30655277  0.81441486]
 [ 0.68046188  0.64171898]
 [ 0.76518583  0.10888731]]
 
[[ 1.  2.  3.]
 [-3. -7. -1.]
 [ 0.  5. -2.]]

1.2.5. 聲明運算符

Tensor具有很多標準的運算符,如add()sub()mul()div()等,除了這些標準的運算符外,Tensorflow給我們提供了更多的運算符。以下是一個基礎的數學函數列表,所有的這些函數都是按元素操作。

運算符 描述
abs() 計算一個輸入tensor的絕對值
ceil() 一個輸入tensor的頂函數
cos() Cosine函數 C
exp() 底數為e的指數函數,指數為輸入的tensor
floor() 一個輸入tensor的底函數
inv() 一個輸入tensor的倒數函數,(1/x)
log() 一個輸入tensor的自然對數
maximum() 取兩個tensor中的最大的一個
minimum() 取兩個tensor中的最小的一個
neg() 對一個tensor取負值
pow() 第一個tensor是第二個tensor的冪
round() 舍入最接近的整數
rsqrt() 計算一個tensor的平方根後求倒
sign() 根據tensor的符號返回-1,0,1中的某個值
sin() Sine函數
sqrt() 計算一個輸入tensor的平方根
square() 計算一個輸入的tensor的平方

下麵還有一些值得我們瞭解的函數,這些函數在機器學習中比較常用,Tensorflow已經包裝好了。

運算符 描述
digamma() 計算lgamma函數的導數
erf() 計算tensor的高斯誤差
erfc() 計算tensor的高斯互補誤差
lbeta() 計算自然對數的beta函數的絕對值
lgamma() 計算自然對數的gamma函數的絕對值
squared_difference() 計算兩個tensor的誤差平方

作者:帥蟲哥 出處: http://www.cnblogs.com/vipyoumay/p/7474435.html


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 1. 什麼是CSS CSS的全稱是Cascading Style Sheets,層疊樣式表。它用來控制HTML標簽的樣式,在美化網頁中起到非常重要的作用。 CSS的編寫格式是鍵值對形式的,比如 color: red; background-color: blue; font-size: 20px; ...
  • 1. 什麼是HTML5 網頁的5.0版本。2014年才定製完HTML5的標準,歷時8年 2. 為什麼要用HTML5 1> 跨平臺:利用HTML5編寫的UI界面能運行在所有擁有瀏覽器的平臺 2> HTML5的運行平臺:瀏覽器 3> 但是HTML5不能完成一些特定的功能,比如:拍照(ImagePicke ...
  • 前言 Electron 是一個搭建跨平臺桌面應用的框架,僅僅使用 JavaScript、HTML 以及 CSS,即可快速而容易地搭建一個原生應用。這對於想要涉及其他領域的開發者來說是一個非常大的福利。 原文作者:林鑫,作者博客:http://blog.gdfengshuo.com/ 項目介紹 倉庫地 ...
  • 使用 Android studio 開發項目中,有幾種引用三方代碼的方式:jar 包 ,類庫 ,gradle.build 的compile依賴。 大家會發現github上不少的項目只提供compile依賴的方式,但是當用到jar包使用過的情況 且 該項目不提供jar包的時候怎麼辦? 其實Androi ...
  • NSArray、NSMutableArray、NSDictionary、NSMutableDictionary、是我們的在iOS開發中非常常用的類。當然,在享受這些類的便利的同時,它們也給我們帶來一些困擾。粗心我們可能會調用addObject:傳入一個nil, 也有可能是會objectAtIndex ...
  • 1. standard standard 是活動預設的啟動模式,在不進行顯式指定的情況下,所有活動都會自動使用這個啟動模式。對於使用 standard 模式的活動,系統不會在乎活動是否已在返回棧中存在,每次啟動都會創建一個新的活動實例。 2. singleTop 當活動的啟動模式指定為 single ...
  • 效果圖 源碼 https://github.com/YouXianMing/Animations 說明 1. 數據適配器PickerViewDataAdapter含有PickerViewComponent的數組以及行高的信息,數組中有幾個Component就有幾列 2. PickerViewComp ...
  • 視圖的操作: 1.視圖的創建: create view view_name as 查詢語句; 2.視圖的查看: show tables;// 顯示所有的表和視圖 show create view view_name; desc view_name; show table status from ta ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...