[source]

Recurrent

keras.layers.recurrent.Recurrent(weights=None, return_sequences=False, go_backwards=False, stateful=False, unroll=False, consume_less='cpu', input_dim=None, input_length=None)

Recurrentレイヤーに対する抽象的な基底クラス. モデルの中では利用しないでください -- これは直接利用可能なレイヤーではありません! 代わりに子クラスであるLSTM, GRU, SimpleRNNを利用してください.

すべてのRecurrentレイヤー (LSTM, GRU, SimpleRNN) はこのクラスの仕様に従い,下に列挙したキーワード引数が使用可能です.

# Sequentialモデルの最初のレイヤーとして
model = Sequential()
model.add(LSTM(32, input_shape=(10, 64)))
# ここで model.output_shape == (None, 32)
# 注: `None`はバッチ次元.note: `None` is the batch dimension.

# 以下は同様の意味です:
model = Sequential()
model.add(LSTM(32, input_dim=64, input_length=10))

# 2層目以降のレイヤーに対しては,入力サイズを指定する必要はありません:
model.add(LSTM(16))

引数

  • weights: 重みの初期値として設定するnumpy arrayのリスト. リストは次のshapeを持つ3つの要素からなります: [(input_dim, output_dim), (output_dim, output_dim), (output_dim,)].
  • return_sequences: 論理型.出力シーケンスの最後の出力を返すか, 完全なシーケンスを返すか.
  • go_backwards: 論理型(デフォルトはFalse). Trueであれば,入力シーケンスを逆向きに進みます.
  • stateful: 論理型(デフォルトはFalse).Trueであれば,バッチ内の添字iの各サンプル に対する最後の状態が次のバッチ内の添字iのサンプルに対する初期状態として使われます.
  • unroll: 論理型(デフォルトはFalse).Trueであれば,ネットワークは展開され, そうでなければシンボリックループが使われます.TensorFlowを利用するとき,ネットワークは 常に展開されるので,この引数は何もしません. 展開はよりメモリ集中傾向になりますが,RNNをスピードアップできます. 展開は短いシーケンスにのみ適しています.
  • consume_less: "cpu", "mem", "gpu"(LSTM/GRUのみ)のいずれか. "cpu"に設定すれば,RNNは少ない代わりに大きい行列積を用いた実装を利用します. CPUでは速く動作する一方,多くのメモリを消費します. "mem"に設定すれば,RNNは多い代わりに小さい行列積を用いた実装を利用します. CPUでは遅く動作する一方(GPUではむしろ高速になるかもしれません), メモリの消費は少なくなります. "gpu"に設定すれば(LSTM/GRUのみ),RNNは入力ゲート, 忘却ゲート,出力ゲートを1つの行列に結び付け, GPUにおいてより計算時間の効率の良い並列化を可能にします. 注意: RNNのドロップアウトはすべてのゲートに対して共有化されている必要があり, 結果として僅かに正則化の効果が低減します.

  • input_dim: 入力の次元(整数) この引数(または代わりのキーワード引数input_shape)は このレイヤーをモデルの最初のレイヤーとして利用するときに必要となります.

  • input_length: 入力シーケンスの長さ. この引数はFlattenひいてはDenseなレイヤーを上流に結びつけるときに必要となります. (これなしでは,密な出力のshapeを計算できません). 注意: Recurrentレイヤーがあなたのモデルの最初のレイヤーでなければ, 最初のレイヤーのレベルで入力の長さを指定する必要があります (例えばinput_shape引数を通じて).

入力のshape

shape (nb_samples, timesteps, input_dim)を持つ3次元テンソル.

出力のshape

  • return_sequencesのとき: shape (nb_samples, timesteps, output_dim)を持つ3次元テンソル.
  • そうでないとき,shape (nb_samples, output_dim)を持つ2次元テンソル.

マスキング

このレイヤーはタイムステップの変数を持つ入力データに対するマスキングをサポートします. あなたのデータにマスクを導入するためには, Trueに設定されたmask_zeroパラメータを持つ埋め込みレイヤーを利用してください.

パフォーマンスの注意点

RNNのパフォーマンスはTensorFlowよりもTheanoのほうが遥かに優れています. 加えて,TensorFlowを使う際は,unroll=Trueがよりパフォーマンスが良いです.

Recurrentレイヤーで状態管理を利用するときの注意点

Recurrentレイヤーが状態管理されるように設定できます. これは1つのバッチのサンプルに対して計算される状態が 次のバッチのサンプルに対する初期状態として再利用されることを意味します. これは異なる連続したバッチのサンプル間の1対1対応を仮定します.

