Thứ nguyên thứ hai của đầu vào của bạn là số lần mạng bị vô hiệu hóa cho các độ dốc của máy tính theo thuật toán BPTT.
Ý tưởng là mạng lặp lại (như LSTM) được chuyển đổi thành mạng feedforward bằng cách "bỏ chọn" mỗi bước thời gian làm lớp mới của mạng.
Khi bạn cung cấp toàn bộ chuỗi thời gian cùng nhau (nghĩa là 25000 bước thời gian), bạn sẽ hủy mạng của mình 25000 lần, tức là bạn sẽ nhận được mạng nguồn cấp dữ liệu chưa được kiểm soát với 25000 lớp !!
Vì vậy, mặc dù tôi không biết tại sao bạn không nhận được bất kỳ lỗi nào, vấn đề có thể liên quan đến vấn đề OUT OF MEMORY. Bạn không thể phù hợp với 25000 lớp 'biến vào bộ nhớ.
Khi bạn phải xử lý chuỗi thời gian dài, bạn cần chia dữ liệu của mình thành nhiều phần (cho phép nói 20 bước thời gian). Bạn cung cấp một đoạn duy nhất cho mỗi lần chạy. Sau đó, tại mỗi lần chạy sau, bạn cần khôi phục trạng thái ban đầu của mạng với trạng thái cuối cùng của lần chạy trước đó.
Tôi có thể cung cấp cho bạn một ví dụ. Những gì bạn có bây giờ (tôi bỏ qua chiều thứ ba vì những lý do thực tế) là một 4x25000 vector được định hình một cái gì đó như thế này:
--------------------- 25000----------------------
|
|
4
|
|
--------------------------------------------------
Bây giờ bạn phải chia nó thành những phần như thế này:
----20----- ----20----- ----20-----
| | | | | |
| | | | | |
4 | 4 | 4 | [...]
| | | | | |
| | | | | |
----------- ----------- -----------
Bạn cung cấp một chunck duy nhất 4x20 mỗi lần. Sau đó, trạng thái cuối cùng của LSTM của bạn sau mỗi chuck, phải được cung cấp như đầu vào với chuck tiếp theo.
Vì vậy, bạn feed_dict
phải một cái gì đó như thế này:
feed_dict ={x: input_4_20},
state.c = previous_state.c,
state.h=previous_state.h}
Xem LM tutorial của Tensorflow cho một ví dụ về cách cung cấp trạng thái của một LSTM để chạy tới.
Tensorflow cung cấp một số chức năng để thực hiện việc này một cách tự động. Kiểm tra Tensorflow DevSummit Tutorial trên RNN API để biết thêm. Tôi liên kết chính xác thứ hai, nơi các chức năng mong muốn được giải thích. Chức năng là tf.contrib.training.batch_sequences_with_states(...)
Là lời khuyên cuối cùng, tôi khuyên bạn nên suy nghĩ lại về nhiệm vụ của mình. Thực tế, một chuỗi thời gian 25000 là một chuỗi dài thực sự và tôi lo lắng về việc thậm chí một LSTM thậm chí không thể quản lý những phụ thuộc quá khứ như vậy. Ý tôi là khi bạn xử lý phần tử 24000 của loạt bài, trạng thái LSTM có lẽ đã quên mọi thứ về phần tử thứ nhất. Trong những trường hợp này, hãy thử xem dữ liệu của bạn để xem đó là thang đo của hiện tượng của bạn. Nếu bạn không cần độ chi tiết của một giây (tức là chuỗi video của bạn có nhiều dự phòng vì các tính năng không thay đổi nhanh chóng theo thời gian), hãy giảm bớt chuỗi video của bạn để có chuỗi ngắn hơn để quản lý.
Cảm ơn bạn đã phản hồi. 25.000 bước thời gian đến từ nội suy và lựa chọn số điểm. Tôi luôn có thể thay đổi nó. Số bước tối đa sẽ là bao nhiêu? Ngoài ra tôi không hoàn toàn hiểu làm thế nào bạn làm chunking ngay cả sau khi đọc tất cả các liên kết của bạn. –
Tôi đã chỉnh sửa câu trả lời. Cho tôi biết nếu nó rõ ràng hơn. Đối với những gì liên quan đến số bước thời gian tối đa, nó phụ thuộc vào nhu cầu của bạn. LSTM có khả năng học phụ thuộc khá xa trong quá khứ, nhưng theo kinh nghiệm của tôi, đi xa hơn 100 bước thời gian là không tốt. Vì vậy, như một đầu vào duy nhất, không vượt quá khối quá dài trong kích thước thời gian (giữ 20-50 là tốt hơn) –