2016-12-29 2 views
0

tensorflow의 dynamic_rnn 함수에서 출력 모양에 놀랐으며 누군가 RNN 셀에 대한 이해를 높이기를 바랍니다. 예를 들어tensorflow가있는 다중 차원 동적 rnn

입력으로 정의되는 경우 :

seq_size = 5 input_dim = 2. (즉, 두 개의 시계열) 및 (110)가 배치 크기
x = tf.placeholder(tf.float32, [110, seq_size, input_dim]) 

; 셀은 다음과 같이 정의된다

cell = rnn_cell.BasicLSTMCell(hidden_dim) 

여기서 hidden_dim =

I는 dynamic_rnn에게

outputs, states = rnn.dynamic_rnn(cell, x, dtype=tf.float32) 

을 생성하고 [110 5 6]는 출력의 크기를 확인 6. 이러한 차원은 seq_size by hidden_dim의 일괄 처리 크기입니다.

질문 :

1 : 이러한 치수는 시계열 시간 스텝 당 6 개 숨겨진 노드 30 개 숨겨진 노드 (X 6 5)보다는 6 숨겨진 노드 합계 총있다 의미한다. 이것이 올바른 해석입니까?

2 : 입력 시퀀스가 ​​5 x 2 (각 시퀀스와 2 개의 시퀀스에서 5 단계)이므로 각 시간 단계에서 텐서 흐름이 입력을 숨겨진 노드에 연결하는 방법은 무엇입니까? tensorflow는 각 숨겨진 셀 앞에 2 개의 입력, 12 개의 가중치 및 6 개의 편향을 가진 완전히 연결된 그래프로 가정합니까? 또는 다른 것?

+0

질문 1 : 시퀀스 당 5 개의 숨겨진 노드가 있으며 각 숨겨진 노드는 하나의 입력/단어에 해당합니다. 질문 2 : 각 입력은 2 차원 공간의 벡터입니다 (예를 들어). –

+0

1 번에 대한 대답을 이해하지 못했습니다. 원래는 각 단어/입력에 해당하는 하나의 숨겨진 노드가있을 것이라고 생각했지만, 위 출력의 크기는 그렇지 않은 것으로 보입니다. 위의 예에서 각 배치 요소에는 [1 5 6]이 있으므로 30 개의 출력이 있습니다. 또한 숨겨진 노드의 수는 Cell의 독립 변수입니다 (예 : https://github.com/aymericdamien/TensorFlow-Examples/blob/master/notebooks/3_NeuralNetworks/recurrent_network.ipynb). – Kemp

+0

[1 5 6]은 5 개의 출력이 있고 각 출력은 6 차원 벡터임을 의미합니다. 5 개의 입력을 의미하는 [1 5 2]를 제공했으며 각 입력은 2 차원 벡터입니다. –

답변

1

시퀀스를 문장으로, 입력을 단어로 생각할 수 있습니다. 시퀀스 길이는 문장 내의 단어 수이며, LSTM에서 숨겨진 노드의 수이기도합니다. 각 입력/단어는 입력을 하나의 출력으로 매핑하는 하나의 숨겨진 노드에 해당합니다. 이것이 출력의 수가 seq_size (5) 인 이유입니다.

단어는 치수가 input_dim 인 다차원 공간에 배치 된 벡터입니다. LSTM에서 단어는이 입력 공간에서 차원 수가 hidden_dim 인 높은 차원 공간으로 매핑됩니다. 이것이 각 출력의 크기가 hidden_dim (6) 인 이유입니다.

신기원은이 토론과 관련이없는 개념이라고 생각합니다. 참조하십시오 The meaning of batch_size in ptb_word_lm (LSTM model of tensorflow)

+0

질문이보다 명확하게 업데이트되었습니다.나는이 특정 문항에서 "단어가이 입력 공간에서 더 높은 차원 공간으로 매핑된다"라는 나의 구체적인 질문을 가정합니다. 매핑은 어떻게 수행됩니까? 내 단어가 실제 N-D 공간에 있다면, 각 차원은 어떻게 고차원 공간 (숨겨진 공간)에 매핑됩니까? – Kemp

+0

weight_matrix의 크기가 input_dim x output_dim 인 weight_matrix에 input_vector를 곱하여 차원이 확장됩니다. –

+0

또한, 링크를 보면, 나는 tensorflow를 볼 때 과부하 용어로 신기원을 사용하고 있다는 것을 깨달았습니다. 위의 질문에서 Epoch는 일괄 처리에 대한 패스의 전통적인 텐 토류 플로우 사용보다는 여러 시간 계열 (시간의 인스턴스, 즉 seq_size의 인스턴스)에서 특정 입력 행으로 사용됩니다. – Kemp