Мой код выглядит так:
lr = 1e-3
window_length = 1
emb_size = 100
look_back = 10
expert_model = Sequential()
expert_model.add(Embedding(num_classes + 1, emb_size, input_length=look_back,mask_zero=True))
expert_model.add(LSTM(64, input_shape=(look_back,window_length)))
expert_model.add(Dense(num_classes, activation='softmax'))
Все, что я хочу, это передать список классов размера 10 слою внедрения, а затем LSTM, чтобы предсказать следующий класс. Возможно, длина этого списка не равна 10, поэтому я присвоил атрибуту mask_zero
значение True
и словарь слоя внедрения с одним дополнительным значением. Это правильно?
Кроме того, я не очень уверен, что означает window_length
. Означает ли это количество последовательностей, которые нужно передать встраиванию? Когда я пытаюсь запустить это, я получаю эту ошибку:
ValueError: Error when checking input: expected embedding_13_input to have 2 dimensions, but got array with shape (1, 1, 0)
Для предварительной обработки данных я использую объект Processor
, так как эта модель предназначена для среды OpenAI под названием «RecoGym». Класс выглядит следующим образом:
class RecoProcessor(Processor):
def process_observation(self, observation):
if observation is None:
return np.array([], dtype='float32')
return np.array(observation, dtype='float32')
def process_state_batch(self, batch):
return np.array(batch).astype('float32')
def process_reward(self, reward):
return np.array(reward).astype('float32')
def process_demo_data(self, demo_data):
for step in demo_data:
step[0] = self.process_observation(step[0])
step[2] = self.process_reward(step[2])
return demo_data
Пожалуйста, мне нужна помощь. Если бы вы только могли дать мне учебник по этому вопросу, я был бы очень признателен.