2016-07-07 1 views
1

나는 한 점이 혼란 스럽다. conv1/filt conv1/biastensorflow에서 var.op.name과 var.name의 차이점은 무엇입니까?

내가 var.name

var.op.name 변경할 때 출력된다 :

opt = tf.train.GradientDescentOptimizer(1e-4) 
grads_and_vars = opt.compute_gradients(total_loss)  
for grad, var in grads_and_vars:   
    print(var.op.name) 

출력은 : conv1/filt:0 conv1/bias:0

var.op.namevar.name 차이 란 여기 코드 예는 ? 및 :0의 의미는 무엇입니까?

답변

2

op.name은 조작의 이름이고 var.name은 Tensor의 이름입니다. 연산은 메모리를 할당하고 끝점에서 사용할 수있는 출력을 생성합니다 (0, : 1 등). Tensor는 연산의 결과이므로 일부 끝점에 해당합니다. 이 경우 conv1/filt은 메모리를 담당하는 변수 연산이고 conv1/filt:0은 해당 연산의 첫 번째 끝점입니다. 실질적인 차이점은 conv1/filt:0sess.run(["conv1/filt:0"])과 같이 값을 가져올 때 가져올 수있는 값이며 conv1/filt을 사용하면 작업이 보류됩니다. 즉 tf.get_default_graph().get_operation_by_name("conv1/filt")

0

제 생각에 OP는 모든 변수를 초기화하기 위해 추가되었습니다. : 0은 첫 번째 출력 일 뿐이므로 다른 conv1/filt가 있으면 conv1/filt : 1로 표시됩니다.

관련 문제