深度學習的敲門磚:手把手教你TensorFlow初級入門

2021-02-20 機器學習AI算法工程

向AI轉型的程式設計師都關注了這個號👇👇👇


        人工智慧大數據與深度學習  公眾號: weic2c


在開始使用機器學習算法之前,我們應該首先熟悉如何使用它們。 而本文就是通過對TensorFlow的一些基本特點的介紹,讓你了解它是機器學習類庫中的一個不錯的選擇。

讓我們設想一下,當我們用Python寫代碼時,沒有那些方便的類庫會是怎樣一種窘境。 這就好比你有一個新的智慧型手機,而不安裝任何應用程式。 雖然它仍然可以打電話,發簡訊,但如果有了那些更方便的應用程式,這部智慧型手機才更有價值。

 

設想一下這個場景...你作為一名業務負責人,需要負責跟蹤銷售流程。 你希望計算銷售產品的收入。 現在有100個不同的產品在你的倉庫中,你需要用一個向量表示每個產品的價格。另一個大小為100的向量表示每個產品的庫存量。 以下的Python代碼是用來計算銷售所有產品的收入。注意了, 這裡沒有調用任何類庫。

  

revenue = 0for price, amount in zip(prices, amounts):    revenue += price * amount

 

代碼列表1. 不使用任何Python類庫計算兩個向量的內積

 

這段代碼只是計算兩個向量(也稱為點積)的內積。 想像一下,對於更複雜的問題,需要多少代碼。例如求解線性方程或計算兩個向量之間的距離。

 

當你安裝TensorFlow類庫的同時,其中還包括了非常知名的NumPy類庫,對Python編程中的數學操作非常有用。用Python編程時,不使用類庫(例如NumPy和TensorFlow)就像使用沒有自動對焦的相機:你雖然獲得了更多的靈活性,但你可能很容易犯錯。在機器學習的過程中已經很容易犯錯誤了,所以就讓我們使用TensorFlow來提高化軟體開發的效率吧。

 

代碼列表2展示了如何使用NumPy簡潔地編寫相同的內積運算。

 

import numpy as nprevenue = np.dot(prices, amounts)

代碼列表2. 用NumPy類庫計算內積


Python是一種簡潔的語言,這意味著你不會看到冗長的代碼。另一方面,Python語言的簡潔意味著許多處理都在後臺進行,因此我們應該熟悉它背後的原理。

 

關於TensorFlow的Python和C ++ API的各種函數的詳細文檔,請參見https://www.tensorflow.org/api_docs/index.html

 

機器學習主要依賴於很多數學公式,本文將對使用TensorFlow進行這類數學運算做一個初步的介紹。通過示例和代碼,大家可以對TensorFlow有一個初步了解。例如如何運用TensorFlow計算大數據的統計信息。 因此本文的重點將完全是關於如何使用TensorFlow,而不是一般的機器學習算法運用。

 

機器學習算法需要大量的數學運算。 通常,某個算法可以歸結為簡單函數組合的迭代,直到它收斂為止。 當然,也可以使用任何標準程式語言來執行這些計算。但是使用像TensorFlow這樣已經非常完善了的類庫是提高代碼可控性和性能的關鍵。

確保TensorFlow工作

首先,為我們的第一段代碼創建一個名為test.py的新文件。 通過運行以下代碼導入TensorFlow:

 

import tensorflow as tf


在導入TensorFlow後,如果Python解釋器沒有報錯,那麼我們就可以開始使用TensorFlow了。

 

