2017-04-17 2 views
1

나는 tensorflow에서 제공 한 dynamic_rnn과 비슷한 rnn을 코딩하고 있습니다. GitHub에서 코드를 보려고했지만 구현 한 방법을 이해할 수 없습니다. 나는 처음부터 다시 빌드하여 내부에서 rnn을 사용자 정의 할 수 있습니다. 그렇게하는 방법?tensorflow에서 처음부터 dynamic_rnn을 빌드하십시오.

현재 나의 접근법은 잘린 시계열을 텐서로 생각하고 tf.scan()을 사용하여 모든 시계열에 대해 새로운 숨겨진 상태를 찾습니다. 그런 다음 tf.map_fn을 사용하여 새로운 스택 숨겨진 변수에 대한 출력을 찾으십시오. 마지막으로, tf.while_loop()을 사용하여 스택 된 출력의 첫 번째 차원에서 각 텐서에 대한 오류를 찾고 해당 손실로 역 전파합니다.

이렇게하면 그래프가 동적이됩니다. 나는 먼저 5 번 풀린 후 4 번 풀려 진다고 말하면 그래프가 한 노드가 이전에 지운 것을 지울 것입니까?

이 방법이 유용할까요?

안내하십시오.

답변

0

RNNs는 하나의 루프 구현 가능해야합니다, 감사 (scan/map_fn/등. 모두 하나 이상의 TensorArray들과 while_loop을 기반으로) 상태를 통과 한 모든 손실을 계산한다. 이러한 구조의 한 가지 장점은 그래프가 고정 크기이지만 반복 횟수가 다를 수 있다는 것입니다 (또는 그래프 크기를 늘리지 않고도 매우 커질 수 있음).

그러나 가변 길이 시퀀스를 반복하면 일반적으로 성능을 극대화 할 수 없습니다. 일반적으로 CPU에서 SIMD 명령어를 사용하거나 GPU에서 병렬 처리를 수행하려면 적어도 일부 배치 작업이 필요합니다.이 경우 시퀀스를 잘라서이 세그먼트들을 함께 배치하는 것이 좋습니다. SequenceQueueingStateSaver과 같은 도구를 사용하면 많은 가변 길이 시퀀스에서 고정 크기의 배치를 생성 할 수 있습니다.

관련 문제