2016-01-28 18 views
14

Mam serię czasową długości t (x0, ..., xt) każda z xi jest wektorem wymiaru d, tj. Xi = (x0i, x1i, ...., xdi) . Zatem moje wejście X ma kształt [batch_size, d]Wejście do sieci LSTM tensorflow

Dane wejściowe dla tensorflow LSTM powinny mieć rozmiar [batchSize, hidden_size]. Moje pytanie brzmi: jak powinienem wprowadzić moje szeregi czasowe do LSTM. Jednym z możliwych rozwiązań, które myślałem, to posiadanie dodatkowej macierzy wagi, W, o wielkości [d, hidden_size] i wprowadzenie LSTM z X * W + B.

Czy to jest poprawne, czy też powinienem wprowadzić coś innego do netwo ר k?

Dzięki

+1

Podczas omawiania X wspominasz batch_size, ale dla LSTM wspominasz batchSize. Czy to to samo? – Sycorax

Odpowiedz

15

Twoja intuicja jest poprawna; to, czego potrzebujesz (i to, co opisałeś) jest osadzeniem, aby przetłumaczyć twój wektor wejściowy na wymiar twojego wejścia LSTM. Istnieją trzy główne sposoby, które znam, aby to osiągnąć.

  • Można to zrobić ręcznie z dodatkową matrycę waga W i polaryzacji wektora b jak opisano.
  • Można utworzyć macierz ciężaru i wektor obciążenia automatycznie za pomocą funkcji linear()from TensorFlow's rnn_cell.py library. Następnie przekazuj dane wyjściowe tej liniowej warstwy jako dane wejściowe twojego LSTM podczas tworzenia LSTM za pomocą funkcjilub w inny sposób.
  • Możesz też Tensorflow stworzyć to osadzenie i podłączyć je do wejść twojego LSTM automatycznie, tworząc LSTM przez funkcję 141 z tej samej biblioteki seq2seq. (Jeśli prześledzić za pomocą kodu dla tej funkcji bez żadnych argumentów opcjonalnych, zobaczysz, że jest to po prostu tworząc warstwę liniową osadzania dla wejścia, jak również LSTM i zaczepiając je razem.)

chyba że Potrzebuję dostępu do poszczególnych komponentów, które tworzysz z jakiegoś powodu, polecam trzecią opcję, aby utrzymać twój kod na wysokim poziomie.

+0

Czy to trzecie rozwiązanie faktycznie działa w tym przypadku? Czy możesz użyć embedding_rnn_decoder() dla rzadkiego, ale wielowymiarowego tensora wejściowego? Wygląda na to, że ta funkcja będzie wyglądać na osadzanie danych, biorąc pod uwagę jednowymiarową liczbę całkowitą lub jedno gorące kodowanie, ale nie jest to sposób na zmianę wymiarów wektorów wejściowych przy użyciu macierzy wagi. – bschreck

Powiązane problemy