簡體   English   中英

張量流張量的命名

[英]Naming of tensorflow tensors

下面是一個代碼片段,嘗試命名張量操作的結果,以便在網絡保存和恢復后可以訪問它

   def createForward(self):

    # forward propogation

    Z      = tf.add(tf.matmul(self.W,self.prevLayer.A),self.b)
    self.Z = tf.nn.dropout(Z,self.keepProb,name = self.name+'_Z')
    print(self.name+'_Z',self.Z)

當self.name為'output'時,我期望打印語句打印出來

output_Z Tensor("output_Z:0", shape=(3, ?), dtype=float32)

我真正得到的是

output_Z Tensor("output_Z/mul:0", shape=(3, ?), dtype=float32)

有人可以解釋發生了什么。

謝謝

我認為您不熟悉TensorFlow中的操作命名。 我們首先來看一下:

In [2]: import tensorflow as tf      
In [4]: w = tf.Variable([[1,2,3], [4,5,6], [7,8,9], [3,1,5], [4,1,7]], dtype=tf.float32) 
In [6]: z = tf.nn.dropout(w, 0.4, name="output_Z")
In [7]: z.op.name
Out[7]: u'output_Z/mul' 
In [8]: z.name
Out[8]: u'output_Z/mul:0'

如您所見,z的名稱與操作z的名稱不同,但是所有名稱都附加了操作名稱mul

要獲得您期望的結果,您可以這樣做:

In [12]: Z = tf.identity(z, name="output_Z")
In [13]: Z.op.name
Out[13]: u'output_Z'
In [14]: Z.name
Out[14]: u'output_Z:0'

參考

tf.variable_scope()中的操作名稱

我們討論了tf.variable_scope如何管理變量的名稱。 但是它如何影響范圍內其他操作的名稱? 在變量范圍內創建的操作也應該共享該名稱,這是很自然的。 因此,當我們使用tf.variable_scope(“ name”)時,將隱式打開一個tf.name_scope(“ name”)。 例如:

with tf.variable_scope("foo"):
    x = 1.0 + tf.get_variable("v", [1])
assert x.op.name == "foo/add"

暫無
暫無

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

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