Я создаю DQN со слоями LSTM. Попытка передать модели 96timeperiod, 33 массивов функций для обучения ie: 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 с shape (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], а затем передать его модели?»