Я пытаюсь создать ИИ, используя модель Кераса, которая учится играть в понг. Входные данные, которые принимает моя текущая модель, представляют собой список кортежа agent.rect, который берется из функции pygame.Rect () и agent.rect.center вместе с ботом, который я кодировал, и шаром игры. Как построить модель, которая принимает входные данные такого типа и выдает правильный результат.
Я пытался изменить input_dim на 18 по сравнению с исходным кодом, но это не сработало
Это моя модель
def network(self):
model = Sequential()
model.add(Dense(output_dim=120, activation='relu', input_dim=6))
model.add(Dropout(0.15))
model.add(Dense(output_dim=120, activation='relu'))
model.add(Dropout(0.15))
model.add(Dense(output_dim=120, activation='relu'))
model.add(Dropout(0.15))
model.add(Dense(output_dim=3, activation='softmax'))
opt = Adam(self.learning_rate)
model.compile(loss='mse', optimizer=opt)
return model
Это состояние, которое япопытался вставить
def get_state(self, pong, player, bot):
state = [player.rect, player.rect.center, pong.rect, pong.rect.center, bot.rect, bot.rect.center]
self.length = len(state)
return np.asarray(state)
И вот где ошибка:
print self.model.predict(np.array(next_state))
target = reward + self.gamma * np.amax(self.model.predict(np.array([next_state]))[0])
target_f = self.model.predict(np.array([state]))
target_f[0][np.argmax(action)] = target
self.model.fit(np.array([state]), target_f, epochs=1, verbose=0)
Вывод ошибки: ValueError: Ошибка при проверке ввода: ожидается, что dens_1_input имеет форму (6,), нополучил массив с формой (1,)