遇到了錯誤? 在這裡,常見錯誤的原因是你可能安裝了GPU版本,並且類庫無法搜索CUDA驅動程序。 請記住,如果使用CUDA編譯庫,則需要使用CUDA的路徑更新環境變量。 你需要檢查TensorFlow上的CUDA指令。 (有關詳情,請參閱https://www.tensorflow.org/versions/master/get_started/os_setup.html#optional-linux-enable-gpu-support)。

使用TensorFlow中的規則

TensorFlow庫通常使用tf限定名稱來進行導入。 一般來說,使用tf限定名稱是一個不錯的方法,以便與其他開發人員和開源TensorFlow項目保持一致。 你也可以選擇不使用這個限定名稱,但這會影響你在自己的項目中重用別人的TensorFlow代碼。

表示張量

在現實世界中描述對象的一個簡便方法就是通過羅列出它的屬性或特徵。 例如,我們可以通過顏色,型號,發動機類型和裡程數描述一輛汽車。 這些特徵的有序列表被稱為特徵向量,這正是我們要在TensorFlow代碼中所表示的。

特徵向量是機器學習中最有用的方法之一,(它們就是一個數字列表)。每個數據項通常有一個特徵向量,而一個好的數據集則具有數千個特徵向量。 毫無疑問,你會經常一次處理多個向量。 矩陣簡明地表示了向量列表,其中矩陣的每列表示一個特徵向量。

 

在TensorFlow中用向量的向量表示矩陣,每個向量具有相同的長度。 圖1是一個兩行三列的矩陣的示例,例如[[1,2,3],[4,5,6]]。 注意,這是一個包含兩個元素的向量,每個元素對應一個矩陣行。

 

 

圖1.圖上半部分是計算機對矩陣的表示,下半部分是我們日常生活中對矩陣的表示。 這種形式的符號是大多數科學計算類庫中的常見範例。

 

我們通過指定其行和列索引來定位矩陣中的元素。 例如,第一行和第一列來表示左上角第一個元素。 有時,我們需要使用兩個以上的索引,這樣來表示一個元素會很方便。例如,在表示一個圖片中的像素時,我們不僅通過其行和列值來描述它,而且還使用紅,綠,藍通道來對其進行描述。 張量是通過任意數量的索引指定矩陣中元素的一般化。

 

一個張量的例子...假設一所小學為每個學生分配座位。 而你是這個學校的校長,並且你記不住這些學生的名字。 幸運的是,每個教室都有一個座位網格,可以通過學生的行和列來指定某個學生。

 

因為有多個教室,所以你不能簡單的說「早上好,4排10列!」你還需要指定教室,比如說「你好, 教室2的4排10列」。不像矩陣只需要兩個索引就能指定一個元素,這所學校的學生需要三個數字。 這三個數字都是三階張量的一部分!

 

張量是更多的嵌套向量。例如,一個2×3×2的張量為[[[1,2],[3,4],[5,6]],[[7,8],[9,10] 11,12]]],它可以被認為是兩個矩陣,每個大小為3×2。 因此,我們說這個張量的秩是3.一般來說,張量的秩是指定一個元素所需的索引的數量。 TensorFlow中的機器學習算法是作用於張量上的,理解如何使用它們是關鍵。

 

圖2.該張量可以被認為是堆疊在彼此之上的多個矩陣。 要指定其中的某個元素,必須指明行和列,以及要訪問的矩陣。 因此,該張量的秩為三。

  

你可能會對如何表示張量產生疑惑。下面三行代碼試圖表示相同的2×2矩陣。 該矩陣表示兩個維度的兩個特徵向量。 例如,它可以表示兩個人對兩部電影的評價。 每個人,由矩陣的行索引表示,分配一個數字來描述每個人的電影評價值,由列索引表示。 運行代碼以了解如何在TensorFlow中生成矩陣。

 

import tensorflow as tf# We』ll use NumPy matrices in TensorFlowimport numpy as np   # Define a 2x2 matrix in 3 different waysm1 = [[1.0, 2.0],      [3.0, 4.0]]m2 = np.array([[1.0, 2.0],               [3.0, 4.0]], dtype=np.float32)m3 = tf.constant([[1.0, 2.0],                  [3.0, 4.0]])# Print the type for each matrixprint(type(m1))print(type(m2))print(type(m3))# Create tensor objects out of the different typest1 = tf.convert_to_tensor(m1, dtype=tf.float32)t2 = tf.convert_to_tensor(m2, dtype=tf.float32)t3 = tf.convert_to_tensor(m3, dtype=tf.float32)# Notice that the types will be the same nowprint(type(t1))print(type(t2))print(type(t3))

 代碼列表3.表示張量的不同方式

 

