2016-06-16 6 views

답변

0

짧은 대답 : 그래프를 조정할 수는 없지만 원하는 것을 얻을 수있는 방법이있을 수 있습니다.

긴 답 : TensorFlow 그래프 개체는 구조적으로 변경 불가능합니다. 노드의 일부 측면 (예 : 노드에 유입되는 텐서의 모양)은 수정할 수 있지만 노드를 제거하거나 기존 노드 두 개 사이에 노드를 추가 할 수는 없습니다.

  1. 변경 사항 만 다음이 일을 아무 문제가 없습니다 추가 로 제한하는 경우 그러나, 같은 효과를 얻을 수있는 몇 가지 방법이 있습니다. 예를 들어, 네트워크 끝 부분에 레이어를 추가하려면 이동하십시오. 마찬가지로 마지막 두 번째 레이어를 입력으로 사용하고 기존 마지막 레이어를 무시하는 새 레이어를 추가하기 만하면 마지막 레이어를 "바꿀"수 있습니다. 그래프를 실행할 때 원래의 마지막 레이어의 출력을 묻지 않으면 TensorFlow는 결코 계산하지 않습니다.

  2. 수정이 필요한 경우, 한 가지 방법은 노드별로 그래프 노드 복사본을 천천히 작성하는 것입니다. 원본 그래프 정의를 읽은 다음 원본을 반복하고 새 복사본에 비슷한 노드를 추가하여 새로운 그래프를 만듭니다. 이것은 다소 지루하고 오류가 발생할 수 있습니다. 또한 ...

  3. ... 그래프를 "조정"할 필요가 없습니다. VGG-16 구현과 비슷한 것을 원하면 python code을 직접 해결하면됩니다. fc6 너비가 마음에 들지 않으세요? 그것을 생성하는 코드를 편집하십시오.

이것은 실제 문제를 제기합니다. 귀하의 목표는 네트워크를 수정하는 것입니다 가중치를 다시 사용할 수있게된다면, 2.와 3.는 작동하지 않을 것입니다. 현실적으로 이것은 많은 경우에 가능하지 않습니다. 예를 들어, VGG-16 중간에 레이어를 추가하거나 제거하려는 경우 (예 : 다른 길쌈 레이어 추가), 사전 트레이닝 된 가중치는 더 이상 유효하지 않습니다. 변경 사항의 업스트림 인 사전 훈련 된 가중치를 복구 할 수 있지만 다운 스트림의 모든 항목은 기본적으로 잘못 될 수 있습니다. 그래도 네트워크를 재교육해야합니다. (사전 훈련 된 네트워크를 초기화로 사용할 수는 있지만 재 훈련해야합니다.) 네트워크에 추가하는 경우 (1. 에서처럼)에도 네트워크를 조정해야합니다.

0

고마워요! 그래프를 다시 생성 한 다음 그래프 정의 값을 가져와 모든 단일 가중치를로드했습니다.

이것은 graph.get_tensor_by_name에 의해 수행되었다 ('가져 오기/...') ... 이론적으로 질문에 대답 수있는 체중이 하다니

https://www.tensorflow.org/versions/r0.9/how_tos/tool_developers/index.html

+0

의 이름입니다, [그것은 것 preferred] (// meta.stackoverflow.com/q/8259) 여기에 답변의 핵심 부분을 포함하고 참조 용 링크를 제공하십시오. – manetsus

관련 문제