TensorFlow程式設計策略

2021-09-25 17:55:00 字數 3266 閱讀 7828

tensorflow程式中的計算過程可以表示為乙個計算圖(computation graph, 也可稱為有向圖(directed graph)),其作用與外觀都可模擬為程式流程圖。

張量是在邊中流動的資料,其資料型別可以在程式設計時事先定義,也可根據計算圖中的上下文來推斷。

計算圖的作用可以模擬為程式的流程圖,可以使用tensorboard工具視覺化tensorflow程式的計算圖。用以下例子簡單的向量相加介紹計算圖:

import tensorflow as tf

a = tf.constant([1.0,2.0], name="a")

b = tf.constant([3.0,4.0], name="b")

result = a+b

print (a.graph is tf.get_default_graph())

print (b.graph is tf.get_default_graph())

編寫tensorflow程式時,系統會自動維護乙個預設的計算圖,上面**是判斷 a 和 b 是否屬於預設的計算圖,結果會輸出 true, 因為我們沒有指定 a 和 b 屬於哪乙個計算圖。

使用預設計算圖可以滿足要求,當我們需要使用更到計算圖時,可通過 graph函式來生成新的計算圖。對於生成的計算圖,可通過 as_default()函式將其指定為預設。以下**使用 graph()函式來生成兩個計算圖及使用 as_default()函式將生成的計算圖指定為預設:

import tensorflow as tf

#使用graph()函式建立乙個計算圖

g1 = tf.graph()

with g1.as_default(): #使用as_default()函式將定義的計算圖使用為預設

a = tf.get_variable("a", [2], initializer=tf.ones_initializer())

b = tf.get_variable("b", [2], initializer=tf.zeros_initializer())

#使用graph()函式建立另乙個計算圖

g2 = tf.graph()

with g2.as_default():

a = tf.get_variable("a", [2], initializer=tf.zeros_initializer())

b = tf.get_variable("b", [2], initializer=tf.ones_initializer())\

with tf.session(graph=g1) as sess:

tf.global_variables_initializer().run()

#初始化計算圖中的所有變數

with tf.variable_scope("", reuse=true):

print(sess.run(tf.get_variable("a")))

print(sess.run(tf.get_variable("b")))

with tf.session(graph=g2) as sess:

tf.global_variables_initializer().run()

# 初始化計算圖中的所有變數

with tf.variable_scope("", reuse=true):

print(sess.run(tf.get_variable("a")))

print(sess.run(tf.get_variable("b")))

tensorflow中的張量儲存的時運算結果的屬性,而不是真正的數字。用乙個向量相加的例子進行說明:

列印 result 張量,顯示的結果不是數字,而是加法運算結果的屬性:操作(op)、維度(shape)和資料型別(dtype)。

session就是使用者使用tensorflow時的互動介面,被實現為session類。使用run()方法來執行計算圖,使用者給run()函式傳入需要計算的節點,同時提供輸入的資料,則能計算該節點資料。

使用會話方式有兩種,一是明確呼叫會話生成函式和會話關閉函式,通過session類session()建構函式建立會話例項,然後通過close()函式關閉會話,通過這種方式必須明確使用close結束會話。

可使用 with/as使用會話。

placeholder機制用於在會話執行時動態提供輸入資料,以下**展示變數相加如何在執行時提供值:

import tensorflow as tf

#用placehoder定義乙個位置

#原型plaeshoder(dtype,shape,name)

a = tf.placeholder(tf.float32, shape=(2), name="input")

b = tf.placeholder(tf.float32, shape=(4,2), name="input")

result = a+b

with tf.session() as sess:

#run()函式原型run(self,fetches, feed_dict, options, run_metadata)

#fetches引數接受result,feed_dict引數指定了需要提供的值

res1 = sess.run(result, feed_dict=)

print(result)

print(res1)

在tensorflow中宣告乙個變數需要使用變數宣告函式——variable()。因為變數在宣告時就需要進行初始化,所以函式內部需要給出變數初始化的方法。如下所示:

a = tf.variable(tf.random_normal([3,4],stddev=1))
get_variable()函式用於請求獲取變數,其使用方法和variable()函式基本相同。

varibale_scope()函式結合上下文管理器(with)生成乙個變數空間。

name_scope()函式類似於variable_scope()函式的變數空間管理功能。

TensorFlow 程式設計概念

學習目標 構建乙個簡單的 tensorflow 程式,使用該程式繪製乙個預設圖並建立乙個執行該圖的會話 注意 請仔細閱讀本教程。tensorflow 程式設計模型很可能與您遇到的其他模型不同,因此可能不如您期望的那樣直觀。tensorflow 的名稱源自張量,張量是任意維度的陣列。tensorflo...

TensorFlow程式設計結構

tensorflow程式設計結構 tensorflow 與其他程式語言非常不同。首先通過將程式分為兩個獨立的部分,構建任何擬建立神經網路的藍圖,包括計算圖的定義及其執行。起初這對於傳統程式設計師來說看起來很麻煩,但是正是圖定義和執行的分開設計讓 tensorflow 能夠多平台工作以及並行執行,te...

TensorFlow與PyTorch程式設計方式不同

參考 pytorch 命令式程式設計 tensorflow 符號式程式設計 與命令式程式設計不同,符號式程式設計通常在計算流程完全定義好後才被執行。多個深度學習框架,如theano和tensorflow,都使用了符號式程式設計。通常,符號式程式設計的程式需要下面3個步驟 定義計算流程 把計算流程編譯...