10

RNN、特にLSTMがKerasとTensorflowを使用して複数の入力ディメンションでどのように動作しているかを理解したいと思います。 input_dim> 1の場合、入力シェイプは(batch_size、timesteps、input_dim)です。
input_dim = 1の場合、以下の画像がLSTMの概念をよく表していると思います。
input_dim> 1、xが単一の値ではなく配列です。しかし、このような場合、重みは配列、x +コンテキストと同じ形になりますか?KerasのLSTMの多次元入力

LSTM structure

enter image description here

答えて

2

Kerasは、機能ごとに(ただし、すべてのユニットのための)一番下の写真のシーケンスを実行し、計算、グラフを作成します。つまり、状態値Cは常にスカラーであり、単位あたり1つです。一度に機能を処理せず、一度にユニットを処理し、別々に機能します。 4は、Fのそれぞれのための1つを表す

import keras.models as kem 
import keras.layers as kel 

model = kem.Sequential() 
lstm = kel.LSTM(units, input_shape=(timesteps, features)) 
model.add(lstm) 
model.summary() 

free_params = (4 * features * units) + (4 * units * units) + (4 * num_units) 
print('free_params ', free_params) 
print('kernel_c', lstm.kernel_c.shape) 
print('bias_c', lstm.bias_c .shape) 

、I、C、およびあなたの下の写真で内部パスO。最初の項は、カーネルの重みの数、反復カーネルの2番目の項、バイアスが適用された場合の最後の項です。

units = 1 
timesteps = 1 
features = 1 

ために、我々は

Layer (type)     Output Shape    Param # 
================================================================= 
lstm_1 (LSTM)    (None, 1)     12 
================================================================= 
Total params: 12.0 
Trainable params: 12 
Non-trainable params: 0.0 
_________________________________________________________________ 
num_params 12 
kernel_c (1, 1) 
bias_c (1,) 

units = 1 
timesteps = 1 
features = 2 

ためには、我々はbias_cが状態C.注の出力形状のプロキシである

Layer (type)     Output Shape    Param # 
================================================================= 
lstm_1 (LSTM)    (None, 1)     16 
================================================================= 
Total params: 16.0 
Trainable params: 16 
Non-trainable params: 0.0 
_________________________________________________________________ 
num_params 16 
kernel_c (2, 1) 
bias_c (1,) 

を見ます異なることがあるユニットの内部作成に関する実装詳細はここにあり(http://deeplearning.net/tutorial/lstm.html)、デフォルトの実装では式7を使用します。お役に立てれば。

+0

私はまだ苦労しています。私は今、Cが形(特徴、単位)を持っていることを理解しています。したがって、ユニットCtの内側には形状(features、1)があります。ユニットの出力は、形状(1,1)のYtです、右か?つまり、2つのフィーチャがある場合は、どこか(2,1)から(1,1)に変更されます。私はこのステップを逃しています。 – Manngo