Sự khác biệt giữa `Dense` và` TimeDistributionDense` của` Keras`


34

Tôi vẫn nhầm lẫn về sự khác biệt giữa DenseTimeDistributedDensecác Kerasmặc dù có một số câu hỏi tương tự đã được hỏi ở đâyở đây . Mọi người đang thảo luận rất nhiều nhưng không có kết luận thống nhất chung.

Và mặc dù, ở đây , @fchollet đã tuyên bố rằng:

TimeDistributedDenseáp dụng cùng một Densehoạt động (được kết nối đầy đủ) cho mọi dấu thời gian của một tenxơ 3D.

Tôi vẫn cần minh họa chi tiết về chính xác sự khác biệt giữa chúng.

Câu trả lời:


41

Giả sử bạn có dữ liệu chuỗi thời gian với hàng và 700 cột mà bạn muốn cung cấp cho một lớp trong Keras. Trước khi bạn cung cấp dữ liệu đó cho RNN, bạn cần định hình lại dữ liệu trước đó thành thang đo 3D. Vì vậy, nó trở thành một NN700SimpleRNN(200, return_sequence=True) .N×700×1

RNN không được kiểm soát

Hình ảnh được lấy từ https://colah.github.io/posts/2015-08-Under Hiểu-LSTMs

Trong RNN, các cột của bạn ("700 cột") là dấu thời gian của RNN. Dữ liệu của bạn được xử lý từ . Sau khi cung cấp dữ liệu cho RNN, bây giờ nó có 700 đầu ra là h 1 đến h 700 , không phải h 1 đến h 200t= =1 to 700h1h700h1h200 . Hãy nhớ rằng bây giờ hình dạng của dữ liệu của bạn là , đó làN×700×200 các mẫu (các hàng) x dấu thời gian (các cột) x kênh .

Và sau đó, khi bạn áp dụng a TimeDistributedDense, bạn đang áp dụng một Denselớp trên mỗi dấu thời gian, có nghĩa là bạn đang áp dụng một Denselớp trên mỗi , h 2 , ..., h t tương ứng. Điều đó có nghĩa là: thực sự bạn đang áp dụng thao tác được kết nối đầy đủ trên mỗi kênh của nó ("200" một) tương ứng, từ h 1 đến h 700 . " 1 × 1 × 200 " đầu tiên cho đến lần thứ 700 " 1 × 1 × 200h1h2hth1h7001×1×2001×1×200 ".

Tại sao chúng ta lại làm việc này? Bởi vì bạn không muốn làm phẳng đầu ra RNN.

Tại sao không làm phẳng đầu ra RNN? Bởi vì bạn muốn giữ riêng từng giá trị dấu thời gian.

Tại sao giữ cho mỗi giá trị dấu thời gian riêng biệt? Bởi vì:

  • bạn chỉ muốn tương tác các giá trị giữa dấu thời gian của chính nó
  • bạn không muốn có sự tương tác ngẫu nhiên giữa các dấu thời gian và kênh khác nhau.

Và sau đó, khi bạn áp dụng TimeDistributionDense, bạn đang áp dụng một lớp Mật độ trên mỗi dấu thời gian -> Điều này có nghĩa là mỗi dấu thời gian chia sẻ trọng lượng của lớp Mật độ? Với lớp Dense không, nó chỉ áp dụng cho dấu thời gian cuối cùng?
o0omycomputero0o

2
Tại sao TimeDistributionDense không được sử dụng trong ví dụ Keras tại blog.keras.io/ ,?
dùng1934212

Bởi vì TimeDistributionDense đã không còn dùng nữa. Kể từ Keras 2.0, Dense có thể xử lý tốt> tenxơ 2 chiều
rilut
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.