Man*_*ngo 14 machine-learning neural-network keras recurrent-neural-network
我想了解RNN,特别是LSTM如何使用Keras和Tensorflow处理多个输入维度.我的意思是输入形状是(batch_size,timesteps,input_dim),其中input_dim> 1.
我认为如果input_dim = 1,下面的图像很好地说明了LSTM的概念.
这是否意味着如果input_dim> 1则x不是单个值还有一个阵列?但是如果它是这样的那么权重也变成数组,形状与x +上下文相同?
Keras 创建一个计算图,根据特征(但针对所有单位)执行底部图片中的序列。这意味着状态值 C 始终是标量,每单位一个。它不会立即处理特征,而是一次处理单元,并单独处理特征。
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)
Run Code Online (Sandbox Code Playgroud)
其中4
代表下图中的 f、i、c 和 o 内部路径各一个。第一项是内核的权重数,第二项是循环内核的权重数,最后一项是偏差(如果应用)。为了
units = 1
timesteps = 1
features = 1
Run Code Online (Sandbox Code Playgroud)
我们看
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,)
Run Code Online (Sandbox Code Playgroud)
并为
units = 1
timesteps = 1
features = 2
Run Code Online (Sandbox Code Playgroud)
我们看
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,)
Run Code Online (Sandbox Code Playgroud)
其中bias_c
是状态 C 的输出形状的代理。请注意,关于单元的内部制作有不同的实现。详细信息请参见此处(http://deeplearning.net/tutorial/lstm.html),默认实现使用 Eq.7。希望这可以帮助。
归档时间: |
|
查看次数: |
3000 次 |
最近记录: |