2017-05-24 24 views
8

Tôi không thể hiểu đầu ra từ hàm tf.nn.dynamic_rnn chức năng lưu lượng. Tài liệu chỉ nói về kích thước của đầu ra, nhưng nó không cho biết mỗi hàng/cột có ý nghĩa gì. Từ tài liệu:Phân tích kết quả đầu ra từ hàm tf.nn.dynamic_rnn tensorflow

kết quả đầu ra: Đầu ra RNN Tensor.

Nếu time_major == False (mặc định), đây sẽ là Tensor có hình dạng: [batch_size, max_time, cell.output_size].

Nếu time_major == Đúng, đây sẽ là Tensor có hình dạng: [max_time, batch_size, cell.output_size].

Lưu ý, nếu cell.output_size là một (có thể lồng nhau) tuple của số nguyên hoặc TensorShape đối tượng, sau đó outputs sẽ là một tuple có
cấu trúc tương tự như cell.output_size, chứa tensors có hình dạng tương ứng với dữ liệu hình dạng trong cell.output_size.

trạng thái: Trạng thái cuối cùng. Nếu cell.state_size là một int, điều này sẽ được định hình [batch_size, cell.state_size]. Nếu đó là
TensorShape, hình này sẽ được định hình [batch_size] + cell.state_size.
Nếu đó là một bộ (có thể lồng nhau) của các số int hoặc TensorShape, điều này sẽ là một bộ có hình dạng tương ứng.

Dây an toàn outputs là ma trận 3-D nhưng mỗi hàng/cột đại diện cho điều gì?

Trả lời

12

tf.dynamic_rnn cung cấp hai đầu ra, outputsstate.

  • outputs chứa đầu ra của ô RNN ở mọi thời điểm. Giả sử số time_major == False mặc định, giả sử bạn có đầu vào bao gồm 10 ví dụ với 7 bước thời gian và một vectơ tính năng có kích thước 5 cho mỗi bước thời gian. Sau đó, đầu vào của bạn sẽ là 10x7x5 (batch_size x max_time x features). Bây giờ bạn cung cấp cho điều này như là một đầu vào cho một tế bào RNN với kích thước đầu ra 15. Khái niệm, mỗi bước thời gian của mỗi ví dụ là đầu vào cho RNN, và bạn sẽ nhận được một véc tơ 15-dài cho mỗi trong số đó. Vì vậy, đó là những gì outputs chứa, một tensor trong trường hợp này kích thước 10x7x15 (batch_size x max_time x cell.output_size) với đầu ra của ô RNN ở mỗi bước thời gian. Nếu bạn chỉ quan tâm đến kết quả cuối cùng của ô, bạn có thể chỉ cắt kích thước thời gian để chọn phần tử cuối cùng (ví dụ: outputs[:, -1, :]).
  • state chứa trạng thái của RNN sau khi xử lý tất cả các yếu tố đầu vào. Lưu ý rằng, không giống như outputs, thông tin này không chứa thông tin về mọi bước thời gian mà chỉ chứa thông tin về bước cuối cùng (tức là trạng thái sau ảnh cuối cùng). Tùy thuộc vào trường hợp của bạn, nhà nước có thể hoặc có thể không hữu ích. Ví dụ, nếu bạn có trình tự rất dài, bạn có thể không muốn/có thể xử lý chúng trong một lô duy nhất, và bạn có thể cần phải phân chia chúng thành nhiều chuỗi. Nếu bạn bỏ qua các state, sau đó bất cứ khi nào bạn đưa ra một chuỗi mới nó sẽ giống như bạn đang bắt đầu một cái mới; tuy nhiên, nếu bạn nhớ trạng thái đó (ví dụ:xuất nó hoặc lưu trữ nó trong một biến), bạn có thể đưa nó trở lại sau (thông qua tham số initial_state của tf.nn.dynamic_rnn) để theo dõi chính xác trạng thái của RNN và chỉ đặt lại trạng thái ban đầu (thường là tất cả các số không) sau khi bạn đã hoàn thành toàn bộ chuỗi. Hình dạng state có thể thay đổi tùy thuộc vào ô RNN mà bạn đang sử dụng, nhưng nói chung, bạn có một số trạng thái cho mỗi ví dụ (một hoặc nhiều tensors có kích thước batch_size x state_size, trong đó state_size tùy thuộc vào loại và kích cỡ ô).
+2

Điều này, nhưng tôi tin rằng 'state' bổ sung giữ trạng thái ở mọi lớp trong mạng của bạn. Vì vậy, nếu bạn đang sử dụng GRU, bạn sẽ có một trạng thái cho đầu ra của các lớp ứng viên và cổng của bạn, và nếu GRU của bạn là ô cho RNN nhiều lớp, bạn sẽ có các trạng thái này cho mỗi lớp trong mạng của bạn. – Engineero

+0

@Engineero Vâng, đúng vậy, cảm ơn. Tôi đã không đưa ra nhiều chi tiết, nhưng nhà nước cho các tế bào RNN nhiều lớp sẽ là một danh sách các trạng thái của mỗi tế bào riêng biệt, cho các tế bào LSTM sẽ là một cặp tensors và như vậy. – jdehesa

+0

@jdehesa - Bạn có thể vui lòng xem câu hỏi khác mà tôi nêu ra không? https://stackoverflow.com/questions/44116689/siamese-model-with-lstm-network-fails-to-train-using-tensorflow – Mithun

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