`Keras`의`Dense`와`TimeDistributedDense`의 차이점


34

난 아직도 사이의 차이에 대해 혼란 스러워요 DenseTimeDistributedDenseKeras이미 이와 유사한 질문도있다하더라도 여기여기 . 사람들은 많이 논의하고 있지만 일반적으로 합의 된 결론은 없습니다.

그리고 비록, 여기 , 밝혔다 @fchollet :

TimeDistributedDenseDense3D 텐서의 모든 타임 스텝에 동일한 (완전히 연결된) 작업을 적용합니다 .

나는 여전히 그들 사이의 차이점에 대한 자세한 그림이 필요합니다.

답변:


41

Keras 의 레이어에 공급하려는 개의 행과 개의 열이있는 시계열 데이터가 있다고 가정 합니다. 이를 RNN에 공급하기 전에 이전 데이터를 3D 텐서로 재구성해야합니다. 따라서 그것은 됩니다.N700SimpleRNN(200, return_sequence=True)N×700×1

풀린 RNN

이미지는 https://colah.github.io/posts/2015-08-Understanding-LSTM 에서 가져옵니다.

RNN에서 열 ( "700 열")은 RNN의 시간 단계입니다. 데이터는 까지 처리됩니다 . RNN에 데이터를 공급 한 후, 이제 (700 개)의 출력이 에 하지 에 . 이제 데이터의 형태 는 샘플 (행) x 타임 스텝 (열) x 채널 인 입니다 .t=1 to 700h1h700h1h200N×700×200

당신이를 적용 할 때 그리고, TimeDistributedDense당신이 적용하고 Dense당신이 적용하고 의미, 각 시간 단계에 레이어를 Dense각 레이어를 , , ..., 각각. 즉, 실제로는 에서 까지 각 채널 ( "200")에 각각 완전히 연결된 작업을 적용하고 있습니다. 700 번째 " "까지 첫 번째 " "h1h2hth1h7001×1×2001×1×200

왜 이러는거야? RNN 출력을 평평하게하고 싶지 않기 때문입니다.

RNN 출력을 평탄화하지 않는 이유는 무엇입니까? 각 타임 스텝 값을 별도로 유지하려고하기 때문입니다.

각 타임 스텝 값을 별도로 유지해야하는 이유는 무엇입니까? 때문에:

  • 당신은 자신의 시간 간격 사이의 값을 상호 작용하고 싶습니다
  • 서로 다른 타임 스텝과 채널간에 임의의 상호 작용을 원하지 않습니다.

그런 다음 TimeDistributedDense를 적용하면 각 타임 스텝마다 짙은 레이어를 적용합니다.-> 이는 각 타임 스텝이 짙은 레이어의 가중치를 공유한다는 의미입니까? 고밀도 레이어를 사용하면 마지막 단계에만 적용되지 않습니까?
o0omycomputero0o

2
Blog.keras.io/…의 Keras 예제에서 TimeDistributedDense가 사용되지 않는 이유는 무엇 입니까?
user1934212

TimeDistributedDense는 이미 더 이상 사용되지 않습니다. Keras 2.0 이후, 조밀 잘> 2 차원 텐서를 처리 할 수
rilut
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.