반응형

원본 링크



Using tf.Print() in TensorFlow


여러분이 확실하게 매번 올바른 방법으로 디버거를 사용하고 코드 디버깅을 위해 print 문을 사용하지 않는다는 것을 안다.

그렇다면 여러분은 일반적인 print문과 동일한 방법으로 텐서플로우의 print 문이 동작하지 않는다는 것을 알 것이다.

이 글에서는 텐서플로우의 print문이 어떻게 동작하지 그리고 그중 대부분을 만드는 방법, 이를 최대한 활용하는 방법에 대해 알아본다.




Printing in TensorFlow

텐서플로우 코드를 작성하는 동안 무엇인가 출력하는 것을 얻는 여러 방법이 있다. 물론 전통적인 파이썬 내장 print도 있다. 그리고 텐서플로우의 print 함수인 tf.Print도 있다.

텐서플로우로 작업할 때 모든것이 결국 그래프 계산인 것을 기억하는게 중요하다. 이는 파이썬의 print를 사용하여 텐서플로우 연산을 출력하면 그 연산이 무엇인지에 대한 설명을 간단히 보여줄 것이다. 왜냐하면 아직 이 연산을 통해 전달되어진 값이 없기 때문이다. 또한 때때로 알려진 경우 해당 노드에서 예상되는 차원을 보여준다.


값은 어디에? 적어도 모양(shape)과 type은 얻는다.

실행되고 있는 것처럼 그래프의 특정 부분을 지나는 '흐름(flowing)'인 값(value)을 출력하려면 tf.Print를 사용해야 한다.



Structuring your Print node

종종 우리는 어떤것의 측면에서 더한 무엇인가로써 print를 생각한다. 그런 후에 그냥 실행되도록 하면 연산에 대한 정상적인 흐름으로 되돌아간다. 텐서플로우에서 출력을 계산하기 위해 필요한 그래프의 노드만이 실행된다. 따라서 그래프에 '매달린(dangling)' Print 노드가 있으면 이 노드는 실행되지 않는다.


그러면 우리가 해야하는 것은 Print 호출을 아래처럼 그래프 내부로 붙여야한다.


코드에서 이것이 나타나는 방법은 Print 호출의 입력인 노드를 첫번째 파라미터로 Print 호출을 통화시키고 tf.Print의 반환값을 그래프에서 다음 노드의 입력으로 제공될 변수에 할당하는 것이다. 따라서 Print 문을 연산의 흐름에 연이어 연결하는 것이다.(사실 여러분이 이 반환된 노드를 사용하는 것이 굉장히 중요하다. 왜냐하면 그렇지 않으면 이 노드가 매달린-dangling 상태가 된다.)


Print문은 계산없이 단지 텐서(tonsor)를 계속 진행시키지만 부가효과로 희망하는 노드를 출력한다.

print문에서 보기위해 사용하는 것과 좀 다른 다른 동작은 그래프로 도입한 Print 노드는 단지 Print문이 나타날때 즉, 계산 그래프에서 노드가 도달될 때 설정한다는 것이다. 그러나 출력에 많은 제약은 없다.

이것은 단지 그래프에서 print문이 수행되기를 바라는 곳에 표시되지만 그래프에서 접근할 수 있는 어떠한 노드라도 출력할 수 있다. 이것이 tf.Print 호출의 2번째 인자로 출력을 위한 노드 배열을 받는다. 때때로 입력인 첫번째인자와 동일한 노드를 사용하지만 원한다면 Print에 더 많은 노드를 포함할 수 있다.


message인 3번째 인자도 있다. 이 인자는 노드를 출력하기 전에 string 접두어를 붙일 수 잇게 한다. 그러면 로그에서 주어진 print문을 쉽게 찾을 수 있다.



Putting it in practice

코드의 어디에서 tf.Print를 구성해야 할까?

종종 정확하게 훈련 루프로 무엇이 전달되고 있는지 디버깅하기 위해 입력함수에서 tf.Print를 사용한다. 단지 파이썬 print를 사용하는 것은 입력함수 그래프가 구성될 때 한번만 출력하기 때문에 여기서는 충분하지 않다.


대신 입력함수의 데이터 파이프라인에 tf.Print 초출을 도입하였다. 입력으로 전달된 동일한 값을 출력하고 있지만 다른 노드도 출력할 수 있다는 것을 기억하자.



Some more advice

print 출력은 콘솔에서 stderr를 보여준다.(jupyter의 출력이 아니다!)

입력함수에서 tf.Print를 사용하면 전찰하는 데이터의 총량을 확실하게 제한한다. 그렇지 않으면 엉청나게 긴 스크롤링에 처하게 된다.


반응형

+ Recent posts