-
텐서플로우 홈페이지를 보고 공부한 내용용
텐서플로우 서빙이란?
-텐서플로우 머신런닝 모델을 운영환경으로 배포하는 것을 도와주는것으로써 구글에서 런칭함
-쉽게 말해 모델을 운영환경에서 사용할 수 있도록 도와준다.
-사용자로부터의 입력을 모델에 반영하기위해 서빙api를 이용할 수 있다.
학습기에서 훈련데이터를 공급하여 모델을 생성하고 검증하여 텐서플로우 서빙 시스템에 배포
SavedModelBuilder모듈을 사용하여 모델을 내보낸다. ( 스냅샷을 저장소에 저장하여 로드할 수 있게 하는 것 )
from tensorflow.python.saved_model import builder as saved_model_builder
빌더에 필요한 라이브러리를 import 한다.
export_path_base = sys.argv[-1]
export_path = os.path.join(
compat.as_bytes(export_path_base),
compat.as_bytes(str(FLAGS.model_version)))스냅샷을 저장할 경로를 설정한다. 여기서 FLAGS는 모델의 훈련 횟수나 버전 train.py가 위치한 디렉토리를 지정한것이다. 자세한 내용은 mnist.py 참조
이렇게 지정하면 파일명.py [--training_iteration=x] [--model_version=y] export_dir 이렇게 사용할 수 있다
tf.app.flags.DEFINE_integer('training_iteration',1000,'number of training iterations.')
tf.app.flags.DEFINE._integer('model_version',1,'version number of the model.')
tf.app.flags.DEFINE._string('work_dir','/tmp','Working directory')
FLAGS = tf.app.flags.FLAGS
**나는 경로지정과 버전을 이렇게 지정해줬다.
model_version = 1
path = os.path.join("modelTaxi", str(model_version))
builder = tf.saved_model.builder.SavedModelBuilder(path)
경로를 설정하고 나면 모델을 해당 경로에 저장한다
builder = saved_model_builder.SavedModelBuilder(export_path)
그다음에 저장할때 metaGraph와 variables에 대해 넘겨주는데,
-sess : 말그대로 내보내기 위해 훈련 된 모델을 가지고잇는 텐서의 세션이다.
-tags : 메타그래프를 저장할 태그 세트이다. serve에 미리 정의되어있는 상수태그를 이용
-signature_def_map : 메타 그래프에 추가 할 tensorflow ::SignatureDef 에 대한 서명에 대한 사용자 제공 키의 맵을 지정한다고 한다
보통 여기서 이제 사용자가 모델에 입력할 값에대한 매핑정보와 그리고 출력으로 나온 값에 대한 매핑 정보를 담는다
-"serving_default"로 키를 지정하여 모델을 내보내면 기본 서명을 지정한다. : 일전에 테스트 모델에서 이것에 대한 오류를 다뤘던 것 같다.
그래서 이때 사용을 이런식으로 하였었다.↓↓
"serving_default": tf.saved_model.signature_def_utils.predict_signature_def(
inputs= {"egg": x, "bacon": y},
outputs= {"spam": z})
-서명을 쉽게 작성하기 위하여 signature_def_utils.build_signature_def() 을 이용하여 아래에 있는 세 구문을 한번에 할 수 있다.
(위의 코드와 아래의 코드 비교)
(A)
prediction_signature,
signature_constants.DEFAULT_SERVING_SIGNATURE_DEF_KEY:
classification_signature
만약에 문서에 나와있는데로(A)를 사용하려면
classfication_signature의 인자로
-inputs={'images':tensor_info_x}
-outputs={'scores':tensor_info_y}
(values를 플레이스 홀더 변수명과 일치시켜야한다)
를 넘겨주어야한다.
마지막으로 legacy_init_op는 변수초기화 시켜주는 작업이다
legacy_init_op = tf.group (tf.tables_initializer (), name = ' legacy_init_op ' )
이렇게 정의해주면 된다.
**나는 이렇게도 그냥 초기화를 바로해서 했었다.
with tf.Session() as sess:
sess.run(tf.global_variables_initializer())
builder.add_meta_graph_and_variables(
sess, [tag_constants.SERVING],
signature_def_map={
'predict_images':
prediction_signature,
signature_constants.DEFAULT_SERVING_SIGNATURE_DEF_KEY:
classification_signature,
},
legacy_init_op=legacy_init_op)'2017년 > machine learning' 카테고리의 다른 글
깨닳음의 시간..ml engine api를 다시보자 (0) 2017.09.12 ml엔진 공부 (0) 2017.09.11 텐서플로우의 그래프,세션,자료형 (0) 2017.09.02 분류 알고리즘 KNN , 로지스틱회귀에 대한 고찰 (0) 2017.08.28 머신런닝에관해 좋은글 (0) 2017.08.21