TensorFlow.org에서 보기 | Google Colab에서 실행 | GitHub에서 소스 보기 | 노트북 다운로드 |
import tensorflow as tf
TensorFlow 2.x에서는 큰 변화가 포함 tf.summary TensorBoard의 시각화에 대한 쓰기 요약 데이터에 사용되는 API를.
변경된 사항
그것은 생각하는 것이 유용 tf.summary 두 개의 하위의 API 등의 API :
- 기록 개인의 요약을위한 작전의 세트 -
summary.scalar(),summary.histogram(),summary.image(),summary.audio(), 및summary.text()- 모델 코드에서 인라인라고한다. - 이러한 개별 요약을 수집하고 특별히 형식이 지정된 로그 파일(텐서보드가 시각화를 생성하기 위해 읽음)에 기록하는 로직 작성.
TF 1.x에서
한 두 부분은 직접 서로 연결된다 -를 통해 요약 연산 출력을 인출하여 Session.run() 및 호출 FileWriter.add_summary(output, step) . v1.summary.merge_all() 연산은 모든 요약 연산 출력 응집 그래프 컬렉션을 사용하여이 쉬워하지만,이 방법은 여전히 특히 TF 2.x를 위해 부적당하게 열망 실행 및 제어 흐름에 대해 제대로 작동
TF 2.X에서
두 반쪽 긴밀하게 통합되어, 지금은 개인 tf.summary 실행될 때 작전은 (는) 즉시 데이터를 기록. 모델 코드에서 API를 사용하는 것은 여전히 친숙해 보이지만 그래프 모드와 호환되는 상태를 유지하면서 즉시 실행에 친숙합니다. 하여 API 수단의 두 반쪽 통합 summary.FileWriter 이제 TensorFlow 실행 컨텍스트의 일부이며 직접 액세스됩니다 tf.summary 그래서 작가를 구성, 작전은 주요 부분 보이는 다른 점이다.
TF 2.x의 기본값인 즉시 실행을 사용한 사용 예:
writer = tf.summary.create_file_writer("/tmp/mylogs/eager")
with writer.as_default():
for step in range(100):
# other model code would go here
tf.summary.scalar("my_metric", 0.5, step=step)
writer.flush()
ls /tmp/mylogs/eager
events.out.tfevents.1633086727.kokoro-gcp-ubuntu-prod-1386032077.31590.0.v2
tf.function 그래프 실행의 사용 예:
writer = tf.summary.create_file_writer("/tmp/mylogs/tf_function")
@tf.function
def my_func(step):
with writer.as_default():
# other model code would go here
tf.summary.scalar("my_metric", 0.5, step=step)
for step in tf.range(100, dtype=tf.int64):
my_func(step)
writer.flush()
ls /tmp/mylogs/tf_function
events.out.tfevents.1633086728.kokoro-gcp-ubuntu-prod-1386032077.31590.1.v2
레거시 TF 1.x 그래프 실행의 사용 예:
g = tf.compat.v1.Graph()
with g.as_default():
step = tf.Variable(0, dtype=tf.int64)
step_update = step.assign_add(1)
writer = tf.summary.create_file_writer("/tmp/mylogs/session")
with writer.as_default():
tf.summary.scalar("my_metric", 0.5, step=step)
all_summary_ops = tf.compat.v1.summary.all_v2_summary_ops()
writer_flush = writer.flush()
with tf.compat.v1.Session(graph=g) as sess:
sess.run([writer.init(), step.initializer])
for i in range(100):
sess.run(all_summary_ops)
sess.run(step_update)
sess.run(writer_flush)
ls /tmp/mylogs/session
events.out.tfevents.1633086728.kokoro-gcp-ubuntu-prod-1386032077.31590.2.v2
코드 변환
기존의 변환 tf.summary 있도록 TF 2.x에서의 API를 사용하는 것은 신뢰성, 자동화 할 수 없습니다 tf_upgrade_v2 스크립트가 단지에 모두 다시 작성 tf.compat.v1.summary . TF 2.x로 마이그레이션하려면 다음과 같이 코드를 조정해야 합니다.
를 통해 기본 작가 세트
.as_default()사용 요약 작전에 있어야합니다- 이것은 ops를 열심히 실행하거나 그래프 구성에서 ops를 사용하는 것을 의미합니다.
- 기본 작성기가 없으면 요약 작업은 자동 작업 없음이 됩니다.
- 기본 작가는 전역 (아직) 전파하지 않습니다
@tf.function그들은 단지 기능을 추적 할 때 감지 - - 실행 경계 그래서 가장 좋은 방법은 호출하는 것입니다writer.as_default()함수 본문 내에서, 그리고 보장하기 위해 그 작가 객체 만큼 계속 존재@tf.function사용되고
은 "단계"값은 a를 통해 각 연산에 전달해야하는
step인수- TensorBoard는 데이터를 시계열로 렌더링하려면 단계 값이 필요합니다.
- TF 1.x의 전역 단계가 제거되었으므로 명시적 전달이 필요하므로 각 op는 읽을 원하는 단계 변수를 알아야 합니다.
- 상용구를 줄이기 위해 기본 단계 값을 등록하는 실험적인 지원으로 사용할 수 있습니다
tf.summary.experimental.set_step(),하지만이 예고없이 변경 될 수 있습니다 임시 기능입니다
개별 요약 작업의 기능 서명이 변경되었습니다.
- 반환 값은 이제 부울입니다(요약이 실제로 작성되었는지 여부를 나타냄).
- 두번째 매개 변수 이름은 (사용되는 경우)에서 변경된
tensor에data -
collections파라미터는 제거되었다; 컬렉션은 TF 1.x 전용입니다. -
family매개 변수가 제거되었습니다; 단지 사용tf.name_scope()
[레거시 그래프 모드/세션 실행 사용자만 해당]
첫 번째와 작가 초기화
v1.Session.run(writer.init())사용
v1.summary.all_v2_summary_ops()을 통해 그것들을 실행하기 위해 예를 들어, 현재의 그래프에 대한 모든 TF 2.x를 요약 작전을 얻기 위해Session.run()와 작가 세척
v1.Session.run(writer.flush())와 마찬가지로에close()
당신의 TF 1.x의 코드 대신 사용하는 경우 tf.contrib.summary API를, 그래서 그것의 TF 2.x에서 API에 훨씬 더 유사 tf_upgrade_v2 스크립트가 어떤 사용에 대한 마이그레이션 단계의 대부분 (및 발광 경고 또는 오류를 자동화하는 것 수 없습니다 완전히 마이그레이션되어야 함). 대부분의 경우 그것은 단지에 대한 API 호출을 재 작성 tf.compat.v2.summary ; 당신은 단지 TF 2.x를과의 호환성을 필요로하는 경우에는 삭제할 수 있습니다 compat.v2 단지로 참조 tf.summary .
추가 팁
위의 중요한 영역 외에도 일부 보조 측면도 변경되었습니다.
조건부 기록(예: "100단계마다 기록")이 새로운 모양으로 변경되었습니다.
- 제어 작전 및 관련 코드 (열망 모드와 작동하는 일반 if 문에서 그들을 포장
@tf.function사인을 통해 ) 또는tf.cond - 단지 요약을 제어하기 위해, 새로운 사용
tf.summary.record_if()컨텍스트 매니저를, 그리고 당신의 선택의 부울 조건을 통과 다음은 TF 1.x 패턴을 대체합니다.
if condition: writer.add_summary()
- 제어 작전 및 관련 코드 (열망 모드와 작동하는 일반 if 문에서 그들을 포장
의 직접적인 작성하지
tf.compat.v1.Graph- 대신 사용 추적 기능- TF 2.x를 사용하는의 그래프 실행
@tf.function대신 명시 적 그래프의 - TF 2.x에서, 새로운 추적 스타일의 API를 사용
tf.summary.trace_on()와tf.summary.trace_export()실행 함수 그래프를 기록하는
- TF 2.x를 사용하는의 그래프 실행
에 들어 LogDir 당 더 이상 세계 작가 캐싱하지
tf.summary.FileWriterCache- (후자는 대한 TensorBoard 지원을 사용자 중 작가 객체의 공유 / 자신의 캐싱을 구현하거나 별도의 작가를 사용해야 진행 )
이벤트 파일 바이너리 표현이 변경되었습니다.
- TensorBoard 1.x는 이미 새로운 형식을 지원합니다. 이 차이는 이벤트 파일에서 요약 데이터를 수동으로 구문 분석하는 사용자에게만 영향을 줍니다.
- 요약 데이터는 이제 텐서 바이트로 저장됩니다. 당신이 사용할 수있는
tf.make_ndarray(event.summary.value[0].tensor)NumPy와로 변환
TensorFlow.org에서 보기
Google Colab에서 실행
GitHub에서 소스 보기
노트북 다운로드