2016-04-20 32 views
9

Przy konfiguracji jak poniżej dla BasicLSTM komórce:Co to jest state_size z MultiRNNCell w TensorFlow?

... 
num_layers = 2 
num_steps = 10 
hidden_size = 200  
... 

używam 2-warstw ukrytych model:

lstm_cell = rnn_cell.BasicLSTMCell(hidden_size, forget_bias=0.0) 
cell = rnn_cell.MultiRNNCell([lstm_cell] * 2) 

Jaki jest cell.state_size?

Dostałem go jako 30 x 800, ale nie mogę zrozumieć, jak do niego dojdzie?

PS: odnoszą się do kodu źródłowego w https://github.com/tensorflow/tensorflow/blob/97f585d506cccc57dc98f234f4d5fcd824dd3c03/tensorflow/python/ops/rnn_cell.py#L353

Wydaje powrócić statesize jak 2 * unitsize. Ale dlaczego rozmiar państwa powinien być dwa razy większy od rozmiaru jednostki?

Odpowiedz

6

Aby obliczyć krok LSTM trzeba zastosować cztery funkcje każdej z wymiarem hidden_size:

  • brama wejściowa
  • brama wyjściowa
  • zapomnieć brama
  • ukryty stan

, więc potrzebujesz hidden_size * 4 = 200 * 4 = 800

Numer 30 pochodzi z wielkości partii, ponieważ przetwarzasz 30 próbek na partię.

i to jest zużycie pamięci komórek (30, 800)

Zobacz Colah's blog post który wyjaśnia te operacje w sposób bardziej szczegółowy.

+0

Dzięki @fabrizioM! Ale lstm_cell.state_size = 400. Sądzę, że state_size ma znaczenie dla całkowitej liczby warstw RNN, nie tylko dla trzech bramek i jednego stanu, jak wspomniano powyżej? – zshtom

1

Sprawdź tę http://deeplearning.net/tutorial/lstm.html

LSTM posiada dwa wyjścia, c_t (stan) i h_t (ukryty) i są one zwrócone w stanie. Wyjście o_t jest funkcją (h_ (t-1), C_t, x_t), który jest wyjściem, które jest używane do klasyfikacji output_t, [C_t, h_t] = tf.rnn.rnn (...)

7

Dla pojedynczego BasicLSTMCell, stan jest krotką z (c=200, h=200), w twoim przypadku. c to stan komórek 200 jednostek (neuronów) i h jest stanem ukrytym 200 jednostek.

Aby to zrozumieć, weź pod uwagę waniliową komórkę RNN. Ma tylko jeden stan ukryty, przechodzący od jednego kroku do drugiego. Jest tak w przypadku BasicRNNCell zaimplementowanego w TensorFlow. Jego stan to jedna liczba całkowita h = 200, jeśli wykonasz tf.nn.rnn_cell.BasicRNNCell(200).

LSTM dodatkowa warstwa komórek pamięci wzdłużnego od wielkości samego jak w ukrytej warstwie, więc ogólny stan na LSTM jest 2x200 = 400.

część wprowadzenie this paper może oddziaływać.


powiedzieć, że doc z TensorFlow jest nieco zbyt zwięzłe dla początkujących.