命名

2017-10-30 5 views
1
以下

ネットワークが保存され、命名

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_Z Tensor("output_Z/mul:0", shape=(3, ?), dtype=float32) 
ある

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

を印刷するprint文を期待しています

誰かが何が起こっているのか説明できますか?

おかげ

+0

ドロップアウト操作があるため、 'tf.add(tf.matmul(A、W)、b)の私が得た.op.name' '追加' からではなく、' TFから、奇妙です。 nn.dropout(the_previous_op).op.name'私は "dropout/mul"を取得しました。 – lerner

+0

self.Zは操作であり、操作名が追加されますが、ここでは奇妙な方法でそれが私のように見えます。 – lerner

答えて

0

私は、あなたが精通していないことTensorFlowの動作の命名だと思います。あなたは、zの名前が操作zの名前と異なるが、それらのすべてが、追加操作名mulを持って見ることができるように

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' 

:まずはこれを見てみましょう。

あなたは、このように行うことができます期待したものを取得するには、次の

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' 

Reference

tf.variable_scopeでOPSの名前()

私たちはどのようにTFを議論.variable_scopeは変数の名前を管理します。しかし、 スコープ内の他の操作の名前にどのように影響しますか?可変スコープ内で作成されたopsもその名前を と共有する必要があるのは自然で です。このため、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"