致遠行的人,自編TensorFlow教程(1)

這是本人自編的 TensorFlow 教程,本人對 TensorFlow 理解有限,請各位看官輕噴。本教程適用於 Python 基礎不夠好的同學,但仍然要求懂一些Python的基本語法。因爲追求更加通俗易懂,本教程追求代碼完整,描述冗長,請各位耐心看。謝謝!

首先是關於 TensorFlow 的安裝,請參考
http://www.tensorfly.cn/tfdoc/get_started/os_setup.html
TensorFlow中文社區的安裝指南,不過這個網站確實有長期不更新的感覺(沒有實際證據)。同時Windows下也已經可以安裝TensorFlow了,在下沒有嘗試過,也許需要熟悉Python的同學協助你;Linux或者MacBook使用pip即可安裝。同時本教程基本使用CPU跑TensorFlow,請想使用GPU的同學自行學習。

本教程所有的代碼都基於 Python3.6。

關於 TensorFlow 的最大的坑:API 頻繁更改,請參考 http://devdocs.io/ 這個網站,上面有最新的 API 文檔。當然,如果你可以翻牆上 TensorFlow 官網,或者上官網毫無壓力,請上官網查閱相關文檔。

以上是寫在前面。如果有些地方看不懂,沒有關係,只要裝好TensorFlow就好,因爲“Talk is cheap. Show me the code.”

在學習一門新的語言時,大家總是想先學如何寫出“Hello, world!”程序。我們也從類似的打印輸出開始吧,不過不是“Hello, world!”。

很多教程喜歡把步子邁得太大,在下智商有限,喜歡小步伐前進,同時更加平穩,注重細節。同時每段代碼都是全的,就是說copy即可運行。

import tensorflow as tf

num = tf.constant([1, 2])
init = tf.global_variables_initializer()

with tf.Session() as sess:
    print(sess.run(num))

這段代碼的輸出很簡單,就是打印[1 2],可自行跑一下,和打印“Hello, world”一個意思。稍微熟悉點編程的人都會說:“你TM在逗我!”。確實,打印一個變量,在Python裏完全可以這樣寫(不要在意有沒有逗號的區別,謝謝):

num = [1, 2]
print(num)

但放這麼簡單的代碼出來,還是需要說一些 TensorFlow 的基本規則的,麻雀雖小五臟俱全嘛,接下來我會詳細解釋代碼。

首先,一個用 TensorFlow 框架寫的代碼有兩部分組成:定義一張計算圖;在一個會話中啓動圖。也許你會不知道我在說什麼,總之先記住有兩部分組成。

num = tf.constant([1, 2])

這行代碼是在TensorFlow的圖裏定義一個常量(注意,它不是變量)。tf.constant 這個API是用來定義常量的。然後在這段代碼裏,計算圖就定義完了(說好的計算呢,這個慢慢會解釋)。
注:出現tf當然是因爲import tensorflow as tf這行代碼,基礎差的可以先不用管,記得照着寫上這一行就行了。

init = tf.global_variables_initializer()

這行代碼是初始化計算圖,就是爲一些變量開闢空間,同時將計算模型固定。嚴格來說我不能準確描述清楚這行代碼的目的及意義,不過可以先照着寫就可以了,沒有這行代碼一定會報錯。

with tf.Session() as sess:
    print(sess.run(num))

然後就是用會話啓動圖了,首先要定義會話,爲什麼要定義會話呢?目前我理解有限,只能說TensorFlow的規定是這樣。至於爲什麼要寫成

with tf.Session() as sess: 

這樣去定義會話,主要是因爲省事,另一種定義會話的方式是

sess = tf.Session()
# 加上其他代碼
sess.close()

你需要多寫一行代碼,爲了避免忘記,建議用with。對了,爲什麼要close,目前我也只能說這也是規定,照着寫就行了。

然後我們用sess.run()去計算圖。比如sess.run(num)就是要求得到計算圖裏面num的計算結果。關於sess.run(),下一節會有更詳細的介紹。

今天就介紹到這兒,萬事開頭難,會了基本規則,一般情況下可以先隨意魔改一下代碼,祝大家魔改順利。

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