日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

tensorflow怎样调用gpu_tensorflow基本用法(图,会话,tensor,变量等)

發(fā)布時(shí)間:2025/3/19 编程问答 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 tensorflow怎样调用gpu_tensorflow基本用法(图,会话,tensor,变量等) 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

使用 TensorFlow, 你必須明白 TensorFlow:

  • 使用圖 (graph) 來(lái)表示計(jì)算任務(wù).
  • 在被稱(chēng)之為 會(huì)話 (Session) 的上下文 (context) 中執(zhí)行圖.
  • 使用 tensor 表示數(shù)據(jù).
  • 通過(guò) 變量 (Variable) 維護(hù)狀態(tài).
  • 使用 feed 和 fetch 可以為任意的操作(arbitrary operation) 賦值或者從其中獲取數(shù)據(jù).

綜述

TensorFlow 是一個(gè)編程系統(tǒng), 使用圖來(lái)表示計(jì)算任務(wù). 圖中的節(jié)點(diǎn)被稱(chēng)之為 op (operation 的縮寫(xiě)). 一個(gè) op 獲得 0 個(gè)或多個(gè) Tensor, 執(zhí)行計(jì)算, 產(chǎn)生 0 個(gè)或多個(gè) Tensor. 每個(gè) Tensor 是一個(gè)類(lèi)型化的多維數(shù)組. 例如, 你可以將一小組圖像集表示為一個(gè)四維浮點(diǎn)數(shù)數(shù)組, 這四個(gè)維度分別是 [batch, height, width, channels].

一個(gè) TensorFlow 圖描述了計(jì)算的過(guò)程. 為了進(jìn)行計(jì)算, 圖必須在 會(huì)話 里被啟動(dòng). 會(huì)話 將圖的 op 分發(fā)到諸如 CPU 或 GPU 之類(lèi)的 設(shè)備 上, 同時(shí)提供執(zhí)行 op 的方法. 這些方法執(zhí)行后, 將產(chǎn)生的 tensor 返回. 在 Python 語(yǔ)言中, 返回的 tensor 是 numpy ndarray 對(duì)象; 在 C 和 C++ 語(yǔ)言中, 返回的 tensor 是tensorflow::Tensor 實(shí)例.

計(jì)算圖

TensorFlow 程序通常被組織成一個(gè)構(gòu)建階段和一個(gè)執(zhí)行階段. 在構(gòu)建階段, op 的執(zhí)行步驟 被描述成一個(gè)圖. 在執(zhí)行階段, 使用會(huì)話執(zhí)行執(zhí)行圖中的 op.

例如, 通常在構(gòu)建階段創(chuàng)建一個(gè)圖來(lái)表示和訓(xùn)練神經(jīng)網(wǎng)絡(luò), 然后在執(zhí)行階段反復(fù)執(zhí)行圖中的訓(xùn)練 op.

TensorFlow 支持 C, C++, Python 編程語(yǔ)言. 目前, TensorFlow 的 Python 庫(kù)更加易用, 它提供了大量的輔助函數(shù)來(lái)簡(jiǎn)化構(gòu)建圖的工作, 這些函數(shù)尚未被 C 和 C++ 庫(kù)支持.

三種語(yǔ)言的會(huì)話庫(kù) (session libraries) 是一致的.

構(gòu)建圖

構(gòu)建圖的第一步, 是創(chuàng)建源 op (source op). 源 op 不需要任何輸入, 例如 常量 (Constant). 源 op 的輸出被傳遞給其它 op 做運(yùn)算.

Python 庫(kù)中, op 構(gòu)造器的返回值代表被構(gòu)造出的 op 的輸出, 這些返回值可以傳遞給其它 op 構(gòu)造器作為輸入.

TensorFlow Python 庫(kù)有一個(gè)默認(rèn)圖 (default graph), op 構(gòu)造器可以為其增加節(jié)點(diǎn). 這個(gè)默認(rèn)圖對(duì) 許多程序來(lái)說(shuō)已經(jīng)足夠用了. 閱讀 Graph 類(lèi) 文檔 來(lái)了解如何管理多個(gè)圖.

import tensorflow as tf

# 創(chuàng)建一個(gè)常量 op, 產(chǎn)生一個(gè) 1x2 矩陣. 這個(gè) op 被作為一個(gè)節(jié)點(diǎn)

# 加到默認(rèn)圖中.

#

# 構(gòu)造器的返回值代表該常量 op 的返回值.

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

# 創(chuàng)建另外一個(gè)常量 op, 產(chǎn)生一個(gè) 2x1 矩陣.

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

# 創(chuàng)建一個(gè)矩陣乘法 matmul op , 把 'matrix1' 和 'matrix2' 作為輸入.

# 返回值 'product' 代表矩陣乘法的結(jié)果.

product = tf.matmul(matrix1, matrix2)

