2016-06-03 5 views
4

TensorFlow 노드의 일부가 일부 글로벌 정보 (주로 변수 및 요약)를 저장하는 동안 프로그램을 작성해야하지만 다른 부분은 프로그램 실행 중에 변경/재구성해야합니다.TensorFlow 그래프에서 노드를 제거하는 방법은 무엇입니까?

내가 지금하는 방법은 모든 반복마다 전체 그래프를 재구성하는 것입니다. 그런 다음 각 반복에서 검사 점 파일이나 numpy 배열을 수동으로 저장하고로드해야하므로 코드가 복잡해지고 오류가 발생하기 쉽습니다.

전체 그래프를 다시 설정하는 대신 계산 그래프의 일부를 제거/수정하는 방법이 있는지 궁금합니다.

+1

TensorFlow 그래프의 구조는 생성 후에 수정할 수 없습니다. 속성은 어느 정도까지는 가능하지만 여기서 충분하지는 않습니다. 해결 방법이 있지만 시나리오에서 어떤 것이 작동하는지 알기는 어렵습니다. 우리가하려는 일에 대해 좀 더 자세한 정보를 주시겠습니까? – rdadolf

+0

물론, 재귀 신경망을 구현하려고하고 있으며 트리 구조가 다른 샘플에 따라 달라집니다. –

+0

모든 가능한 트리 구조가 그래프로 인코딩되고 조건문을 사용하여 각 반복에서 평가할 가장자리를 결정할 수 있도록 설정할 수 있는지 궁금합니다. – Aaron

답변

5

TensorFlow 그래프의 구조를 변경하는 것은 실제로 불가능합니다. 특히 그래프에서 노드를 제거하는 명확한 방법이 없기 때문에 하위 그래프를 제거하고 다른 그래프를 추가하는 것은 실용적이지 않습니다. (나는 이것을 시도하고 내부에 수술을 포함하고 궁극적으로 그것이 가치있는 것보다 더 노력하며 유지 보수에 어려움을 겪고 있습니다.)

몇 가지 해결 방법이 있습니다.

귀하의 재구성 중 하나입니다. 당신은이 방법에 대해 꽤 잘 알고있는 것처럼 보이기 때문에, 나는 그것에 대해 하프하지 않을 것이다. 그러나 이것에 걸려 넘어지는 다른 누군가의 이익을 위해, 매우 유사한 방법은 그래프의 필터링 된 깊은 사본이다. 즉, 요소를 반복하고 조건을 추가하여 요소를 추가합니다. 이것은 그래프가 주어진 경우 (즉, 처음에 그래프를 작성한 기능이없는 경우) 또는 변경 사항이 아주 미미한 경우에 가장 유용합니다. 여전히 그래프를 다시 작성하는 댓가를 지불하지만 때로는로드 및 저장이 투명해질 수 있습니다. 귀하의 시나리오를 감안할 때 이것은 아마도 좋은 일치는 아닙니다.

또 다른 옵션은 데이터 흐름 동작에 의존하여 평가하려는 모든 가능한 그래프의 수퍼 세트로 문제를 다시 채우는 것입니다. 즉, 입력하는 모든 유형의 입력을 포함하는 그래프를 작성하고 필요한 출력 만 요구하십시오. 네트워크가 매개 변수를 사용하고있는 경우 (예 : 너비 또는 레이어 만 늘리거나 줄이는 경우), 변경 사항이 미미한 경우 (입력 포함/제외), 작업에서 다양한 입력 (차원, 예를 들어). 당신의 경우, 나무 구조의 수가 한정되어 있다면, 이것은 잘 작동 할 수 있습니다. 전역 정보에 대해 집계 또는 재 정규화를 추가하기 만하면됩니다.

세 번째 옵션은 네트워크를 물리적으로 분리 된 것으로 처리하는 것입니다. 따라서 변경 가능한 구성 요소가있는 하나의 네트워크를 생각하는 대신 고정 된 부분과 변경되는 부분 사이의 경계는 두 개의 별도 네트워크의 입력과 출력입니다. 이는 몇 가지 일을 더 어렵게 만듭니다. 예를 들어 두 가지 모두에 걸친 역설은 이제 추한 것입니다 (이것은 당신에게 문제가 될 수있는 것처럼 들립니다). 하지만이를 피할 수 있다면 두 개의 네트워크가 잘 작동 할 수 있습니다. 그것은 이미 많은 편견에 빠져있는 별도의 사전 훈련 단계를 다루는 것과 같은 느낌을줍니다.

이러한 대안의 대부분은 작동하는 상당히 좁은 범위의 문제가 있으므로 귀하의 경우 도움이되지 않을 수 있습니다. 즉, 당신은 모든 것을 가야 할 필요가 없습니다. 네트워크를 부분적으로 분할하거나 일부 변경 사항에 대한 수퍼 그래프를 작성하는 경우 몇 가지 경우에 대해 저장/복원 만하면되므로 문제가 쉽게 해결 될 수 있습니다.

희망이 도움이됩니다.

+0

안녕하세요, 답변 해 주셔서 감사합니다. 내가하고있는 일은 나무 구조가 문장의 구문 트리에 의해 결정되는 NLP 작업입니다. 즉, 나무 구조의 가능성은 무제한이어서 첫 번째와 두 번째 방법은 실제로 작동하지 않는 것 같습니다. 그렇지 않습니까? 그리고 BTW, 재구성하는 방법에 대해 이전에 작성한 그래프가 제대로 가비지 수집 될지 궁금해했습니다. 감사 –

관련 문제