第一個變量m1是一個列表,第二個變量m2是NumPy類庫中的一個ndarray,最後一個變量m3是TensorFlow的Tensor對象。TensorFlow中所有運算符(如neg)都設計為對張量對象進行操作。tf.convert_to_tensor(...)這個方法,我們可以用在任何地方,以確保我們處理張量而不是其他類型。TensorFlow類庫中的大多數方法都已經調用了它。使用tf.convert_to_tensor(...)並不是必須的,在這裡使用它,是因為它有助於我們理解隱式類型的跨類庫處理。

 

<class 『tensorflow.python.framework.ops.Tensor』>

讓我們再來看看如何中定義張量。 導入TensorFlow類庫之後,我們可以使用常量運算符,如代碼列表4所示。

 

import tensorflow as tf# Define a 2x1 matrixmatrix1 = tf.constant([[1., 2.]])# Define a 1x2 matrixmatrix2 = tf.constant([[1],                       [2]])# Define a rank 3 tensormyTensor = tf.constant([ [[1,2],                          [3,4],                          [5,6]],                         [[7,8],                          [9,10],                          [11,12]] ])# Try printing the tensors print(matrix1)print(matrix2)print(myTensor)

 代碼列表4。 創建張量

 

代碼4的運行結果:

 

Tensor( 「Const:0」,        shape=TensorShape([Dimension(1),                           Dimension(2)]),        dtype=float32 )Tensor( 「Const_1:0」,        shape=TensorShape([Dimension(2),                           Dimension(1)]),        dtype=int32 )Tensor( 「Const_2:0」,         shape=TensorShape([Dimension(2),                            Dimension(3),                            Dimension(2)]),         dtype=int32 )


從運行結果中可以看出,每個張量都由已命名的Tensor對象表示。每個Tensor對象都有一個唯一的標籤(名稱),一個用於定義其結構的維度(shape),以及用於指定我們要操作的數據類型(dtype)。因為我們並沒有顯示指定名稱,所以他們被自動命名為:「Const:0」,「Const_1:0」和「Const_2:0」。

 

 

張量類型

 

需要注意的是matrix1的每個元素以小數點結束,這是為了告訴Python該元素的數據類型不是整數,而是浮點數。 我們可以傳遞顯式dtype值。 和NumPy數組一樣,張量可以接受我們指定的類型。

 

TensorFlow也提供了一些構造函數用於一些簡單的張量。例如,tf.zeros(shape)創建了一個包涵所有值都被初始化為零的特定形態的張量。 類似地,tf.ones(shape)創建了一個所有元素值為1的張量。 shape參數是描述張量的維度的一維張量,它的類型是int32。

 

創建運算符 

我們已經有了幾個初始的張量,現在我們可以用運算符對他們進行操作,比如加減乘除。 假設現在有一個矩陣,它的行表示貨幣交易,收款金額(正值)和收款金額(負值)。 矩陣取反是表示某個人的貨幣流歷史記錄的一種方式。 我們現在對代碼列表4中的matrix1進行取反操作neg(negation的縮寫)。矩陣取反將正數轉換為絕對值相同的負數,反之亦然。

取反操作是最簡單的操作之一。 如代碼列表5所示,取反只需將一個張量作為輸入,得出另一個張量,每個元素取反。現在,嘗試自己運行代碼。 如果你已經掌握了如何使用取反,那就可以推廣到所有其他TensorFlow的操作。

 

這裡需要指出,定義操作(如取反操作)和運行它是不一樣的。

 

import tensorflow as tf# Define an arbitrary tensorx = tf.constant([[1, 2]])# Negate the tensorneg_x = tf.neg(x)# Print the objectprint(neg_x)

代碼列表5. 取反運算符的使用

 

代碼列表5的輸出:

Tensor(「Neg:0」, shape=(1, 2), dtype=int32)

 

更多TensorFlow的運算符

 

官方文檔詳細地列出了所有可用的數學操作:

https://www.tensorflow.org/api_docs/Python/math_ops.html。

 

常用操作符的示例包括:

 

tf.add(x, y) Add two tensors of the same type, x + ytf.sub(x, y) Subtract tensors of the same type, x — ytf.mul(x, y) Multiply two tensors element-wisetf.pow(x, y) Take the element-wise power of x to ytf.exp(x) Equivalent to pow(e, x), where e is Euler’s number (2.718…)tf.sqrt(x) Equivalent to pow(x, 0.5)tf.div(x, y) Take the element-wise division of x and ytf.truediv(x, y) Same as tf.div, except casts the arguments as a floattf.floordiv(x, y) Same as truediv, except rounds down the final answer into an integertf.mod(x, y) Takes the element-wise remainder from division

