深度學習|費解的tensorflow

學過Python的小夥伴都會覺得,python的語法簡單,邏輯清晰。雖然tensorflow是python的一個庫(並不是標準庫),但是使用並不簡單,你可能會被tensorflow的奇怪語法設計困惑,所以本文章叫做費解的tensorflow,希望通過本文,讀者可以更好的瞭解tensorflow。

編程必備hello world

學習任何編程語言,可能上來都是打印輸出下hello world,用python很簡單,我們一行代碼就可以了。

print('hello world')

就算是先定義爲變量,我們也只是需要2行代碼。

a = 'hello world'
print(a)

那我們用tensorflow來寫,需要3行,代碼不是很多,但是看上去就是很費解。

a = tf.constant('hello world')
sess = tf.Session()
print(sess.run(a))

那我們就以這個簡單代碼,來看看tensorflow的語法。

計算圖

如果把上面代碼抽象出來,其實就是建立計算圖運行計算圖的完整過程。當然讀者就會問,什麼是計算圖?其本質就是全局數據結構:是一個有向圖,用於捕獲有關如何計算的指令。概念還是比較生硬,圖那我就以流程圖爲例,流程中的方框(節點)就是我們tensorflow的定義的數據,箭頭就是計算指令。

例如,下面代碼,我們就定義了一個常量,在計算圖中就是給了他一個位置,他就是一個節點。打印輸出其說明:

  • tensorflow張量
  • 零維
  • 數據類型
a = tf.constant(2)
print(a)
# Tensor("Const:0", shape=(), dtype=int32)

通過下面代碼就可以算是完整的計算圖(有節點和計算)。

two_node = tf.constant(2)
three_node = tf.constant(3)
sum_node = two_node + three_node
會話

前面說到了是建立計算圖,接着我們就要執行計算圖,這樣代碼才能運行。這裏就要提到一個新概念,會話。會話的作用是處理內存分配和優化,使我們能夠實際執行由計算圖指定的計算。簡單說,建立計算圖,通過會話,然後運行計算圖。

這就是爲什麼tensorflow代碼都有這個代碼的原因了。

sess = tf.Session()
sess.run()
回到hello world

我們重新在來看下hello world的代碼。

a = tf.constant('hello world')
sess = tf.Session()
print(sess.run(a))
# hello world
  • 第一行,我們建立計算圖,這裏我們是通過tf.constant來定義的,其爲常量。
  • 建立會話
  • 運行計算圖

佔位符(placeholder)

前面的程序,我們沒有輸入,這樣就是隻會輸出同樣的東西。在python中,我們可以通過iput輸入數據。

在tf中,我們需要先定義佔位符,然後用feed_dict方法傳入數據,代碼如下:

a = tf.placeholder(tf.int32)
b = tf.placeholder(tf.int32)
c = a + b
with tf.Session() as sess:
    print(sess.run([a,b,c],feed_dict={a:5,b:8}))

# [array(5), array(8), 13]

變量

前面,我們用tf.constant定義了常量,用佔位符(placeholder)用於輸入,最後我們看看變量的定義。

說變量之前,我們再來看看tensorflow這個單詞,其實他是分爲tensor(張量)和flow(流)。變量在tensorflow就是張量的意思。
這裏我們定義一個一維張量:

a = tf.Variable([0.2,0.4,0.5])

接着如果我們建立會話,運行程序會報錯。我們需要初始化變量,這裏我們不講解底層的原因,我們只需要記住,用到變量加上下面的代碼初始化即可。

sess = tf.Session()
init = tf.global_variables_initializer()
sess.run(init)
print(sess.run(a))

# [0.2 0.4 0.5]

tensorboard

最後,我們可視化下我們的計算圖。

a = tf.placeholder(tf.int32)
b = tf.placeholder(tf.int32)
c = a * b
with tf.Session() as sess:
    print(sess.run([a,b,c],feed_dict={a:5,b:8}))
    writer = tf.summary.FileWriter('log/test1',sess.graph)
writer.close()

接着我們打開代碼所在環境,輸入一下代碼。

tensorboard --logdir=G:\我的Python項目\深度學習\deeplearn\log\test1

在瀏覽器中輸入http://localhost:6006

總結

本文通過最簡單的hello world代碼,詳細講解了tf的語法。我們需要記住,整個過程就是建立和運行計算圖的流程。

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