Как построить модель нейронной сети, которая принимает список кортежей - PullRequest
0 голосов
/ 07 ноября 2019

Я пытаюсь создать ИИ, используя модель Кераса, которая учится играть в понг. Входные данные, которые принимает моя текущая модель, представляют собой список кортежа 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,)

1 Ответ

0 голосов
/ 07 ноября 2019

Попробуйте это:

n_output = 3

def network(self):
        model = Sequential()
        model.add(Dense(6, input_dim=6, kernel_initializer='normal', activation='relu'))
        model.add(Dense(4, kernel_initializer='normal', activation='relu'))
        model.add(Dense(n_output, activation='softmax'))
        opt = Adam(self.learning_rate)
        model.compile(loss='mse', optimizer=opt)
        return model
...