我們可以這些TensorFlow運算符來產生高斯分布(也稱為正態分布)。 參見圖3提示。 你可以參考wiki,找到正態分布的概率密度:https://en.wikipedia.org/wiki/Normal_distribution。

 

為了簡潔起見,諸如「*」,「 - 」,「+」等大多數數學表達式是其TensorFlow運算符的快捷方式。高斯函數包括許多運算,如下所示:

 

from math import pimean = 1.0sigma = 0.0(tf.exp(tf.neg(tf.pow(x — mean, 2.0) /               (2.0 * tf.pow(sigma, 2.0) ))) *(1.0 / (sigma * tf.sqrt(2.0 * pi) )))

 

圖3.該圖表示產生高斯分布所需的操作。 節點之間的連結表示數據如何從一個操作進入下一個操作。 操作本身很簡單,但是它們如何相互作用是相對複雜的。

 

TensorFlow算法很容易可視化。 它們可以用流程圖來進行描述。 流程圖就是一種圖表。 流程圖中的每個箭頭都稱為圖形的邊。 而它的每個狀態被稱為節點。

 

在會話中執行運算符

會話(session)是描述代碼應該如何運行的軟體系統環境。在TensorFlow中,會話設置了硬體設備(如CPU和GPU)如何相互通信。這樣,你只要關心如何設計機器學習算法,而不必擔心底層硬體設備的運行。當然,你也可以配置會話以更改其底層硬體設備交互行為,而不更改上層代碼。

 

要在TensorFlow中運行程序計算數值是需要一個會話的。 只有在已創建的會話才可以對Tensor對象進行賦值。 為此,我們必須使用tf.Session()創建一個會話類,並由它來運行一個運算符(代碼列表6)。

 

import tensorflow as tf# Define an arbitrary matrixmatrix = tf.constant([[1., 2.]])# Run the negation operator on itneg_matrix = tf.neg(matrix)# Start a session to be able to run operationswith tf.Session() as sess:    # Tell the session to evaluate negMatrix    result = sess.run(neg_matrix)# Print the resulting matrixprint(result)

 

代碼列表6.使用會話

 

恭喜! 你剛剛寫了第一個完整的TensorFlow代碼。 儘管它所做的是只是對一個矩陣進行取反,但它已經能充分體現TensorFlow中的核心概念與框架了。

 

 

會話配置

在創建tf.Session類時,我們可以向構造函數傳遞一些參數。 例如,TensorFlow會根據可用的內容自動確定為指定GPU或CPU設備的最佳方式。 在創建會話時,我們可以設置log_device_placements = True,如代碼列表7所示。

 

import tensorflow as tf# Define a matrix and negate itmatrix = tf.constant([[1., 2.]])negMatrix = tf.neg(matrix)# Start the session with a special config passed into the constructor to enable loggingwith tf.Session(config=tf.ConfigProto(log_device_placement=True)) as sess:    # Evaluate negMatrix    result = sess.run(negMatrix)# Print the resulting valueprint(result)

代碼列表7 登錄一個會話

 

這將輸出有關每個操作的會話中使用哪些CPU / GPU設備的信息。 例如,執行代碼列表6中的程序會有以下輸出,它顯示了用於運行取反操作的設備:

 

Neg: /job:localhost/replica:0/task:0/cpu:0


 

會話在TensorFlow中是必不可少的。 我們需要調用一個會話來執行數學操作。 圖4描述了TensorFlow上的不同組件如何與機器學習管道的交互。 會話不僅執行圖像操作,而且還可以使用佔位符,變量和常量作為輸入。 到目前為止,我們已經使用了常量,但在後面的部分,我們將開始使用變量和佔位符。 以下是這三種類型值的簡要概述。

 

•佔位符:未分配的值,但將由運行的會話初始化。

•變量:可以更改的值,例如機器學習模型的參數。

 

•常數:不更改的值,例如超參數或設置。

 

 

