簡體   English   中英

當我使用 tensorflow ops 編寫函數時會發生什么

[英]what happens when I write a function using tensorflow ops

我使用 tensorflow ops 編寫了一個函數。 我知道當我運行該函數時,它會向圖中添加許多操作。 但我對如何訪問這些操作感到困惑。

例如:

def assign_weights():
    with tf.name_scope('zheng'):
        v = tf.Variable(0, 'v', dtype=tf.float32)
        b = tf.placeholder(tf.float32, shape=())
        z = tf.assign(v, b)
    return z, b

我可以用feed_dict傳遞ab ,只有當我設置b作為返回值。 否則,無法訪問b 如果我們想訪問函數范圍內的許多操作,我們應該設置許多返回值。 這是非常丑陋的。

我想知道當我使用 tensorflow 運行函數時會發生什么,以及如何訪問函數作用域中的操作。

謝謝!

顯然,要訪問操作(或張量),我們確實需要對它進行一些引用。 恕我直言,一種標准的解決方法是在類中構建圖形並創建類的某些張量屬性並通過對象訪問它們。

或者,如果您更傾向於函數式方法,那么比分別返回所有相關操作和張量更好的方法是返回 dict(或命名元組)。

此外,還有一些專門的函數按名稱返回操作:例如get_operation_by_name

作為這個問題的旁白,您可能還想嘗試急切執行,這是必不可少的。

使用 op 函數時會發生 3 件事:

  • 創建計算節點並將其添加到默認圖中
  • 將您的輸入設置為節點輸入張量
  • 將節點輸出張量設置為返回值

例如, a = tf.add(b, c, name='add')

  • 添加一個帶有 op Add到默認圖形的節點,名稱為“add”
  • 將 b 和 c 設置為節點輸入張量
  • 將名稱為“add:0”的節點輸出設置為

所以你可以通過sess.graph訪問節點,有很多函數可以訪問節點,比如 get_operation_by_name。

此外,您可以通過sess.graph_def操作該圖,它是帶有 protobuf 的序列化圖,您可以在 tensorflow 源代碼中找到 protobuf 定義, tensorflow/core/framework ,一些 .proto 文件在那里。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM