我正在使用 LSTM 层构建 DQN。尝试将 96 个时间段、33 个特征数组传递给模型,用于训练,即:shape=(96, 33) 还尝试实现后填充掩码 (val=0.) 以适应可变长度序列(最大长度=96)。
model = Sequential()
inp = (NUM_TIMEPERIODS, NUM_FEATURES)
model.add(Masking(mask_value=0., input_shape=inp))
model.add(LSTM(NUM_FEATURES, input_shape=inp, activation='tanh', return_sequences=True))
model.add(LSTM(NUM_FEATURES, activation='tanh'))
model.add(Dense(NUM_FEATURES, activation='relu'))
model.add(Dense(4, activation='softmax'))
model.compile(loss='sparse_categorical_crossentropy',
optimizer=Adam(lr=LEARNING_RATE, decay=DECAY),
metrics=['accuracy'])
当我提交一个名为 current_states 的序列时,形状为 (96, 33),使用:
current_qs_list = self.model.predict(current_states)
要生成 q 值,返回错误:
ValueError: Input 0 of layer lstm is incompatible with the layer:
expected ndim=3, found ndim=2. Full shape received: [32, 33]
我认为 32 是被提交给模型的第一个序列的屏蔽长度(超出最大长度 96),并被转储......试图在屏蔽层之前立即添加一个输入层:
model.add(Input(batch_size=None, shape=inp))
但没有解决方案,只有更多的错误。请问如何重写模型输入层以在 [96,33] 数组上接收和训练?或者我是否需要将一批序列(例如:4 个序列)合并到一个数组中作为 [4, 96, 33] 然后提交给模型?