Ryan의 VGG 변환 된 텐서 흐름 모델을 사용하고 싶습니다.기존 Tensorflow 그래프 (VGG) 조정
https://github.com/ry/tensorflow-vgg16
지금 내가 레이어를 조정하고 다른 레이어를 추가하거나 완전히 연결 레이어를 변경하고 싶습니다. 그러나 graphDef에서 단일 레이어/가중치를 얻는 방법이나 그래프를 조정하는 방법을 모르겠습니다.
Ryan의 VGG 변환 된 텐서 흐름 모델을 사용하고 싶습니다.기존 Tensorflow 그래프 (VGG) 조정
https://github.com/ry/tensorflow-vgg16
지금 내가 레이어를 조정하고 다른 레이어를 추가하거나 완전히 연결 레이어를 변경하고 싶습니다. 그러나 graphDef에서 단일 레이어/가중치를 얻는 방법이나 그래프를 조정하는 방법을 모르겠습니다.
짧은 대답 : 그래프를 조정할 수는 없지만 원하는 것을 얻을 수있는 방법이있을 수 있습니다.
긴 답 : TensorFlow 그래프 개체는 구조적으로 변경 불가능합니다. 노드의 일부 측면 (예 : 노드에 유입되는 텐서의 모양)은 수정할 수 있지만 노드를 제거하거나 기존 노드 두 개 사이에 노드를 추가 할 수는 없습니다.
변경 사항 만 다음이 일을 아무 문제가 없습니다 추가 로 제한하는 경우 그러나, 같은 효과를 얻을 수있는 몇 가지 방법이 있습니다. 예를 들어, 네트워크 끝 부분에 레이어를 추가하려면 이동하십시오. 마찬가지로 마지막 두 번째 레이어를 입력으로 사용하고 기존 마지막 레이어를 무시하는 새 레이어를 추가하기 만하면 마지막 레이어를 "바꿀"수 있습니다. 그래프를 실행할 때 원래의 마지막 레이어의 출력을 묻지 않으면 TensorFlow는 결코 계산하지 않습니다.
수정이 필요한 경우, 한 가지 방법은 노드별로 그래프 노드 복사본을 천천히 작성하는 것입니다. 원본 그래프 정의를 읽은 다음 원본을 반복하고 새 복사본에 비슷한 노드를 추가하여 새로운 그래프를 만듭니다. 이것은 다소 지루하고 오류가 발생할 수 있습니다. 또한 ...
... 그래프를 "조정"할 필요가 없습니다. VGG-16 구현과 비슷한 것을 원하면 python code을 직접 해결하면됩니다. fc6 너비가 마음에 들지 않으세요? 그것을 생성하는 코드를 편집하십시오.
이것은 실제 문제를 제기합니다. 귀하의 목표는 네트워크를 수정하는 것입니다 과 가중치를 다시 사용할 수있게된다면, 2.와 3.는 작동하지 않을 것입니다. 현실적으로 이것은 많은 경우에 가능하지 않습니다. 예를 들어, VGG-16 중간에 레이어를 추가하거나 제거하려는 경우 (예 : 다른 길쌈 레이어 추가), 사전 트레이닝 된 가중치는 더 이상 유효하지 않습니다. 변경 사항의 업스트림 인 사전 훈련 된 가중치를 복구 할 수 있지만 다운 스트림의 모든 항목은 기본적으로 잘못 될 수 있습니다. 그래도 네트워크를 재교육해야합니다. (사전 훈련 된 네트워크를 초기화로 사용할 수는 있지만 재 훈련해야합니다.) 네트워크에 추가하는 경우 (1. 에서처럼)에도 네트워크를 조정해야합니다.
고마워요! 그래프를 다시 생성 한 다음 그래프 정의 값을 가져와 모든 단일 가중치를로드했습니다.
이것은 graph.get_tensor_by_name에 의해 수행되었다 ('가져 오기/...') ... 이론적으로 질문에 대답 수있는 체중이 하다니
https://www.tensorflow.org/versions/r0.9/how_tos/tool_developers/index.html
의 이름입니다, [그것은 것 preferred] (// meta.stackoverflow.com/q/8259) 여기에 답변의 핵심 부분을 포함하고 참조 용 링크를 제공하십시오. – manetsus