2017-02-26 32 views
6

(sử dụng python)Đầu ra của Tensorflow LSTM-Cell

Tôi có một câu hỏi về Tensorflow LSTM-Implementation. Hiện tại có một số triển khai vào TF, nhưng tôi sử dụng:

cell = tf.contrib.rnn.BasicLSTMCell(n_units) 
  • nơi n_units là số tiền của 'song song' LSTM-Cells.

Sau đó, để có được đầu ra của tôi, tôi gọi:

rnn_outputs, rnn_states = tf.nn.dynamic_rnn(cell, x, 
         initial_state=initial_state, time_major=False) 
  • nơi (như time_major=False) x là hình dạng (batch_size, time_steps, input_length)
  • nơi batch_size là batch_size tôi
  • nơi time_steps là lượng timesteps RNN của tôi sẽ đi qua
  • nơi input_length là chiều dài của một trong những vectơ đầu vào của tôi (vector đưa vào mạng trên một timestep cụ thể về một đợt cụ thể)

Tôi hy vọng rnn_outputs được hình dạng (batch_size, time_steps, n_units, input_length) như tôi đã không quy định khác kích thước đầu ra. Tài liệu về nn.dynamic_rnn cho tôi biết rằng đầu ra có hình dạng (batch_size, input_length, cell.output_size). Tài liệu của tf.contrib.rnn.BasicLSTMCell không có thuộc tính output_size, được mặc định là n_units (số lượng tế bào LSTM tôi sử dụng).

Vì vậy, mỗi LSTM-Cell chỉ xuất ra vô hướng cho mỗi dấu thời gian nhất định không? Tôi hy vọng nó sẽ xuất ra một vectơ có độ dài của vector đầu vào. Điều này có vẻ không phải là trường hợp từ cách tôi hiểu nó ngay bây giờ, vì vậy tôi bối rối. Bạn có thể cho tôi biết liệu đó là trường hợp hay làm thế nào tôi có thể thay đổi nó để xuất ra một vectơ có kích thước của vector đầu vào cho mỗi lstm-cell đơn lẻ?

+0

Làm thế nào bạn nhận được kết luận rằng mỗi ô LSTM chỉ xuất ra vô hướng cho mỗi dấu thời gian nhất định? – jabalazs

+0

bạn có thể đăng một đoạn mã hay một đoạn mã lớn hơn để chúng tôi có thể xem/tự chạy mã để hiểu rõ hơn về ngữ cảnh không? –

Trả lời

2

Tôi nghĩ sự nhầm lẫn chính là về thuật ngữ của đối số của ô LSTM: num_units. Thật không may nó không có nghĩa là, như tên cho thấy, "số lượng của các tế bào LSTM" mà phải bằng với các bước thời gian của bạn. Chúng thực sự tương ứng với số thứ nguyên trong trạng thái ẩn (trạng thái ô + vector trạng thái ẩn). Các cuộc gọi đến dynamic_rnn() trả về một tensor của hình dạng: [batch_size, time_steps, output_size] nơi,

(Xin lưu ý đây) output_size = NUM_UNITS; if (num_proj = None) trong ô lstm
trong đó, output_size = num_proj; nếu nó được xác định.

Bây giờ, thông thường, bạn sẽ trích xuất kết quả time_step ngoái và dự kiến ​​nó sẽ kích thước của kích thước đầu ra bằng cách sử dụng hoạt động mat-mul + biases bằng tay, hoặc sử dụng các lập luận num_proj trong tế bào LSTM.
Tôi đã trải qua cùng một sự nhầm lẫn và phải nhìn thật sâu để xóa nó. Hy vọng câu trả lời này xóa một số của nó.

Các vấn đề liên quan