1 분 소요

본 게시물은 tensorflow의 포스트를 보고 정리하는 글이다.

tf.keras.layers.LSTMCell(
    units,
    activation='tanh',
    recurrent_activation='sigmoid',
    use_bias=True,
    kernel_initializer='glorot_uniform',
    recurrent_initializer='orthogonal',
    bias_initializer='zeros',
    unit_forget_bias=True,
    kernel_regularizer=None,
    recurrent_regularizer=None,
    bias_regularizer=None,
    kernel_constraint=None,
    recurrent_constraint=None,
    bias_constraint=None,
    dropout=0.0,
    recurrent_dropout=0.0,
    **kwargs
)

📌 LSTM vs LSTMCell

  • LSTM: recurrent layer로 전체 sequence를 처리 할 수 있음.
  • LSTMCell: 전체 sequence 중 한 단계만을 처리하는 object

recurrent layer에는 cell 객체들이 포함되어 있으며, cell에는 각 단계의 계산을 위한 코드가 포함되어 있다. 즉, recurrent layer는 각 cell에게 계산을 위한 명령을 내리고 cell은 이를 수행한다. LSTMCell은 RNN layer의 cell 부분으로 입력되어 LSTM과 동일한 기능을 수행할 수 있다. LSTM 또한 내부 코드는 RNN에 LSTMCell을 포함한 것이다.

📌 Args

  • units: output의 demension
  • activation: cell state 연산시 사용되는 activation function으로 default는 tanh이다. None일 경우 activation이 적용되지 않는다.
  • recurrent_activation: input/ forget/ output gate 연산시 사용되는 activation function으로 default는 sigmoid이다. None일 경우 activation이 적용되지 않는다.
  • use_bias: layer가 bias를 사용하는지에 대한 여부로 default는 True이다.
  • kernel_initializer: input의 선형변환에 사용되는 kernel weight matrix의 initializer이다. (input이 cell 연산되기 전 kernel weight와 연산됨)
  • recurrent_initializer: hidden state의 선형변환에 사용되는 recurrent kernel weight matrix의 initializer이다. (hidden state들이 연산되기 전 recurrent kernel weight와 연산됨)
  • bias_initializer: bias의 initializer이다.
  • unit_forget_bias: forget gate의 bias에 1을 더하며, default 값은 True이다. True시 bias_initializer 또한 True로 세팅된다. (추천)
  • kernel_regularizer: kernel weight matrix에 정규화를 적용하며, default는 None이다.
  • recurrent_regularizer: recurrent kernel weight matrix에 정규화를 적용하며, default는 None이다.
  • bias_regularizer: bias에 정규화를 적용하며, default는 None이다.
  • kernel_constraint: kernel weight matrix에 적용하는 제약식이며, default는 None이다.
  • recurrent_constraint: recurrent kernel weight matrix에 적용하는 제약식이며, default는 None이다.
  • bias_constraint: bias에 적용하는 제약식이며, default는 None이다.
  • dropout: input에 적용하는 dropout이며, default는 0이다.
  • recurrent_dropout: hidden state에 적용하는 dropout이며, default는 0이다.

📌 Example

inputs = tf.random.normal([32, 10, 8])
rnn = tf.keras.layers.RNN(tf.keras.layers.LSTMCell(4))
output = rnn(inputs)
print(output.shape)
(32, 4)
rnn = tf.keras.layers.RNN(
   tf.keras.layers.LSTMCell(4),
   return_sequences=True,
   return_state=True)
whole_seq_output, final_memory_state, final_carry_state = rnn(inputs)
print(whole_seq_output.shape)
print(final_memory_state.shape)
print(final_carry_state.shape)
(32, 10, 4)
(32, 4)
(32, 4)

댓글남기기