- 输入应该是什么样的?
您认为 2D 张量是正确的,但通常我们会为批次添加一个维度。您确实可以拥有可变长度的 number_of_x_inputs,但要在批处理期间进行训练,单个批次中的所有输入都需要具有相同的形状。(将批量大小设置为 1 可以解决这个问题。)在推理期间,您可以拥有任何您想要的长度。请参见下面的代码示例。
- 在将每个输入向量馈送到 RNN 层之前,如何通过相同的转换传递它?
使用TimeDistributed
. 下面的示例传递所有向量X一世通过相同的前馈网络(Dense(5, ...)
),但您应该能够将其换成f
您的想法。
from keras.models import Sequential
from keras.layers import LSTM, Dense, TimeDistributed
x_dimension = 16
num_classes = 2
model = Sequential()
model.add(TimeDistributed(Dense(5, activation='relu'),
input_shape=(None, x_dimension)))
model.add(LSTM(32, return_sequences=True))
model.add(LSTM(8))
model.add(Dense(num_classes, activation='softmax'))
print(model.summary(90))
这将打印以下模型:
Layer (type) Output Shape Param #
==========================================================================================
time_distributed_1 (TimeDistributed) (None, None, 5) 85
__________________________________________________________________________________________
lstm_1 (LSTM) (None, None, 32) 4864
__________________________________________________________________________________________
lstm_2 (LSTM) (None, 8) 1312
__________________________________________________________________________________________
dense_2 (Dense) (None, 2) 18
==========================================================================================
Total params: 6,279
Trainable params: 6,279
Non-trainable params: 0
__________________________________________________________________________________________