2

저는 사전 훈련 된 CNN 모델을 .pb 파일로 가지고 있습니다. 모델을로드하고 모든 이미지의 마지막 레이어에서 최종 벡터를 추출 할 수 있습니다. 이제 특정 레이어에서 오는 벡터를 추출하고 이미지의 최종본은 추출하지 않습니다. import_graph_def 함수를 사용하여 모델을로드하고 .pb 파일이 크고 열 수 없기 때문에 레이어 이름을 알 수 없습니다.Tensorflow : 미리 훈련 된 CNN의 특정 레이어에서 이미지 피쳐를 추출하려면 어떻게해야합니까?

내가 원하는 레이어까지 벡터를 얻기 위해 모델의 한 부분 만 실행하고 전체를 실행할 수 없습니까?

+0

시도해 볼 수있는 한 가지 방법은 tf.Graph.get_operations()를 사용하여 그래프의 노드 (작업) 목록을 가져 오는 것입니다. 그런 다음 노드 이름을 인쇄하고 원하는 노드 이름을 검색 할 수 있습니다. –

+0

대단히 감사합니다! 필자는 필요한 텐서를 반환하는 import_graph_def 함수를 사용하고 있습니다. 그 텐서를 인쇄하면 Tensor ("pool_3/_reshape : 0", shape = (1, 2048), dtype = float32)를 얻습니다. 이제 저는 "pool_3 : 0"과 shape = (1, 8, 8, 2048)이라는 이름으로 bottleneck_tensor를 얻고 싶습니다. 어떻게 텐서를 돌려 주어야합니까? – chrisrn

+0

스티븐 덕분에 문제가 해결되었습니다. – chrisrn

답변

3

Peter Hawkins가 언급 한 것 외에 tf.Graph.get_operations()를 주석에 사용하는 방법 중 하나는 tensorboard를 사용하여 추출하려는 레이어의 이름을 찾는 것입니다.

거기에서 당신은

graph.get_tensor_by_name("import/layer_name") 

원하는 기능 중 밖으로 추출하는 데 사용할 수 있습니다.

+0

나는 아직 tensorboard를 사용하지 않고 있지만 대단히 감사합니다! – chrisrn

+0

오, 당신이 나를 구 했어요. 나는 tensorboard를 사용해야한다고 생각했지만, 언급 한 명령 만 실행하면 원하는 텐서를 얻을 수 있습니다. 고맙습니다! – chrisrn

+0

문제 없습니다. 완료되면 해결 된 것으로 표시하십시오. 또한 tensor를 구할 수 있도록 필요한 계층의 이름을 알지 못한다고 언급했기 때문에 tensorboard에 대해서만 언급했습니다. 다행이야! – Steven

관련 문제