默認(rèn)圖現(xiàn)在有三個(gè)節(jié)點(diǎn), 兩個(gè) constant() op, 和一個(gè)matmul() op. 為了真正進(jìn)行矩陣相乘運(yùn)算, 并得到矩陣乘法的 結(jié)果, 你必須在會(huì)話里啟動(dòng)這個(gè)圖.

在一個(gè)會(huì)話中啟動(dòng)圖

構(gòu)造階段完成后, 才能啟動(dòng)圖. 啟動(dòng)圖的第一步是創(chuàng)建一個(gè) Session 對(duì)象, 如果無(wú)任何創(chuàng)建參數(shù), 會(huì)話構(gòu)造器將啟動(dòng)默認(rèn)圖.

欲了解完整的會(huì)話 API, 請(qǐng)閱讀Session 類(lèi).

# 啟動(dòng)默認(rèn)圖.

sess = tf.Session()

# 調(diào)用 sess 的 'run()' 方法來(lái)執(zhí)行矩陣乘法 op, 傳入 'product' 作為該方法的參數(shù).

# 上面提到, 'product' 代表了矩陣乘法 op 的輸出, 傳入它是向方法表明, 我們希望取回

# 矩陣乘法 op 的輸出.

#

# 整個(gè)執(zhí)行過(guò)程是自動(dòng)化的, 會(huì)話負(fù)責(zé)傳遞 op 所需的全部輸入. op 通常是并發(fā)執(zhí)行的.

#

# 函數(shù)調(diào)用 'run(product)' 觸發(fā)了圖中三個(gè) op (兩個(gè)常量 op 和一個(gè)矩陣乘法 op) 的執(zhí)行.

#

# 返回值 'result' 是一個(gè) numpy `ndarray` 對(duì)象.

result = sess.run(product)

print result

# ==> [[ 12.]]

# 任務(wù)完成, 關(guān)閉會(huì)話.

sess.close()

Session 對(duì)象在使用完后需要關(guān)閉以釋放資源. 除了顯式調(diào)用 close 外, 也可以使用 "with" 代碼塊 來(lái)自動(dòng)完成關(guān)閉動(dòng)作.

with tf.Session() as sess:

result = sess.run([product])

print result

在實(shí)現(xiàn)上, TensorFlow 將圖形定義轉(zhuǎn)換成分布式執(zhí)行的操作, 以充分利用可用的計(jì)算資源(如 CPU 或 GPU). 一般你不需要顯式指定使用 CPU 還是 GPU, TensorFlow 能自動(dòng)檢測(cè). 如果檢測(cè)到 GPU, TensorFlow 會(huì)盡可能地利用找到的第一個(gè) GPU 來(lái)執(zhí)行操作.

如果機(jī)器上有超過(guò)一個(gè)可用的 GPU, 除第一個(gè)外的其它 GPU 默認(rèn)是不參與計(jì)算的. 為了讓 TensorFlow 使用這些 GPU, 你必須將 op 明確指派給它們執(zhí)行. with...Device 語(yǔ)句用來(lái)指派特定的 CPU 或 GPU 執(zhí)行操作:

with tf.Session() as sess:

with tf.device("/gpu:1"):

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

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

product = tf.matmul(matrix1, matrix2)

在一套標(biāo)準(zhǔn)的系統(tǒng)上通常有多個(gè)計(jì)算設(shè)備. TensorFlow 支持 CPU 和 GPU 這兩種設(shè)備. 我們用指定字符串strings 來(lái)標(biāo)識(shí)這些設(shè)備:

  • "/cpu:0": 機(jī)器的 CPU.
  • "/gpu:0": 機(jī)器的第一個(gè) GPU, 如果有的話.
  • "/gpu:1": 機(jī)器的第二個(gè) GPU, 以此類(lèi)推.

閱讀使用GPU章節(jié), 了解 TensorFlow GPU 使用的更多信息.

交互式使用

文檔中的 Python 示例使用一個(gè)會(huì)話 Session 來(lái) 啟動(dòng)圖, 并調(diào)用 Session.run() 方法執(zhí)行操作.

為了便于使用諸如 IPython 之類(lèi)的 Python 交互環(huán)境, 可以使用 InteractiveSession 代替 Session 類(lèi), 使用 Tensor.eval() 和 Operation.run() 方法代替 Session.run(). 這樣可以避免使用一個(gè)變量來(lái)持有會(huì)話.

# 進(jìn)入一個(gè)交互式 TensorFlow 會(huì)話.

import tensorflow as tf

sess = tf.InteractiveSession()

x = tf.Variable([1.0, 2.0])

a = tf.constant([3.0, 3.0])

# 使用初始化器 initializer op 的 run() 方法初始化 'x'

x.initializer.run()

# 增加一個(gè)減法 sub op, 從 'x' 減去 'a'. 運(yùn)行減法 op, 輸出結(jié)果

sub = tf.sub(x, a)

print sub.eval()

# ==> [-2. -1.]

Tensor

