7

가변 길이의 다 변수 시퀀스 분류 문제에서 RNN을 시도하고 있습니다.tensorflow에서 텐서에 저장된 입력 시퀀스를 반복하는 방법은 무엇입니까?

I 서열의 출력을 얻기 위해 다음 함수를 정의한

def get_sequence_output(x_sequence, initial_hidden_state): 
    previous_hidden_state = initial_hidden_state 
    for x_single in x_sequence: 
     hidden_state = gru_unit(previous_hidden_state, x_single) 
     previous_hidden_state = hidden_state 
    final_hidden_state = hidden_state 
    return final_hidden_state 

여기 x_sequence는 어디에 1 형상 (?, ?, 10)의 텐서 (즉 시퀀스로부터 최종 입력 후 RNN 전지의 출력이 공급된다)? 배치 크기와 초를위한 것입니까? 시퀀스 길이이고 각 입력 요소의 길이는 10입니다. gru 함수는 이전의 숨겨진 상태와 현재 입력을 가져 와서 다음 숨겨진 상태 (표준 게이트 반복 단위)를 만듭니다.

오류가 발생합니다. 'Tensor' object is not iterable. 시퀀스 방식으로 텐서를 반복하는 방법 (한 번에 하나의 요소 만 읽음)?

제 목표는 시퀀스의 모든 입력에 gru 함수를 적용하고 최종 숨김 상태를 얻는 것입니다.

답변

7

첫 번째 차원을 목록으로 변환하는 언팩 기능을 사용하여 텐서를 목록으로 변환 할 수 있습니다. 유사한 기능을하는 분할 기능도 있습니다. 내가 작업하고있는 RNN 모델에서 언 스택을 사용합니다. 이 경우 y를

y = tf.unstack(tf.transpose(y, (1, 0, 2))) 

난이 시간이 외형 단계하게 전치 한 다음, 텐서의리스트로 시간 간격 당 하나를 풀고 (BATCH_SIZE, TIME_STEPS 128) 형태로 시작. 이제는 y 목록의 모든 요소가 shape (BATCH_SIZE, 128) 인 경우이를 내 RNN에 공급할 수 있습니다.

+1

이 작동하지 않을 tf.stacktf.unstack로 변경된다. – Cospel

10

가 TF에서> = 1.0, tf.packtf.unpack는 time_steps가 (가변 길이의 서열)이 존재하지 않은 경우 각각

관련 문제