이 페이지는 Cloud Translation API를 통해 번역되었습니다.
Switch to English

TensorFlow Hub를 사용하여 TF1에서 TF2로 마이그레이션

이 페이지에서는 TensorFlow 코드를 TensorFlow 1에서 TensorFlow 2로 마이그레이션하는 동안 TensorFlow Hub를 계속 사용하는 방법에 대해 설명합니다.이 문서는 TensorFlow의 일반 마이그레이션 안내서를 보완합니다.

TF2의 경우, TF Hub는 tf.compat.v1.Graph 처럼 tf.contrib.v1.layers 를 빌드하기 위해 레거시 허브에서 hub.Module API를 전환했습니다. 대신, tf.keras.Model (일반적으로 TF2의 새로운 eager 실행 환경에서 )을 빌드하기 위해 다른 hub.KerasLayer 레이어와 함께 사용할 수있는 tf.keras.Model 와 저수준 TensorFlow 코드를위한 기본 hub.load() 메소드가 있습니다.

hub.Module API는 TF1 및 TF2의 TF1 호환성 모드에서 사용하기 위해 tensorflow_hub 라이브러리에서 계속 사용 가능합니다. TF1 Hub 형식의 모델 만로드 할 수 있습니다.

hub.load()hub.KerasLayer 의 새 API는 TensorFlow 1.15 (열심하고 그래프 모드에서) 및 TensorFlow 2에서 작동합니다.이 새 API는 새 TF2 SavedModel 자산을로드 할 수 있으며 모델 에 제한이 있습니다. 호환성 가이드 , TF1 Hub 형식의 레거시 모델.

일반적으로 가능하면 새 API를 사용하는 것이 좋습니다.

새로운 API 요약

hub.load() 는 TensorFlow Hub (또는 호환 서비스)에서 SavedModel을로드하는 새로운 저수준 함수입니다. TF2의 tf.saved_model.load() 래핑합니다. TensorFlow의 저장된 모델 안내서 는 결과로 수행 할 수있는 작업을 설명합니다.

 m = hub.load(handle)
outputs = m(inputs)
 

hub.KerasLayer 클래스는 hub.load() 호출하고 다른 Keras 레이어와 함께 hub.load() 에서 사용할 수 있도록 결과를 조정합니다. (다른 방법으로 사용되는 저장된 SavedModel의 편리한 래퍼 일 수도 있습니다.)

 model = tf.keras.Sequential([
    hub.KerasLayer(handle),
    ...])
 

많은 튜토리얼에서 이러한 API의 실제 작동 모습을 보여줍니다. 특히 참조

Estimator 교육에서 새로운 API 사용

당신이 (원격 장치에 배치 변수와 TF1 세션에서 다른 나) 매개 변수 서버와 교육에 대한 견적에 TF2 SavedModel를 사용하는 경우, 당신은 설정에 필요한 experimental.share_cluster_devices_in_session tf.Session의 ConfigProto에, 그렇지 않으면 오류가 발생합니다 "지정된 장치 '/ job : ps / replica : 0 / task : 0 / device : CPU : 0'과 (와) 일치하는 장치가 없습니다."

필요한 옵션은 다음과 같이 설정할 수 있습니다

 session_config = tf.compat.v1.ConfigProto()
session_config.experimental.share_cluster_devices_in_session = True
run_config = tf.estimator.RunConfig(..., session_config=session_config)
estimator = tf.estimator.Estimator(..., config=run_config)
 

TF2.2부터는이 옵션이 더 이상 실험적이지 않으며 .experimental 부분을 ​​삭제할 수 있습니다.

TF1 Hub 형식으로 레거시 모델로드

새 TF2 SavedModel을 아직 사용 사례에 사용할 수 없으므로 레거시 모델을 TF1 허브 형식으로로드해야 할 수 있습니다. tensorflow_hub 릴리스 0.7부터는 아래와 같이 TF1 Hub 형식의 레거시 모델을 hub.KerasLayer 와 함께 사용할 수 있습니다.

 m = hub.KerasLayer(handle)
tensor_out = m(tensor_in)
 

또한 KerasLayer 는 TF1 Hub 형식 및 레거시 SavedModels에서 레거시 모델을보다 구체적으로 사용하기 위해 tags , signature , output_keysignature_outputs_as_dict 를 지정하는 기능을 제공합니다.

TF1 Hub 형식 호환성에 대한 자세한 내용은 모델 호환성 안내서를 참조하십시오.

하위 레벨 API 사용

레거시 TF1 Hub 형식 모델은 tf.saved_model.load 를 통해로드 할 수 있습니다. 대신에

 # DEPRECATED: TensorFlow 1
m = hub.Module(handle, tags={"foo", "bar"})
tensors_out_dict = m(dict(x1=..., x2=...), signature="sig", as_dict=True)
 

다음을 사용하는 것이 좋습니다.

 # TensorFlow 2
m = hub.load(path, tags={"foo", "bar"})
tensors_out_dict = m.signatures["sig"](x1=..., x2=...)
 

이 예제에서 m.signatures 는 서명 이름으로 키가 지정된 TensorFlow 콘크리트 함수의 기준 입니다. 이러한 함수를 호출하면 사용하지 않더라도 모든 출력을 계산합니다. (이것은 TF1의 그래프 모드의 게으른 평가와 다릅니다.)