tf基礎操作

2021-07-30 20:06:14 字數 2926 閱讀 9974

在tf中,圖表示計算任務。圖中節點被稱為operation(簡稱op)。op接受tensor,執行計算,產生tensor。tensor是多維陣列。

為了進行計算,圖必須在會話裡被啟動。會話將圖的op分發到cpu之類的裝置上,同時提供執行op的方法,執行後,返回tensor結果。

tf程式通常被組織成乙個構建階段和乙個執行階段。

在構建階段,op的執行步驟被描述成乙個圖。在執行階段,使用會話執行圖中的op。

構建圖的第一步是建立源op(source op)。源op不需要任何輸入,例如常量(constant)。源op的輸出傳遞給其他op做運算。op構造器返回值代表構造出的op的輸出,返回值可以傳遞給其他op、構造器作為輸入。

構造階段完成後,才能啟**。啟**的第一步是建立會話物件,如果session無任何引數,會話構造器啟動預設圖。

# -*- coding:gb2312 -*-

import tensorflow as tf

#第一步

#構建圖

#建立乙個常量op,產生1個1行2列的矩陣,這個op稱為1個節點

#加到預設圖中

#構造器的返回值就是該op的返回值

matrix1 = tf.constant([[3, 3]])

#建立另乙個常量op,產生2x1矩陣

matrix2 = tf.constant([[2],[2]])

#建立乙個矩陣乘法matmul op。並將matrix1,matrix2作為輸入

#返回值就是乘法op的返回值

product = tf.matmul(matrix1, matrix2)

#第二步

#執行圖

#啟動預設圖

sess = tf.session()

#呼叫sess的run方法來執行矩陣乘法op,傳入product作為方法的引數

#product代表乘法op的輸出,傳入它是向run方法表明,我們希望取回矩陣乘法op的輸出

#執行過程是自動的,會話負責傳遞op所需全部輸入,op通常是併發執行的

#當函式呼叫run方法的時候,觸發了圖中三個op(2常量op,1乘法op)的執行

result = sess.run(product)

print result

#任務完成,關閉會話

sess.close()

tf中使用tensor資料結構代表所有的資料。計算圖中,操作間傳遞的資料都是tensor。可以把tensor看做是乙個n維的陣列

variable維護圖執行過程中的狀態資訊。

# -*- coding:gb2312 -*-

import tensorflow as tf

#使用變數實現乙個簡單的計數器

#建立乙個變數,初始化為標量0

state = tf.variable(0, name="counter")

#建立1個op,其作用是state加1

one = tf.constant(1)

new_value = tf.add(state, one)

update = tf.assign(state, new_value)

#啟**後,變數必須經過初始化op

#首先增加乙個初始化op到圖中

init_op = tf.initialize_all_variables()

#啟**

with tf.session() as sess:

#初始化變數op

sess.run(init_op)

#列印state初始值

print sess.run(state)

#重複執行計數器3次,執行update op

for _ in range(3):

r = sess.run(update)

print r

為取回操作的輸出內容,可以在使用run執行圖時,傳入一些tensor,在執行op後,tensor會取回返回值結果。在前面例子中,只取回了單個節點state,但是也可以取回多個tensor。

# -*- coding:gb2312 -*-

import tensorflow as tf

x1 = tf.constant(3.0)

x2 = tf.constant(2.0)

x3 = tf.constant(5.0)

intermed = tf.add(x2, x3)

mul = tf.multiply(x1, intermed)

#在run中使用獲取多個tensor

with tf.session() as sess:

result = sess.run([mul,intermed])

print result

需要獲取的多個tensor值在一次op中同時獲得,而不是逐個獲取tensor

上述示例中在計算圖中引入了tensor,以常量或變數形式儲存。tf中還提供了feed機制,其可以臨時替代圖中的任意操作中的tensor,可以對圖中任何操作提交補丁,直接誒插入tensor。

feed使用乙個tensor的值臨時替換乙個操作的輸出結果。可以提供feed資料作為run呼叫的引數。

feed只在呼叫它的方法內有效,方法結束,feed就會消失。

# -*- coding:gb2312 -*-

import tensorflow as tf

#使用placeholder為feed操作建立佔位符

x1 = tf.placeholder("float")

x2 = tf.placeholder("float")

y = tf.multiply(x1, x2)

with tf.session() as sess:

result = sess.run(y,feed_dict=)

print result

tf卷積基礎

slim模組的conv2d函式,是二維卷積介面,順著源 可以看到最終調的tensorflow介面是convolution,這個地方就進入c 層面了,暫時不涉及。先來看看這個convolution函式,官方定義是這樣的 tf.nn.convolution input,filter,padding,st...

tf基礎知識

1 基本概念 圖 graph 圖描述了計算的過程,tensorflow使用圖來表示計算任務。張量 tensor tensorflow使用tensor表示資料。每個tensor是乙個型別化的多維陣列。操作 op 圖中的節點被稱為op opearation的縮寫 乙個op獲得0個或多個tensor,執行...

tf 矩陣行和列交換 tf矩陣基礎

一 placeholder tensorflow的設計理念稱之為計算流圖,在編寫程式時,首先構築整個系統的graph,並不會直接生效,這一點和python的其他數值計算庫 如numpy等 不同,graph為靜態的,類似於docker中的映象。然後,在實際的執行時,啟動乙個session,程式才會真正...