Nhiều đầu ra cho dự đoán trước nhiều bước bằng LSTM với máy ảnh


7

Tôi mới học sâu và LSTM (với máy ảnh). Tôi đang cố gắng để giải quyết một dự đoán chuỗi thời gian nhiều bước trước. Tôi có 3 chuỗi thời gian: A, B và C và tôi muốn dự đoán các giá trị của C. Tôi đang đào tạo LSTM cho ăn 3 bước lùi điểm dữ liệu để dự đoán 3 bước tiếp theo trong tương lai. Dữ liệu đầu vào trông như sau:

X = [[[A0, B0, C0],[A1, B1, C1],[A2, B2, C2]],[[ ...]]]

với kích thước : (1000, 3, 3). Đầu ra là:

y = [[C3, C4, C5],[C4, C5, C6],...]

với kích thước : (1000, 3).

Tôi đang sử dụng một LSTM đơn giản với 1 lớp ẩn (50 nơ-ron). Tôi thiết lập một LSTM với các máy ảnh là:

n_features = 3
neurons = 50
ahead = 3
model = Sequential()
model.add(LSTM(input_dim=n_features, output_dim=neurons))
model.add(Dropout(.2))
model.add(Dense(input_dim=neurons, output_dim=ahead))
model.add(Activation('linear'))
model.compile(loss='mae', optimizer='adam')
model.fit(X, y, epochs=50)

Mô hình này hoạt động tốt. Bây giờ, tôi cũng muốn dự đoán các giá trị của B (sử dụng cùng một đầu vào). Vì vậy, tôi đã cố gắng định hình lại đầu ra theo cách tương tự như tôi đã làm cho khóa đào tạo có nhiều tính năng:

 y = [[[B3, C3],[B4, C4],[B5, C5]],[[ ...]]]

để nó có kích thước : (1000, 3, 2). Tuy nhiên, điều này cho tôi một lỗi:

Error when checking target: expected activation_5 to have 2 dimensions, 
but got array with shape (1000, 3, 2)

Tôi đoán cấu trúc của mạng cần phải thay đổi. Tôi đã cố gắng sửa đổi model.add(Dense(input_dim=neurons, output_dim=ahead))nhưng không thành công. Tôi có nên định hình lại ykhác nhau không? Là cấu trúc của mạng sai?


Tôi cũng đang làm việc về vấn đề tương tự. Bạn có thể vui lòng tham khảo ý kiến ​​của tôi về cách bạn đã chuẩn bị dữ liệu của mình theo cách như vậy không? X = [[[A0, B0, C0], [A1, B1, C1], [A2, B2, C2]], [[...]]]? Tôi cũng có câu hỏi: khi bạn dự đoán 3 điểm tiếp theo, bạn đã sử dụng 3 điểm trước chưa? Nhưng khi bạn muốn dự báo lần thứ 5 bạn có sử dụng dự báo thứ 4 không? Cảm ơn bạn trước?
osaozz

Thay đổi đầu ra của lớp
Mật

Nếu bạn luôn cung cấp cùng một độ dài và xuất ra cùng một độ dài thì bạn không thực sự cần bất kỳ loại RNN nào và có thể nhận được kết quả tốt hơn nếu bạn không sử dụng chúng.
kbrose

Câu trả lời:


1
model = Sequential()
model.add(LSTM(input_dim=n_features, output_dim=neurons))
model.add(Dropout(.2))
model.add(Flatten())
model.add(Dense(ahead))
model.compile(loss='mae', optimizer='adam')
model.fit(X, y, epochs=50)

Sự khác biệt bao gồm:

  • Tôi đang làm phẳng đầu ra từ LSTM, vì nó sẽ tạo ra một tenxơ 3D và một lớp dày đặc cho kịch bản này, tôi tin rằng sẽ mong đợi một tenor 2D.
  • Thực hiện thay đổi thay đổi được đề xuất trong một câu trả lời khác .
  • Đã xóa lớp kích hoạt, vì kích hoạt mặc định của lớp dày đặc Keraslinear.
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.