작성
·
814
0
답변 1
0
안녕하십니까,
tensorflow의 경우 학습이 된 모델을 저장할 때 protobuf 타입(확장자 pb)으로 저장할 수 있습니다.
이렇게 저장된 protobuf 모델은 weight값과 Graph형태의 딥러닝 모델(예를 들어 resnet50 모델, tensorflow는 operation과 tensor, layer들을 모두 계산 graph형태로 가집니다)을 같이 가지고 있습니다.
위의 코드는 이렇게 저장된 protobuf형태의 frozen graph(더 이상 gradient 학습을 허용하지 않는 weight와 모델구조)를 다시 tensorflow를 통해 Load하고 이를 이용해서 inference를 수행하는 어느정도 정형화(?)된 코드 입니다. 즉 pb 파일로 저장된 모델을 tensorflow의 CNN구조 모델로 다시 메모리 load하기 위한 코드입니다(tensorflow는 평범한 로직도 개발자에게 늘 많은 타이핑을 요구합니다. ^^;;)
1. rb는 이 protobuf 형태로 저장된 모델을 binary 타입 read로 읽고자 함입니다.
2. 다음 새로운(비어있는) Graph를 만들고, probuf를 parsing하면서 이 Graph를 채워넣습니다.
graph_def = tf.GraphDef()
graph_def.ParseFromString(f.read())
3. 이후에 tf.import_graph_def(graph_def, name='') 를 이용하여 tensorflow 모델로 로딩합니다.
아래 한글 문서도 참조 하시면 좋을 것 같습니다.
https://tensorflowkorea.gitbooks.io/tensorflow-kr/content/g3doc/how_tos/tool_developers/
감사합니다.