圖4.會話指示如何使用硬體來最有效地處理圖形。 當會話開始時,它將CPU和GPU設備分配給每個節點。 在處理之後,會話用可用格式(例如NumPy數組)輸出數據。 會話可以接受佔位符,變量和常量。

我希望你通過本文已經熟悉了一些TensorFlow編程的基本方法。 

搜索公眾號添加: weic2c   

人工智慧大數據與深度學習


長按圖片,識別二維碼,點關注

相關焦點

  • 基於TensorFlow的深度學習實戰
    毫不誇張得說,TensorFlow的流行讓深度學習門檻變得越來越低,只要你有Python和機器學習基礎,入門和使用神經網絡模型變得非常簡單。TensorFlow簡介如前所述,TensorFlow是一個深度學習庫,使用這一框架,可以用來構建和測試深度神經網絡。深度學習讓我們能夠以極高的準確性構建複雜的應用程式。
  • 深度學習入門:Tensorflow實戰Digit Recognizer(一)
    我們在學習一門新的程式語言的時候,第一個項目都是「Hello word」。MNIST在圖像識別領域的地位正如「Hello world」在程式設計師心中的地位,本文將手把手教會大家利用Tensorflow實現一個簡單的Softmax回歸模型,快速完成Kaggle的入門賽Digit Recognizer。
  • 深度學習筆記7:Tensorflow入門
    個人公眾號:數據科學家養成記 (微信ID:louwill12)前文傳送門:深度學習筆記1:利用numpy從零搭建一個神經網絡深度學習筆記2:手寫一個單隱層的神經網絡深度學習筆記3:手動搭建深度神經網絡(DNN)深度學習筆記4:深度神經網絡的正則化深度學習筆記5:正則化與dropout
  • 從Fashion-Mnist開始,入門Tensorflow與深度學習
    從今天開始,我們進行機器學習領域的最後一塊拼圖——深度學習的學習之旅,以及Tensorflow這個工具的使用。而基於多層級神經網絡的深度學習算法也正是如此。所以,從這個方面來說,深度學習的發展和興起很大程度上是源於人類對自身發展出的智能進行逆向開發的過程。既然人類擁有的我們所謂的智能,很自然的我們就會探索我們這種智能是如何產生的。如果這個過程可以量化並實體化成一套程序放入機器中運行,那麼很自然的,這樣的機器也會理論上和我們人類擁有同樣的智能。
  • 最熱門的深度學習框架TensorFlow入門必備書籍
    但進入機器學習和人工智慧領域並不是一件簡單的事情,目前市場上有許多大量的學習資源,許多開發者和想要進入的愛好者往往很難找到適合自己的發展路徑。其實,早在 2015 年底,谷歌就開源了內部使用的深度學習框架 TensorFlow 。眾多研究表明,Tensorflow 是研究深度學習的首選平臺。
  • 可能是史上最全的Tensorflow學習資源匯總
    本篇文章將為大家總結Tensorflow純乾貨學習資源,非常適合新手學習,建議大家收藏。想要學習更多的Tensorflow知識,歡迎點擊上方藍字,關注我們的微信公眾號。 ,一步步帶你從入門到精通,是初學者學習Tensorflow的最佳教程。
  • Tensorflow實戰系列:手把手教你使用LSTM進行文本分類(附完整代碼)
    【導讀】專知小組計劃近期推出Tensorflow實戰系列,計劃教大家手把手實戰各項子任務。
  • 推薦| ThoughtWorks 大牛教你入門 Tensorflow
    谷歌深度學習系統 TensorFlow 在工程師圈中引起了很大反響,其開源大大降低了深度學習在各行業中的應用難度,深度神經網絡在很多傳統機器學習數據集上體現出優勢。但如何將深度學習技術,實現圖片識別、文本分析等模型,運用到實際的系統中,還有很多要做的事情。
  • TensorFlow極速入門
    作者孟曉龍,2016年加入Qunar,目前在去哪兒網機票事業部擔任算法工程師。熱衷於深度學習技術的探索,對新事物有著強烈的好奇心。一、前言目前,深度學習已經廣泛應用於各個領域,比如圖像識別,圖形定位與檢測,語音識別,機器翻譯等等,對於這個神奇的領域,很多童鞋想要一探究竟,這裡拋磚引玉的簡單介紹下最火的深度學習開源框架 tensorflow。
  • tensorflow極速入門
    一、前言目前,深度學習已經廣泛應用於各個領域,比如圖像識別,圖形定位與檢測,語音識別,機器翻譯等等,對於這個神奇的領域,很多童鞋想要一探究竟,這裡拋磚引玉的簡單介紹下最火的深度學習開源框架 tensorflow。本教程不是 cookbook,所以不會將所有的東西都事無巨細的講到,所有的示例都將使用 python。那麼本篇教程會講到什麼?
  • 寫給純小白的深度學習環境搭建寶典:pytorch+tensorflow
    每天給小編五分鐘,小編用自己的代碼,讓你輕鬆學習人工智慧。本文將手把手帶你快速搭建你自己的深度學習環境,然後實現自己的第一個深度學習程序。野蠻智能,小白也能看懂的人工智慧。精講深度學習RNN三大核心點,三分鐘掌握循環神經網絡進行簡單了解。下面進入實戰環節。
  • Tensorflow 全網最全學習資料匯總之Tensorflow 的入門與安裝【2】
    《TensorFlow學習筆記1:入門》連結:http://www.jeyzhang.com/tensorflow-learning-notes.html本文與上一篇的行文思路基本一致,首先概括了TensorFlow的特性,然後介紹了graph、session、variable 等基本概念的含義,以具體代碼的形式針對每個概念給出了進一步的解釋
  • 帶你入門機器學習與TensorFlow2.x
    1.3 什麼是深度學習深度學習並不是一種獨立的學習方法,其本身也會用到有監督和無監督的學習方法來訓練深度神經網絡。但由於近幾年該領域發展迅猛,一些特有的學習手段相繼被提出(如殘差網絡),因此越來越多的人將其單獨看作一種學習的方法。最初的深度學習是利用深度神經網絡來解決特徵表達的一種學習過程。
  • TFLearn:為TensorFlow提供更高級別的API 的深度學習庫
    TFlearn是一個基於Tensorflow構建的模塊化透明深度學習庫。它旨在為TensorFlow提供更高級別的API,以促進和加速實驗,同時保持完全透明並與之兼容。TFLearn功能包括:通過教程和示例,易於使用和理解用於實現深度神經網絡的高級API。
  • Tensorflow官方視頻課程-深度學習工具 TensorFlow入門
    課程首頁    https://cn.udacity.com/course/intro-to-tensorflow-for-deep-learning--ud187 你將學到什麼    課程 1 什麼是人工智慧和機器學習?
  • 谷歌雲官方:一小時掌握深度學習和 TensorFlow(視頻+50PPT)
    材料有兩部分,是面向工程師的實用型講解,分別為只有 3 小時的忙人和只有 1 小時的超級忙人準備。新智元節選後者,讓你在 2017 春節來臨前,拿出 1 小時學會 TensorFlow 和深度學習。另外,視頻也方便已經是熟手的你複習,說不定還能從中得到新的啟示。
  • 深度學習筆記8:利用Tensorflow搭建神經網絡
    作者:魯偉 一個數據科學踐行者的學習日記。
  • 手把手教你用 TensorFlow 實現文本分類(上)
    由於需要學習語音識別,期間接觸了深度學習的算法。利用空閒時間,想用神經網絡做一個文本分類的應用, 目的是從頭到尾完成一次機器學習的應用,學習模型的優化方法,同時學會使用主流的深度學習框架(這裡選擇tensorflow)。
  • TensorFlow 中文資源全集,學習路徑推薦
    入門教程,簡單的模型學習和運行。實戰項目,根據自己的需求進行開發。/GitHub:https://github.com/tensorflow安裝教程中文安裝教程Mac安裝:http://www.cnblogs.com/tensorflownews/p/7298646.htmlubuntu 16.04 安裝 tensorflow-gpu:http://www.tensorflownews.com/2017/09/02/tensorflow-gpu-install-ubuntu
  • python應用之基於tensorflow的數據擬合:深度學習之預測入門篇
    實驗目的:1、了解python在深度學習領域的應用2、學習安裝python第三方依賴庫實驗環境:已正確安裝python3.5以及依賴庫tensorflow、matplotlib預測過程展示:1、應用領域