TensorBoard는 TensorFlow 실행 및 그래프를 검사하고 이해하기 위한 웹 애플리케이션 제품군입니다.
이 README는 TensorBoard의 주요 개념에 대한 개요와 TensorBoard가 제공하는 시각화를 해석하는 방법을 제공합니다. TensorBoard 사용에 대한 자세한 예를 보려면 TensorBoard: 시작하기 튜토리얼을 참조하세요. TensorBoard를 사용하여 이미지, 그래프, 하이퍼 매개변수 등을 작업하는 방법에 대한 문서는 Colab의 튜토리얼 안내와 함께 링크되어 있습니다.
TensorBoard는 인터넷에 액세스하지 않고도 완전히 오프라인으로 실행되도록 설계되었습니다. 예를 들어 로컬 컴퓨터, 회사 방화벽 뒤 또는 데이터 센터에 있을 수 있습니다.
TensorBoard를 실행하기 전에 요약 작성기를 생성하여 로그 디렉터리에 요약 데이터를 생성했는지 확인하세요.
# sess.graph contains the graph definition; that enables the Graph Visualizer.
file_writer = tf . summary . FileWriter ( '/path/to/logs' , sess . graph )
자세한 내용은 TensorBoard 튜토리얼을 참조하세요. 이벤트 파일이 있으면 TensorBoard를 실행하고 로그 디렉터리를 제공하세요. 미리 컴파일된 TensorFlow 패키지를 사용하는 경우(예: pip를 통해 설치한 경우) 다음을 실행하세요.
tensorboard --logdir path/to/logs
또는 소스에서 빌드하는 경우:
bazel build tensorboard:tensorboard
./bazel-bin/tensorboard/tensorboard --logdir path/to/logs
# or even more succinctly
bazel run tensorboard -- --logdir path/to/logs
그러면 TensorBoard가 시작되었음을 인쇄해야 합니다. 다음으로 http://localhost:6006에 접속합니다.
TensorBoard에서 로그를 읽으려면 logdir
필요합니다. TensorBoard 구성에 대한 정보를 보려면 tensorboard --help
실행하세요.
텐서보드는 구글 크롬이나 파이어폭스에서 사용할 수 있습니다. 다른 브라우저에서는 작동할 수 있지만 버그나 성능 문제가 있을 수 있습니다.
TensorBoard 사용의 첫 번째 단계는 TensorFlow 실행에서 데이터를 획득하는 것입니다. 이를 위해서는 요약 작업이 필요합니다. 요약 작업은 tf.matmul
및 tf.nn.relu
와 같은 작업입니다. 즉, 텐서를 사용하고 텐서를 생성하며 TensorFlow 그래프 내에서 평가됩니다. 그러나 요약 작업에는 반전이 있습니다. 생성된 Tensor에는 디스크에 기록되고 TensorBoard로 전송되는 직렬화된 protobuf가 포함되어 있습니다. TensorBoard에서 요약 데이터를 시각화하려면 요약 작업을 평가하고 결과를 검색한 다음 summary.FileWriter를 사용하여 해당 결과를 디스크에 써야 합니다. 예제와 함께 전체 설명이 튜토리얼에 있습니다.
지원되는 요약 작업은 다음과 같습니다.
tf.summary.scalar
tf.summary.image
tf.summary.audio
tf.summary.text
tf.summary.histogram
요약 작업을 만들 때 tag
도 제공합니다. 태그는 기본적으로 해당 작업에 의해 기록된 데이터의 이름이며 프런트엔드에서 데이터를 구성하는 데 사용됩니다. 스칼라 및 히스토그램 대시보드는 데이터를 태그별로 구성하고 디렉터리/유사/계층 구조에 따라 태그를 폴더로 그룹화합니다. 태그가 많으면 슬래시로 그룹화하는 것이 좋습니다.
summary.FileWriters
TensorFlow에서 요약 데이터를 가져온 다음 이를 logdir
이라는 지정된 디렉터리에 씁니다. 특히 데이터는 파일 이름에 "tfevents"가 포함된 추가 전용 레코드 덤프에 기록됩니다. TensorBoard는 전체 디렉터리에서 데이터를 읽고 이를 단일 TensorFlow 실행 기록으로 구성합니다.
개별 파일이 아닌 전체 디렉토리를 읽는 이유는 무엇입니까? 모델을 실행하기 위해supervisor.py를 사용했을 수 있습니다. 이 경우 TensorFlow가 충돌하면 감독자는 체크포인트에서 모델을 다시 시작합니다. 다시 시작하면 새 이벤트 파일에 쓰기 시작하고 TensorBoard는 다양한 이벤트 파일을 함께 연결하여 발생한 일에 대한 일관된 기록을 생성합니다.
모델의 여러 실행을 시각적으로 비교할 수 있습니다. 예를 들어 하이퍼파라미터를 변경했고 더 빠르게 수렴되는지 확인하고 싶다고 가정해 보겠습니다. TensorBoard는 다양한 "실행"을 통해 이를 가능하게 합니다. TensorBoard가 시작 시 logdir
전달하면 logdir
에 루트가 있는 디렉터리 트리를 반복적으로 탐색하여 tfevents 데이터가 포함된 하위 디렉터리를 찾습니다. 이러한 하위 디렉터리를 만날 때마다 이를 새로운 run
으로 로드하고 프런트엔드는 그에 따라 데이터를 구성합니다.
예를 들어 다음은 "run1"과 "run2"라는 두 개의 실행이 있는 잘 구성된 TensorBoard 로그 디렉터리입니다.
/some/path/mnist_experiments/
/some/path/mnist_experiments/run1/
/some/path/mnist_experiments/run1/events.out.tfevents.1456525581.name
/some/path/mnist_experiments/run1/events.out.tfevents.1456525585.name
/some/path/mnist_experiments/run2/
/some/path/mnist_experiments/run2/events.out.tfevents.1456525385.name
/tensorboard --logdir /some/path/mnist_experiments
쉼표로 구분된 로그 디렉터리 목록을 전달할 수도 있으며, TensorBoard는 각 디렉터리를 감시합니다. 다음과 같이 이름과 경로 사이에 콜론을 넣어 개별 로그 디렉터리에 이름을 할당할 수도 있습니다.
tensorboard --logdir_spec name1:/path/to/logs/1,name2:/path/to/logs/2
이 플래그( --logdir_spec
)는 권장되지 않으며 일반적으로 피할 수 있습니다 . TensorBoard는 로그 디렉터리를 재귀적으로 탐색합니다. 보다 세밀하게 제어하려면 심볼릭 링크 트리를 사용하는 것이 좋습니다. --logdir
대신 --logdir_spec
사용하면 일부 기능이 작동하지 않을 수 있습니다.
TensorBoard의 스칼라 대시보드는 시간에 따라 변하는 스칼라 통계를 시각화합니다. 예를 들어 모델의 손실 또는 학습률을 추적할 수 있습니다. 주요 개념 에 설명된 대로 여러 실행을 비교할 수 있으며 데이터는 태그별로 구성됩니다. 꺾은선형 차트에는 다음과 같은 상호 작용이 있습니다.
각 차트의 왼쪽 하단에 있는 작은 파란색 아이콘을 클릭하면 차트가 확장됩니다.
차트의 직사각형 영역을 드래그하면 확대됩니다.
차트를 두 번 클릭하면 축소됩니다.
차트 위에 마우스를 올리면 왼쪽의 실행 선택기에 데이터 값이 기록된 십자선이 생성됩니다.
또한 대시보드 왼쪽 상단에 있는 상자에 정규식을 작성하여 태그를 구성하는 새 폴더를 만들 수 있습니다.
히스토그램 대시보드는 Tensor의 통계적 분포가 시간에 따라 어떻게 변했는지 표시합니다. tf.summary.histogram
통해 기록된 데이터를 시각화합니다. 각 차트는 데이터의 시간적 '슬라이스'를 표시하며, 각 슬라이스는 특정 단계의 텐서 히스토그램입니다. 가장 오래된 시간 단계가 뒤쪽에, 가장 최근 시간 단계가 앞에 정렬되어 있습니다. 히스토그램 모드를 "오프셋"에서 "오버레이"로 변경하면 모든 히스토그램 조각이 선으로 렌더링되고 서로 겹쳐지도록 관점이 회전됩니다.
배포 대시보드는 tf.summary.histogram
의 히스토그램 데이터를 시각화하는 또 다른 방법입니다. 분포에 대한 상위 수준의 통계를 보여줍니다. 차트의 각 선은 데이터 분포의 백분위수를 나타냅니다. 예를 들어 아래쪽 선은 시간이 지남에 따라 최소값이 어떻게 변했는지 보여주고 가운데 선은 중앙값이 어떻게 변했는지 보여줍니다. 위에서 아래로 읽으면 선의 의미는 다음과 같습니다: [maximum, 93%, 84%, 69%, 50%, 31%, 16%, 7%, minimum]
이러한 백분위수는 정규 분포의 표준 편차 경계로 볼 수도 있습니다. [maximum, μ+1.5σ, μ+σ, μ+0.5σ, μ, μ-0.5σ, μ-σ, μ-1.5σ, minimum]
따라서 안쪽에서 바깥쪽으로 읽은 색상 영역은 각각 [σ, 2σ, 3σ]
너비를 갖습니다.
이미지 대시보드는 tf.summary.image
를 통해 저장된 png를 표시할 수 있습니다. 대시보드는 각 행이 서로 다른 태그에 해당하고 각 열이 실행에 해당하도록 설정되었습니다. 이미지 대시보드는 임의의 png를 지원하므로 이를 사용하여 사용자 정의 시각화(예: matplotlib 산점도)를 TensorBoard에 포함할 수 있습니다. 이 대시보드에는 항상 각 태그의 최신 이미지가 표시됩니다.
오디오 대시보드는 tf.summary.audio
를 통해 저장된 오디오에 대해 재생 가능한 오디오 위젯을 포함할 수 있습니다. 대시보드는 각 행이 서로 다른 태그에 해당하고 각 열이 실행에 해당하도록 설정되었습니다. 이 대시보드에는 항상 각 태그에 대한 최신 오디오가 포함되어 있습니다.
Graph Explorer는 TensorBoard 그래프를 시각화하여 TensorFlow 모델을 검사할 수 있습니다. 그래프 시각화 도우미를 최대한 활용하려면 이름 범위를 사용하여 그래프의 작업을 계층적으로 그룹화해야 합니다. 그렇지 않으면 그래프를 해독하기 어려울 수 있습니다. 예제를 포함한 자세한 내용은 TensorFlow 그래프 검토 튜토리얼을 참조하세요.
Embedding Projector를 사용하면 고차원 데이터를 시각화할 수 있습니다. 예를 들어 입력 데이터가 모델에 의해 고차원 공간에 삽입된 후 볼 수 있습니다. 임베딩 프로젝터는 모델 체크포인트 파일에서 데이터를 읽고 어휘 파일이나 스프라이트 이미지와 같은 추가 메타데이터로 구성될 수 있습니다. 자세한 내용은 임베딩 프로젝터 튜토리얼을 참조하세요.
텍스트 대시보드에는 tf.summary.text
를 통해 저장된 텍스트 조각이 표시됩니다. 하이퍼링크, 목록, 테이블을 포함한 마크다운 기능이 모두 지원됩니다.
시계열 대시보드는 tf.summary.scalar
, tf.summary.image
또는 tf.summary.histogram
통해 저장된 모든 스칼라, 히스토그램 및 이미지를 포함하는 통합 인터페이스를 표시합니다. 예를 들어 활성화 히스토그램 및 훈련 예시 이미지와 함께 '정확도' 라인 차트를 나란히 볼 수 있습니다.
기능은 다음과 같습니다:
사용자 정의 실행 색상: 실행 선택기에서 색상이 지정된 원을 클릭하여 실행 색상을 변경합니다.
고정된 카드: 빠른 비교를 위해 카드의 '핀' 아이콘을 클릭하여 상단의 고정 섹션에 추가하세요.
설정: 오른쪽 창에는 차트 및 기타 시각화에 대한 설정이 제공됩니다. 동일한 URL 원본에서 호스팅되는 경우 중요한 설정은 TensorBoard 세션 전반에 걸쳐 유지됩니다.
태그 필터의 자동 완성: 특정 차트를 더욱 쉽게 검색할 수 있습니다.
먼저 --logdir
에 전달된 디렉터리가 올바른지 확인하세요. Scalars 대시보드("비활성" 메뉴 아래)로 이동하여 왼쪽 사이드바 하단에서 로그 디렉터리 경로를 찾아 이를 확인할 수도 있습니다.
올바른 경로에서 로드하는 경우 이벤트 파일이 있는지 확인하세요. TensorBoard는 logdir을 재귀적으로 탐색하므로 데이터가 하위 디렉터리 아래에 중첩되어 있어도 괜찮습니다. 다음 결과가 하나 이상 표시되는지 확인하세요.
find DIRECTORY_PATH | grep tfevents
또한 검사 모드에서 텐서보드를 실행하여 이벤트 파일의 내용을 검사하여 이벤트 파일에 실제로 데이터가 있는지 확인할 수도 있습니다.
tensorboard --inspect --logdir DIRECTORY_PATH
빈 TensorBoard에 해당하는 이벤트 파일의 출력에는 때때로 TensorBoard에서 표시되지 않는 몇 가지 초기 이벤트를 나타내는 몇 가지 단계가 표시될 수 있습니다(예: Keras TensorBoard 콜백을 사용하는 경우).
tensor
first_step 0
last_step 2
max_step 2
min_step 0
num_steps 2
outoforder_steps [(2, 0), (2, 0), (2, 0)]
이와 대조적으로 더 많은 데이터가 포함된 이벤트 파일의 출력은 다음과 같습니다.
tensor
first_step 0
last_step 55
max_step 250
min_step 0
num_steps 60
outoforder_steps [(2, 0), (2, 0), (2, 0), (2, 0), (50, 9), (100, 19), (150, 29), (200, 39), (250, 49)]
업데이트: 2.3.0 릴리스 이후 TensorBoard는 더 이상 30초마다 자동으로 다시 로드되지 않습니다. 동작을 다시 활성화하려면 TensorBoard 웹 인터페이스 오른쪽 상단에 있는 기어 아이콘을 클릭하여 설정을 열고 "데이터 다시 로드"를 활성화하십시오.
업데이트: 이제 실험적인
--reload_multifile=true
옵션을 사용하여 아래 설명된 최신 파일 대신 새 데이터에 대한 디렉터리의 모든 "활성" 파일을 폴링할 수 있습니다. 파일은--reload_multifile_inactive_secs
초 전에 새 데이터를 수신한 한 "활성" 상태이며 기본값은 86400입니다.
이 문제는 일반적으로 TensorBoard가 tfevents
파일을 반복하는 방식 때문에 발생합니다. 즉, 타임스탬프 순서로 이벤트 파일을 통해 진행되며 한 번에 하나의 파일만 읽습니다. 타임스탬프가 a
와 b
인 파일이 있다고 가정해 보겠습니다. 여기서 a 입니다. TensorBoard는
a
모든 이벤트를 읽고 나면 더 최근 파일에 새 이벤트가 기록되고 있다고 가정하기 때문에 다시는 반환되지 않습니다. 예를 들어 두 개의 FileWriters
동일한 디렉터리에 동시에 쓰는 경우 문제가 발생할 수 있습니다. 요약 작성자가 여러 명 있는 경우 각 작성자는 별도의 디렉터리에 작성해야 합니다.
업데이트: 이제 실험적인
--reload_multifile=true
옵션을 사용하여 디렉토리의 모든 "활성" 파일을 새로운 데이터에 대해 폴링할 수 있습니다. 이는--reload_multifile_inactive_secs
초 전에 새 데이터를 수신한 모든 파일로 정의되며 기본값은 86400입니다.
아니요. TensorBoard는 한 번에 하나의 이벤트 파일만 기록될 것으로 예상하며 여러 요약 작성자는 여러 이벤트 파일을 의미합니다. 분산된 TensorFlow 인스턴스를 실행하는 경우 단일 작업자를 모든 요약 처리를 담당하는 "책임자"로 지정하는 것이 좋습니다. 예를 보려면 supervisor.py를 참조하세요.
시간을 거꾸로 이동하고 데이터 자체와 겹치는 것처럼 보이는 데이터가 있는 경우 몇 가지 가능한 설명이 있습니다.
모두 동일한 로그 디렉터리에 쓴 TensorFlow를 여러 번 실행할 수 있습니다. 각 TensorFlow 실행이 자체 logdir에 기록되도록 하세요.
업데이트: 이제 실험적인
--reload_multifile=true
옵션을 사용하여 디렉토리의 모든 "활성" 파일을 새로운 데이터에 대해 폴링할 수 있습니다. 이는--reload_multifile_inactive_secs
초 전에 새 데이터를 수신한 모든 파일로 정의되며 기본값은 86400입니다.
global_step 변수( FileWriter.add_summary
에 전달됨)가 잘못 유지되는 코드에 버그가 있을 수 있습니다.
TensorFlow 작업이 중단되어 이전 체크포인트에서 다시 시작되었을 수 있습니다. 아래의 TensorFlow 재시작 처리 방법을 참조하세요.
해결 방법으로 TensorBoard의 x축 표시를 steps
에서 wall_time
으로 변경해 보세요. 이렇게 하면 문제가 해결되는 경우가 많습니다.
TensorFlow는 작업이 충돌하거나 종료되는 경우 단계적 복구를 위한 메커니즘으로 설계되었습니다. TensorFlow는 모델 체크포인트 파일을 주기적으로 작성할 수 있으므로 모든 훈련 진행 상황을 잃지 않고 TensorFlow를 다시 시작할 수 있습니다.
그러나 이는 TensorBoard의 상황을 복잡하게 만들 수 있습니다. TensorFlow가 a
단계에서 체크포인트를 작성한 다음 b
단계까지 계속 실행된 다음 타임스탬프 a
에서 충돌이 발생하고 다시 시작되었다고 상상해 보세요. a
와 b
사이에 기록된 모든 이벤트는 재시작 이벤트에 의해 "분리"되었으므로 제거해야 합니다.
이를 용이하게 하기 위해 SessionStatus.START
이벤트로 기록할 수 있는 SessionLog
메시지가 tensorflow/core/util/event.proto
에 있습니다. 모든 이벤트와 마찬가지로 관련 step
있을 수 있습니다. TensorBoard가 a
단계에서 SessionStatus.START
이벤트를 감지하면 a
보다 큰 단계의 모든 이벤트가 고아라고 가정하고 해당 이벤트를 삭제합니다. 이 동작은 --purge_orphaned_data false
플래그를 사용하여 비활성화할 수 있습니다(0.7 이후 버전).
Scalar Dashboard는 데이터 내보내기를 지원합니다. 왼쪽 표시줄에서 "다운로드 링크 활성화" 옵션을 클릭할 수 있습니다. 그런 다음 각 플롯은 포함된 데이터에 대한 다운로드 링크를 제공합니다.
전체 데이터 세트에 액세스해야 하는 경우 summary_iterator
메서드를 사용하여 TensorBoard가 사용하는 이벤트 파일을 읽을 수 있습니다.
예! 예제 중 하나를 복제하고 수정하여 자신만의 놀라운 시각화를 만들 수 있습니다. 플러그인 시스템에 대한 추가 문서는 ADDING_A_PLUGIN 가이드에 설명되어 있습니다. 기능 요청이나 플러그인 기능에 대한 질문을 자유롭게 제출해 주세요.
자신만의 획기적인 새 플러그인에 만족했다면 PyPI에 게시하고 커뮤니티와 공유하는 방법에 대한 배포 섹션을 참조하세요.
사용자 정의 스칼라 플러그인을 사용하면 사용자 정의 실행 태그 쌍에 대한 선이 포함된 스칼라 플롯을 생성할 수 있습니다. 그러나 원본 스칼라 대시보드 내에서 각 스칼라 플롯은 특정 태그에 대한 데이터에 해당하며 해당 태그를 포함하는 각 실행에 대한 선을 포함합니다.
사용자 정의 스칼라 플러그인을 사용하여 마진 플롯(하한 및 상한을 시각화)을 생성할 수 있습니다. 원래 스칼라 플러그인은 여백 시각화를 지원하지 않습니다.
아직은 불가능합니다. 해결 방법으로 자신의 코드(예: matplotlib)에서 사용자 정의 플롯을 만든 다음 이를 SummaryProto
( core/framework/summary.proto
)에 쓰고 FileWriter
에 추가할 수 있습니다. 그러면 사용자 정의 플롯이 TensorBoard 이미지 탭에 나타납니다.
TensorBoard는 저장소 샘플링을 사용하여 데이터를 RAM에 로드할 수 있도록 다운샘플링합니다. --samples_per_plugin
명령줄 인수를 사용하여 태그별로 유지할 요소 수를 수정할 수 있습니다(예: --samples_per_plugin=scalars=500,images=20
). 자세한 내용은 이 스택 오버플로 질문을 참조하세요.
TensorBoard 2.0 이전 버전의 TensorBoard는 기본적으로 공개적으로 액세스할 수 있는 호스트 0.0.0.0
에서 제공됩니다. 해당 버전의 TensorBoard에서는 시작 시 --host localhost
지정하여 팝업을 중지할 수 있습니다.
TensorBoard 2.0 이상에서는 --host localhost
기본값입니다. --bind_all
사용하여 IPv4 및 IPv6 모두에서 공용 네트워크에 서비스를 제공하는 이전 동작을 복원합니다.
tensorboard
실행할 수 있나요?TensorFlow를 설치하지 않은 경우 TensorBoard 1.14+는 제한된 기능 세트로 실행될 수 있습니다. 주요 제한 사항은 1.14부터 다음 플러그인만 지원된다는 것입니다: 스칼라, 사용자 정의 스칼라, 이미지, 오디오, 그래프, 프로젝터(부분), 분포, 히스토그램, 텍스트, PR 곡선, 메시. 또한 Google Cloud Storage에서는 로그 디렉터리가 지원되지 않습니다.
DEVELOPMENT.md를 참조하세요.
먼저 GitHub 문제와 Stack Overflow를 검색해 보세요. 다른 사람이 이미 동일한 문제나 질문을 갖고 있을 수도 있습니다.
일반적인 사용법 질문(또는 로컬 설정과 관련된 문제)은 스택 오버플로로 이동해야 합니다.
TensorBoard에서 버그를 발견한 경우 제공할 수 있는 지원 정보를 최대한 많이 포함하여 GitHub 문제를 제출해 주세요(예: tensorboard --inspect
출력을 포함한 이벤트 파일 첨부 등).