TensorFlow 程序使用 tensor 數(shù)據(jù)結(jié)構(gòu)來(lái)代表所有的數(shù)據(jù), 計(jì)算圖中, 操作間傳遞的數(shù)據(jù)都是 tensor. 你可以把 TensorFlow tensor 看作是一個(gè) n 維的數(shù)組或列表. 一個(gè) tensor 包含一個(gè)靜態(tài)類(lèi)型 rank, 和 一個(gè) shape. 想了解 TensorFlow 是如何處理這些概念的, 參見(jiàn) Rank, Shape, 和 Type.

變量

Variables for more details. 變量維護(hù)圖執(zhí)行過(guò)程中的狀態(tài)信息. 下面的例子演示了如何使用變量實(shí)現(xiàn)一個(gè)簡(jiǎn)單的計(jì)數(shù)器. 參見(jiàn) 變量 章節(jié)了解更多細(xì)節(jié).

# 創(chuàng)建一個(gè)變量, 初始化為標(biāo)量 0.

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

# 創(chuàng)建一個(gè) op, 其作用是使 state 增加 1

one = tf.constant(1)

new_value = tf.add(state, one)

update = tf.assign(state, new_value)

# 啟動(dòng)圖后, 變量必須先經(jīng)過(guò)`初始化` (init) op 初始化,

# 首先必須增加一個(gè)`初始化` op 到圖中.

init_op = tf.initialize_all_variables()

# 啟動(dòng)圖, 運(yùn)行 op

with tf.Session() as sess:

# 運(yùn)行 'init' op

sess.run(init_op)

# 打印 'state' 的初始值

print sess.run(state)

# 運(yùn)行 op, 更新 'state', 并打印 'state'

for _ in range(3):

sess.run(update)

print sess.run(state)

# 輸出:

# 0

# 1

# 2

# 3

代碼中 assign() 操作是圖所描繪的表達(dá)式的一部分, 正如 add() 操作一樣. 所以在調(diào)用 run() 執(zhí)行表達(dá)式之前, 它并不會(huì)真正執(zhí)行賦值操作.

通常會(huì)將一個(gè)統(tǒng)計(jì)模型中的參數(shù)表示為一組變量. 例如, 你可以將一個(gè)神經(jīng)網(wǎng)絡(luò)的權(quán)重作為某個(gè)變量存儲(chǔ)在一個(gè) tensor 中. 在訓(xùn)練過(guò)程中, 通過(guò)重復(fù)運(yùn)行訓(xùn)練圖, 更新這個(gè) tensor.

Fetch

為了取回操作的輸出內(nèi)容, 可以在使用 Session 對(duì)象的 run() 調(diào)用 執(zhí)行圖時(shí), 傳入一些 tensor, 這些 tensor 會(huì)幫助你取回結(jié)果. 在之前的例子里, 我們只取回了單個(gè)節(jié)點(diǎn) state, 但是你也可以取回多個(gè) tensor:

input1 = tf.constant(3.0)

input2 = tf.constant(2.0)

input3 = tf.constant(5.0)

intermed = tf.add(input2, input3)

mul = tf.mul(input1, intermed)

with tf.Session():

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

print result

# 輸出:

# [array([ 21.], dtype=float32), array([ 7.], dtype=float32)]

需要獲取的多個(gè) tensor 值,在 op 的一次運(yùn)行中一起獲得(而不是逐個(gè)去獲取 tensor)。

Feed

上述示例在計(jì)算圖中引入了 tensor, 以常量或變量的形式存儲(chǔ). TensorFlow 還提供了 feed 機(jī)制, 該機(jī)制 可以臨時(shí)替代圖中的任意操作中的 tensor 可以對(duì)圖中任何操作提交補(bǔ)丁, 直接插入一個(gè) tensor.

feed 使用一個(gè) tensor 值臨時(shí)替換一個(gè)操作的輸出結(jié)果. 你可以提供 feed 數(shù)據(jù)作為 run() 調(diào)用的參數(shù). feed 只在調(diào)用它的方法內(nèi)有效, 方法結(jié)束, feed 就會(huì)消失. 最常見(jiàn)的用例是將某些特殊的操作指定為 "feed" 操作, 標(biāo)記的方法是使用 tf.placeholder() 為這些操作創(chuàng)建占位符.

input1 = tf.placeholder(tf.types.float32)

input2 = tf.placeholder(tf.types.float32)

output = tf.mul(input1, input2)

with tf.Session() as sess:

print sess.run([output], feed_dict={input1:[7.], input2:[2.]})

# 輸出:

# [array([ 14.], dtype=float32)]

for a larger-scale example of feeds. 如果沒(méi)有正確提供 feed, placeholder() 操作將會(huì)產(chǎn)生錯(cuò)誤. MNIST 全連通 feed 教程 (source code) 給出了一個(gè)更大規(guī)模的使用 feed 的例子.

有問(wèn)題歡迎評(píng)論交流,一起進(jìn)步!

總結(jié)

以上是生活随笔為你收集整理的tensorflow怎样调用gpu_tensorflow基本用法(图,会话,tensor,变量等)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。