2017-10-30 1 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:0", shape=(3, ?), dtype=float32) 

를 인쇄하는 인쇄 문을 기대하고하는 것은

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

누군가 일어나는 일을 설명 할 수 있습니까?

덕분에

+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에서 작업의 이름입니다 익숙하지 않은 것을 생각한다. 의 처음이를 보자 :

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' 

Reference을 :

당신이 이런 식으로 할 수있는 무엇을 기대 얻으려면

우리는 어떻게 TF 논의

tf.variable_scope에서 OPS()의

이름 .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"