状態管理を可能にするためには: - レイヤーコンストラクタにおいてstateful=Trueを指定してください. - もしsequentialモデルなら: batch_input_shape=(...)を最初のレイヤーに 1つ以上の入力層をもったfunctionalモデルなら: batch_shape=(...)をモデルのすべての最初のレイヤーに 渡すことで固定長のバッチサイズを指定してください. これはバッチサイズを含むあなたの入力の期待されるshapeです. これは整数のタプルであるべきです,例えば(32, 10, 100)

あなたのモデルの状態を再設定するためには,指定したレイヤーもしくは あなたの全体のモデル上で.reset_states()を呼び出してください.

TensorFlowでドロップアウトを利用するときの注意

TensorFlowバックエンドを利用するとき,状態管理されたRecurrentレイヤーについての注意に従って, あなたのモデルに対する固定されたバッチサイズを指定してください.


[source]

SimpleRNN

keras.layers.recurrent.SimpleRNN(output_dim, init='glorot_uniform', inner_init='orthogonal', activation='tanh', W_regularizer=None, U_regularizer=None, b_regularizer=None, dropout_W=0.0, dropout_U=0.0)

出力が入力にフィードバックされる全結合RNN.

引数

  • output_dim: 内部の射影と最終的な出力の次元
  • init: 重み初期化関数 既存の関数やTheano関数の名前(str)をとることができます (参照: 初期化).
  • inner_init: 内部のセルの初期化関数.
  • activation: 活性化関数. 既存の関数やTheano関数の名前(str)をとることができます (参照: 活性化).
  • W_regularizer: 重み正則化の例 (例えばL1もしくはL2正則化),入力の重み行列に適用されます.
  • U_regularizer: 重み正則化の例 (例えばL1もしくはL2正則化),リカレント重み行列に適用されます.
  • b_regularizer: 重み正則化の例,バイアスに適用されます.
  • dropout_W: 0と1の間のfloat.入力ゲートに対してドロップする入力ユニットの割合.
  • dropout_U: 0と1の間のfloat.リカレント結合に対してドロップする入力ユニットの割合.

参考文献


[source]

GRU

keras.layers.recurrent.GRU(output_dim, init='glorot_uniform', inner_init='orthogonal', activation='tanh', inner_activation='hard_sigmoid', W_regularizer=None, U_regularizer=None, b_regularizer=None, dropout_W=0.0, dropout_U=0.0)

ゲートのあるリカレントユニット - Cho et al. 2014.

引数

  • output_dim: 内部の射影と最終的な出力の次元
  • init: 重み初期化関数 既存の関数やTheano関数の名前(str)をとることができます (参照: 初期化).
  • inner_init: 内部のセルの初期化関数.
  • activation: 活性化関数. 既存の関数やTheano関数の名前(str)をとることができます (参照: 活性化).
  • inner_activation: 内部セルに対する活性化関数.
  • W_regularizer: 重み正則化の例 (例えばL1もしくはL2正則化),入力の重み行列に適用されます.
  • U_regularizer: 重み正則化の例 (例えばL1もしくはL2正則化),リカレント重み行列に適用されます.
  • b_regularizer: 重み正則化の例,バイアスに適用されます.
  • dropout_W: 0と1の間のfloat.入力ゲートに対してドロップする入力ユニットの割合.
  • dropout_U: 0と1の間のfloat.リカレント結合に対してドロップする入力ユニットの割合.

参考文献


[source]

LSTM

keras.layers.recurrent.LSTM(output_dim, init='glorot_uniform', inner_init='orthogonal', forget_bias_init='one', activation='tanh', inner_activation='hard_sigmoid', W_regularizer=None, U_regularizer=None, b_regularizer=None, dropout_W=0.0, dropout_U=0.0)

長短期記憶ユニット - Hochreiter 1997.

アルゴリズムの段階的な記述については, このチュートリアルを参照してください.

引数

  • output_dim: 内部の射影と最終的な出力の次元
  • init: 重み初期化関数 既存の関数やTheano関数の名前(str)をとることができます (参照: 初期化).
  • inner_init: 内部のセルの初期化関数.
  • forget_bias_init: 忘却ゲートのバイアスに対する初期化関数. Jozefowicz et al. は1で初期化することを推奨しています.
  • activation: 活性化関数. 既存の関数やTheano関数の名前(str)をとることができます (参照: 活性化).
  • inner_activation: 内部セルに対する活性化関数.
  • W_regularizer: 重み正則化の例 (例えばL1もしくはL2正則化),入力の重み行列に適用されます.
  • U_regularizer: 重み正則化の例 (例えばL1もしくはL2正則化),リカレント重み行列に適用されます.
  • b_regularizer: 重み正則化の例,バイアスに適用されます.
  • dropout_W: 0と1の間のfloat.入力ゲートに対してドロップする入力ユニットの割合.
  • dropout_U: 0と1の間のfloat.リカレント結合に対してドロップする入力ユニットの割合.

参考文献